31 #ifndef ETL_OBSERVER_INCLUDED
32 #define ETL_OBSERVER_INCLUDED
74 observer_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
75 :
exception(reason_, file_name_, line_number_)
89 :
observer_exception(ETL_ERROR_TEXT(
"observer:full", ETL_FILE
"A"), file_name_, line_number_)
100 template <
typename TObserver, const
size_t MAX_OBSERVERS>
110 observer_item(TObserver& observer_)
111 : p_observer(&observer_)
116 TObserver* p_observer;
123 struct compare_observers
125 compare_observers(TObserver& observer_)
126 : p_observer(&observer_)
130 bool operator ()(
const observer_item& item)
const
132 return p_observer == item.p_observer;
135 TObserver* p_observer;
140 typedef size_t size_type;
153 typename Observer_List::iterator i_observer_item = find_observer(
observer);
156 if (i_observer_item == observer_list.
end())
174 typename Observer_List::iterator i_observer_item = find_observer(
observer);
177 if (i_observer_item != observer_list.
end())
180 observer_list.
erase(i_observer_item);
197 typename Observer_List::iterator i_observer_item = find_observer(
observer);
200 if (i_observer_item != observer_list.
end())
202 i_observer_item->enabled = state;
212 typename Observer_List::iterator i_observer_item = find_observer(
observer);
215 if (i_observer_item != observer_list.
end())
217 i_observer_item->enabled =
false;
226 observer_list.
clear();
234 return observer_list.
size();
242 template <
typename TNotification>
245 typename Observer_List::iterator i_observer_item = observer_list.
begin();
247 while (i_observer_item != observer_list.
end())
249 if (i_observer_item->enabled)
251 i_observer_item->p_observer->notification(n);
270 typename Observer_List::iterator find_observer(TObserver& observer_)
272 return etl::find_if(observer_list.
begin(), observer_list.
end(), compare_observers(observer_));
276 Observer_List observer_list;
279 #if ETL_CPP11_SUPPORTED && !defined(ETL_OBSERVER_FORCE_CPP03)
285 template <
typename T1,
typename... Types>
286 class observer :
public observer<T1>,
public observer<Types...>
290 using observer<T1>::notification;
291 using observer<Types...>::notification;
298 template <
typename T1>
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;
#define ETL_ASSERT(b, e)
Definition: error_handler.h:290
exception(string_type reason_, string_type file_, numeric_type line_)
Constructor.
Definition: exception.h:67
Definition: exception.h:47
void notify_observers(TNotification n)
Definition: observer.h:243
void disable_observer(TObserver &observer)
Disable an observer.
Definition: observer.h:209
void add_observer(TObserver &observer)
Definition: observer.h:150
bool remove_observer(TObserver &observer)
Definition: observer.h:171
void clear_observers()
Clear all observers from the list.
Definition: observer.h:224
void enable_observer(TObserver &observer, bool state=true)
Definition: observer.h:194
size_type number_of_observers() const
Returns the number of observers.
Definition: observer.h:232
Definition: observer.h:102
Definition: observer.h:321
Definition: observer.h:71
Definition: observer.h:85
iterator begin()
Definition: vector.h:108
void push_back(const_reference value)
Definition: vector.h:408
void clear()
Clears the vector.
Definition: vector.h:398
iterator end()
Definition: vector.h:126
bool full() const
Definition: vector.h:914
size_type size() const
Definition: vector.h:896
iterator erase(iterator i_element)
Definition: vector.h:820
Definition: absolute.h:37