blob: a9b8030cc4ea19078e15c9495fd9822b0433da56 [file] [log] [blame]
// 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 "core/fxcrt/check.h"
#include "core/fxcrt/containers/contains.h"
namespace fxcrt {
Observable::Observable() = default;
Observable::~Observable() {
NotifyObservers();
}
void Observable::AddObserver(ObserverIface* pObserver) {
DCHECK(!pdfium::Contains(observers_, pObserver));
observers_.insert(pObserver);
}
void Observable::RemoveObserver(ObserverIface* pObserver) {
DCHECK(pdfium::Contains(observers_, pObserver));
observers_.erase(pObserver);
}
void Observable::NotifyObservers() {
for (auto* pObserver : observers_) {
pObserver->OnObservableDestroyed();
}
observers_.clear();
}
} // namespace fxcrt