// 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