35 lines
831 B
C++
35 lines
831 B
C++
// Copyright 2019 The PDFium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "core/fxcrt/observed_ptr.h"
|
|
|
|
#include "third_party/base/check.h"
|
|
#include "third_party/base/containers/contains.h"
|
|
|
|
namespace fxcrt {
|
|
|
|
Observable::Observable() = default;
|
|
|
|
Observable::~Observable() {
|
|
NotifyObservers();
|
|
}
|
|
|
|
void Observable::AddObserver(ObserverIface* pObserver) {
|
|
DCHECK(!pdfium::Contains(m_Observers, pObserver));
|
|
m_Observers.insert(pObserver);
|
|
}
|
|
|
|
void Observable::RemoveObserver(ObserverIface* pObserver) {
|
|
DCHECK(pdfium::Contains(m_Observers, pObserver));
|
|
m_Observers.erase(pObserver);
|
|
}
|
|
|
|
void Observable::NotifyObservers() {
|
|
for (auto* pObserver : m_Observers)
|
|
pObserver->OnObservableDestroyed();
|
|
m_Observers.clear();
|
|
}
|
|
|
|
} // namespace fxcrt
|