16template<
typename T>
inline T clone(
const T& o) {
return o; }
18#define TT_SCOPE_DEFINE(d) for (bool c = true; c;) for (d; c; c = false)
19#define TT_EACH_OBSERVER(observee) TT_CONST_FOREACH(observer, (observee).getObservers()) (**observer)
20#define TT_EACH_OBSERVER_SAFE(observee) TT_SCOPE_DEFINE(auto observeeClone = clone((observee).getObservers())) TT_CONST_FOREACH(observer, observeeClone) (**observer)
23template<
class Observer>
class Observee
25 SimpleDynVecClass<Observer*> observers;
29 void addObserver(Observer& observer) { observers.Add(&observer); }
30 void removeObserver(Observer& observer) { observers.Delete(&observer); }
31 SimpleDynVecClass<Observer*>& getObservers() {
return observers; }
32 bool hasObservers()
const {
return !observers.isEmpty(); }