diff options
Diffstat (limited to 'base/observer_list.h')
-rw-r--r-- | base/observer_list.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/base/observer_list.h b/base/observer_list.h index d30cc6e..22b9ed2 100644 --- a/base/observer_list.h +++ b/base/observer_list.h @@ -203,14 +203,20 @@ class ObserverList : public ObserverListBase<ObserverType> { DCHECK_EQ(ObserverListBase<ObserverType>::size(), 0U); } } + + bool might_have_observers() const { + return ObserverListBase<ObserverType>::size() != 0; + } }; -#define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \ - do { \ - ObserverListBase<ObserverType>::Iterator it(observer_list); \ - ObserverType* obs; \ - while ((obs = it.GetNext()) != NULL) \ - obs->func; \ +#define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \ + do { \ + if ((observer_list).might_have_observers()) { \ + ObserverListBase<ObserverType>::Iterator it(observer_list); \ + ObserverType* obs; \ + while ((obs = it.GetNext()) != NULL) \ + obs->func; \ + } \ } while (0) #endif // BASE_OBSERVER_LIST_H__ |