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()13Observable::~Observable() { 14 NotifyObservers(); 15 } 16 AddObserver(ObserverIface * pObserver)17void Observable::AddObserver(ObserverIface* pObserver) { 18 ASSERT(!pdfium::Contains(m_Observers, pObserver)); 19 m_Observers.insert(pObserver); 20 } 21 RemoveObserver(ObserverIface * pObserver)22void Observable::RemoveObserver(ObserverIface* pObserver) { 23 ASSERT(pdfium::Contains(m_Observers, pObserver)); 24 m_Observers.erase(pObserver); 25 } 26 NotifyObservers()27void Observable::NotifyObservers() { 28 for (auto* pObserver : m_Observers) 29 pObserver->OnObservableDestroyed(); 30 m_Observers.clear(); 31 } 32 33 } // namespace fxcrt 34