Files
2014-06-16 11:16:21 +02:00

48 lines
909 B
C++

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