1 // Copyright 2019 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "core/fxcrt/observed_ptr.h"
6 
7 #include "third_party/base/stl_util.h"
8 
9 namespace fxcrt {
10 
11 Observable::Observable() = default;
12 
~Observable()13 Observable::~Observable() {
14   NotifyObservers();
15 }
16 
AddObserver(ObserverIface * pObserver)17 void Observable::AddObserver(ObserverIface* pObserver) {
18   ASSERT(!pdfium::Contains(m_Observers, pObserver));
19   m_Observers.insert(pObserver);
20 }
21 
RemoveObserver(ObserverIface * pObserver)22 void Observable::RemoveObserver(ObserverIface* pObserver) {
23   ASSERT(pdfium::Contains(m_Observers, pObserver));
24   m_Observers.erase(pObserver);
25 }
26 
NotifyObservers()27 void Observable::NotifyObservers() {
28   for (auto* pObserver : m_Observers)
29     pObserver->OnObservableDestroyed();
30   m_Observers.clear();
31 }
32 
33 }  // namespace fxcrt
34