4 #include <unordered_set> 5 #include "caffe2/core/logging.h" 18 virtual void Start() {}
19 virtual void Stop() {}
21 virtual std::string debugInfo() {
22 return "Not implemented.";
45 const Observer* AttachObserver(std::unique_ptr<Observer> observer) {
46 CAFFE_ENFORCE(observer,
"Couldn't attach a null observer.");
47 std::unordered_set<const Observer*> observers;
48 for (
auto& ob : observers_list_) {
49 observers.insert(ob.get());
52 const auto* observer_ptr = observer.get();
53 if (observers.count(observer_ptr)) {
56 observers_list_.push_back(std::move(observer));
66 for (
auto it = observers_list_.begin(); it != observers_list_.end(); ++it) {
67 if (it->get() == observer_ptr) {
68 auto res = std::move(*it);
69 observers_list_.erase(it);
76 virtual size_t NumObservers() {
77 return observers_list_.size();
80 void StartAllObservers() {
81 for (
auto& observer : observers_list_) {
86 void StopAllObservers() {
87 for (
auto& observer : observers_list_) {
93 std::vector<std::unique_ptr<Observer>> observers_list_;
Use this to implement a Observer using the Observer Pattern template.
std::unique_ptr< Observer > DetachObserver(const Observer *observer_ptr)
Returns a unique_ptr to the removed observer.
Inherit to make your class observable.
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...