[dasher] Event system fixes



commit ab3a544ddd1b6043d87bb23f2a377f398dd8ec02
Author: Patrick Welche <prlw1 cam ac uk>
Date:   Thu Feb 14 13:52:57 2013 +0000

    Event system fixes
    
    - initialise the event listener reference counter
    - speed up DispatchEvent for the (start-up) case of no listeners

 Src/DasherCore/Observable.h |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/Src/DasherCore/Observable.h b/Src/DasherCore/Observable.h
index d965d19..ad20e24 100644
--- a/Src/DasherCore/Observable.h
+++ b/Src/DasherCore/Observable.h
@@ -18,6 +18,7 @@ public:
 /// listeners.
 template <typename T> class Observable {
 public:
+  Observable();
   void Register(Observer<T> *pLstnr, bool bLast=false);
   void Unregister(Observer<T> *pLstnr);
 protected:
@@ -29,6 +30,11 @@ private:
   int m_iInHandler;
 };
 
+template <typename T> Observable<T>::Observable()
+{
+  m_iInHandler = 0;
+}
+
 ///Utility class for Observers which register with an Observable at construction
 /// and deregister at destruction. (I.e. which are strictly shorter-lived, than the
 /// Observable they listen to!)
@@ -68,6 +74,9 @@ template <typename T> void Observable<T>::Unregister(Observer<T> *pListener) {
 
 template <typename T> void Observable<T>::DispatchEvent(T evt) {
   
+  // Speed up start-up before any listeners are registered
+  if (m_vListeners.empty()) return;
+
   // We may end up here recursively, so keep track of how far down we
   // are, and only permit new handlers to be registered after all
   // messages are processed.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]