use shared_ptr for subscribers vector in event system

Summary:
using shared_ptr for vector of subscribers
Further changes in commit stack support the mutiple subscribers in event system

Reviewed By: davidaurelio

Differential Revision: D15352512

fbshipit-source-id: fac7f4268abf9ca4277734aca2f21cd711eb7d6e
This commit is contained in:
Sidharth Guglani 2019-05-15 08:57:50 -07:00 коммит произвёл Facebook Github Bot
Родитель 44659d253e
Коммит 37c8771bc6
1 изменённых файлов: 12 добавлений и 5 удалений

Просмотреть файл

@ -7,6 +7,7 @@
#include "event.h"
#include <memory>
#include <stdexcept>
#include <mutex>
#include <iostream>
@ -15,23 +16,29 @@ namespace yoga {
namespace {
Event::Subscribers& eventSubscribers() {
static Event::Subscribers subscribers = {};
std::mutex& eventSubscribersMutex() {
static std::mutex subscribersMutex;
return subscribersMutex;
}
std::shared_ptr<Event::Subscribers>& eventSubscribers() {
static auto subscribers = std::make_shared<Event::Subscribers>();
return subscribers;
}
} // namespace
void Event::reset() {
eventSubscribers() = {};
eventSubscribers() = std::make_shared<Event::Subscribers>();
}
void Event::subscribe(std::function<Subscriber>&& subscriber) {
eventSubscribers().push_back(subscriber);
std::lock_guard<std::mutex> guard(eventSubscribersMutex());
eventSubscribers()->push_back(subscriber);
}
void Event::publish(const YGNode& node, Type eventType, const Data& eventData) {
for (auto& subscriber : eventSubscribers()) {
for (auto& subscriber : *eventSubscribers()) {
if (subscriber) {
subscriber(node, eventType, eventData);
}