31#ifndef ETL_OBSERVER_INCLUDED
32#define ETL_OBSERVER_INCLUDED
72 observer_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
73 :
exception(reason_, file_name_, line_number_)
87 :
observer_exception(ETL_ERROR_TEXT(
"observer:full", ETL_OBSERVER_FILE_ID
"A"), file_name_, line_number_)
98 template <
typename TObserver, const
size_t MAX_OBSERVERS>
108 observer_item(TObserver& observer_)
109 : p_observer(&observer_)
114 TObserver* p_observer;
121 struct compare_observers
123 compare_observers(TObserver& observer_)
124 : p_observer(&observer_)
128 bool operator ()(
const observer_item& item)
const
130 return p_observer == item.p_observer;
133 TObserver* p_observer;
138 typedef size_t size_type;
151 typename Observer_List::iterator i_observer_item = find_observer(
observer);
154 if (i_observer_item == observer_list.
end())
172 typename Observer_List::iterator i_observer_item = find_observer(
observer);
175 if (i_observer_item != observer_list.
end())
178 observer_list.
erase(i_observer_item);
195 typename Observer_List::iterator i_observer_item = find_observer(
observer);
198 if (i_observer_item != observer_list.
end())
200 i_observer_item->enabled = state;
210 typename Observer_List::iterator i_observer_item = find_observer(
observer);
213 if (i_observer_item != observer_list.
end())
215 i_observer_item->enabled =
false;
224 observer_list.
clear();
232 return observer_list.
size();
240 template <
typename TNotification>
243 typename Observer_List::iterator i_observer_item = observer_list.
begin();
245 while (i_observer_item != observer_list.
end())
247 if (i_observer_item->enabled)
249 i_observer_item->p_observer->notification(n);
268 typename Observer_List::iterator find_observer(TObserver& observer_)
270 return etl::find_if(observer_list.
begin(), observer_list.
end(), compare_observers(observer_));
274 Observer_List observer_list;
277#if ETL_USING_CPP11 && !defined(ETL_OBSERVER_FORCE_CPP03_IMPLEMENTATION)
283 template <
typename T1,
typename... Types>
284 class observer :
public observer<T1>,
public observer<Types...>
288 using observer<T1>::notification;
289 using observer<Types...>::notification;
296 template <
typename T1>
301 virtual ~observer() =
default;
303 virtual void notification(T1) = 0;
312 template <
typename T1,
324 virtual void notification(T1) = 0;
325 virtual void notification(T2) = 0;
326 virtual void notification(T3) = 0;
327 virtual void notification(T4) = 0;
328 virtual void notification(T5) = 0;
329 virtual void notification(T6) = 0;
330 virtual void notification(T7) = 0;
331 virtual void notification(T8) = 0;
338 template <
typename T1,
350 virtual void notification(T1) = 0;
351 virtual void notification(T2) = 0;
352 virtual void notification(T3) = 0;
353 virtual void notification(T4) = 0;
354 virtual void notification(T5) = 0;
355 virtual void notification(T6) = 0;
356 virtual void notification(T7) = 0;
363 template <
typename T1,
374 virtual void notification(T1) = 0;
375 virtual void notification(T2) = 0;
376 virtual void notification(T3) = 0;
377 virtual void notification(T4) = 0;
378 virtual void notification(T5) = 0;
379 virtual void notification(T6) = 0;
386 template <
typename T1,
396 virtual void notification(T1) = 0;
397 virtual void notification(T2) = 0;
398 virtual void notification(T3) = 0;
399 virtual void notification(T4) = 0;
400 virtual void notification(T5) = 0;
407 template <
typename T1,
416 virtual void notification(T1) = 0;
417 virtual void notification(T2) = 0;
418 virtual void notification(T3) = 0;
419 virtual void notification(T4) = 0;
426 template <
typename T1,
434 virtual void notification(T1) = 0;
435 virtual void notification(T2) = 0;
436 virtual void notification(T3) = 0;
443 template <
typename T1,
450 virtual void notification(T1) = 0;
451 virtual void notification(T2) = 0;
458 template <
typename T1>
464 virtual void notification(T1) = 0;
ETL_CONSTEXPR exception(string_type reason_, string_type, numeric_type line_)
Constructor.
Definition: exception.h:69
Definition: exception.h:47
void notify_observers(TNotification n)
Definition: observer.h:241
void disable_observer(TObserver &observer)
Disable an observer.
Definition: observer.h:207
void add_observer(TObserver &observer)
Definition: observer.h:148
bool remove_observer(TObserver &observer)
Definition: observer.h:169
void clear_observers()
Clear all observers from the list.
Definition: observer.h:222
void enable_observer(TObserver &observer, bool state=true)
Definition: observer.h:192
size_type number_of_observers() const
Returns the number of observers.
Definition: observer.h:230
Definition: observer.h:100
Definition: observer.h:321
Definition: observer.h:69
Definition: observer.h:83
iterator begin()
Definition: vector.h:100
void push_back(const_reference value)
Definition: vector.h:432
void clear()
Clears the vector.
Definition: vector.h:414
iterator end()
Definition: vector.h:118
bool full() const
Definition: vector.h:977
size_type size() const
Definition: vector.h:959
iterator erase(iterator i_element)
Definition: vector.h:865
bitset_ext
Definition: absolute.h:38