/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ #include "event.h" #include #include #include #include namespace facebook { namespace yoga { namespace { std::mutex& eventSubscribersMutex() { static std::mutex subscribersMutex; return subscribersMutex; } std::shared_ptr& eventSubscribers() { static auto subscribers = std::make_shared(); return subscribers; } } // namespace void Event::reset() { eventSubscribers() = std::make_shared(); } void Event::subscribe(std::function&& subscriber) { std::lock_guard guard(eventSubscribersMutex()); eventSubscribers() = std::make_shared(*eventSubscribers()); eventSubscribers()->push_back(subscriber); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { std::shared_ptr subscribers; { std::lock_guard guard(eventSubscribersMutex()); subscribers = eventSubscribers(); } for (auto& subscriber : *subscribers) { if (subscriber) { subscriber(node, eventType, eventData); } } } } // namespace yoga } // namespace facebook