/* * ObservableTemplate.h * * Created on: 11.06.2014 * Author: matzman */ #ifndef OBSERVABLETEMPLATE_H_ #define OBSERVABLETEMPLATE_H_ #include #include #include #include namespace tfcppsimple { template class ObservableTemplate { protected: std::mutex observableLock; std::set listeners; public: bool addListener(C& listener) { std::lock_guard lock(observableLock); return listeners.insert(&listener).second; } bool removeListener(C& listener) { std::lock_guard lock(observableLock); return listeners.erase(&listener) == 1; } uint32_t notifyListeners(std::function visitor) { std::lock_guard lock(observableLock); uint32_t count = 0; for (auto l : listeners) { count++; if (!visitor(*l)) break; } return count; } }; } #endif /* OBSERVABLETEMPLATE_H_ */