| OLD | NEW | 
 | (Empty) | 
|   1 /* |  | 
|   2  * libjingle |  | 
|   3  * Copyright 2011 Google Inc. |  | 
|   4  * |  | 
|   5  * Redistribution and use in source and binary forms, with or without |  | 
|   6  * modification, are permitted provided that the following conditions are met: |  | 
|   7  * |  | 
|   8  *  1. Redistributions of source code must retain the above copyright notice, |  | 
|   9  *     this list of conditions and the following disclaimer. |  | 
|  10  *  2. Redistributions in binary form must reproduce the above copyright notice, |  | 
|  11  *     this list of conditions and the following disclaimer in the documentation |  | 
|  12  *     and/or other materials provided with the distribution. |  | 
|  13  *  3. The name of the author may not be used to endorse or promote products |  | 
|  14  *     derived from this software without specific prior written permission. |  | 
|  15  * |  | 
|  16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |  | 
|  17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |  | 
|  18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |  | 
|  19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |  | 
|  20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |  | 
|  21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |  | 
|  22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |  | 
|  23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |  | 
|  24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |  | 
|  25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | 
|  26  */ |  | 
|  27  |  | 
|  28 #ifndef TALK_APP_WEBRTC_NOTIFIER_H_ |  | 
|  29 #define TALK_APP_WEBRTC_NOTIFIER_H_ |  | 
|  30  |  | 
|  31 #include <list> |  | 
|  32  |  | 
|  33 #include "talk/app/webrtc/mediastreaminterface.h" |  | 
|  34 #include "webrtc/base/common.h" |  | 
|  35  |  | 
|  36 namespace webrtc { |  | 
|  37  |  | 
|  38 // Implement a template version of a notifier. |  | 
|  39 template <class T> |  | 
|  40 class Notifier : public T { |  | 
|  41  public: |  | 
|  42   Notifier() { |  | 
|  43   } |  | 
|  44  |  | 
|  45   virtual void RegisterObserver(ObserverInterface* observer) { |  | 
|  46     ASSERT(observer != NULL); |  | 
|  47     observers_.push_back(observer); |  | 
|  48   } |  | 
|  49  |  | 
|  50   virtual void UnregisterObserver(ObserverInterface* observer) { |  | 
|  51     for (std::list<ObserverInterface*>::iterator it = observers_.begin(); |  | 
|  52          it != observers_.end(); it++) { |  | 
|  53       if (*it == observer) { |  | 
|  54         observers_.erase(it); |  | 
|  55         break; |  | 
|  56       } |  | 
|  57     } |  | 
|  58   } |  | 
|  59  |  | 
|  60   void FireOnChanged() { |  | 
|  61     // Copy the list of observers to avoid a crash if the observer object |  | 
|  62     // unregisters as a result of the OnChanged() call. If the same list is used |  | 
|  63     // UnregisterObserver will affect the list make the iterator invalid. |  | 
|  64     std::list<ObserverInterface*> observers = observers_; |  | 
|  65     for (std::list<ObserverInterface*>::iterator it = observers.begin(); |  | 
|  66          it != observers.end(); ++it) { |  | 
|  67       (*it)->OnChanged(); |  | 
|  68     } |  | 
|  69   } |  | 
|  70  |  | 
|  71  protected: |  | 
|  72   std::list<ObserverInterface*> observers_; |  | 
|  73 }; |  | 
|  74  |  | 
|  75 }  // namespace webrtc |  | 
|  76  |  | 
|  77 #endif  // TALK_APP_WEBRTC_NOTIFIER_H_ |  | 
| OLD | NEW |