xref: /aosp_15_r20/external/pdfium/core/fxcrt/observed_ptr.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2019 The PDFium Authors
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/check.h"
8 #include "third_party/base/containers/contains.h"
9 
10 namespace fxcrt {
11 
12 Observable::Observable() = default;
13 
~Observable()14 Observable::~Observable() {
15   NotifyObservers();
16 }
17 
AddObserver(ObserverIface * pObserver)18 void Observable::AddObserver(ObserverIface* pObserver) {
19   DCHECK(!pdfium::Contains(m_Observers, pObserver));
20   m_Observers.insert(pObserver);
21 }
22 
RemoveObserver(ObserverIface * pObserver)23 void Observable::RemoveObserver(ObserverIface* pObserver) {
24   DCHECK(pdfium::Contains(m_Observers, pObserver));
25   m_Observers.erase(pObserver);
26 }
27 
NotifyObservers()28 void Observable::NotifyObservers() {
29   for (auto* pObserver : m_Observers)
30     pObserver->OnObservableDestroyed();
31   m_Observers.clear();
32 }
33 
34 }  // namespace fxcrt
35