| Index: core/fxcrt/cfx_observable.h
|
| diff --git a/core/fxcrt/cfx_observable.h b/core/fxcrt/cfx_observable.h
|
| index dc869b176695e5ebc531b988bd9360529c9eb6fd..8dc0907cae6f0323cb0cfe84f245f1f60e3e5630 100644
|
| --- a/core/fxcrt/cfx_observable.h
|
| +++ b/core/fxcrt/cfx_observable.h
|
| @@ -15,39 +15,42 @@ class CFX_Observable {
|
| public:
|
| class ObservedPtr {
|
| public:
|
| - ObservedPtr() : m_pObservedPtr(nullptr) {}
|
| - explicit ObservedPtr(T* pObservedPtr) : m_pObservedPtr(pObservedPtr) {
|
| - if (m_pObservedPtr)
|
| - m_pObservedPtr->AddObservedPtr(this);
|
| + ObservedPtr() : m_pObservable(nullptr) {}
|
| + explicit ObservedPtr(T* pObservable) : m_pObservable(pObservable) {
|
| + if (m_pObservable)
|
| + m_pObservable->AddObservedPtr(this);
|
| }
|
| - ObservedPtr(const ObservedPtr& that) = delete;
|
| + ObservedPtr(const ObservedPtr& that) : ObservedPtr(that.Get()) {}
|
| ~ObservedPtr() {
|
| - if (m_pObservedPtr)
|
| - m_pObservedPtr->RemoveObservedPtr(this);
|
| + if (m_pObservable)
|
| + m_pObservable->RemoveObservedPtr(this);
|
| }
|
| - void Reset(T* pObservedPtr = nullptr) {
|
| - if (m_pObservedPtr)
|
| - m_pObservedPtr->RemoveObservedPtr(this);
|
| - m_pObservedPtr = pObservedPtr;
|
| - if (m_pObservedPtr)
|
| - m_pObservedPtr->AddObservedPtr(this);
|
| + void Reset(T* pObservable = nullptr) {
|
| + if (m_pObservable)
|
| + m_pObservable->RemoveObservedPtr(this);
|
| + m_pObservable = pObservable;
|
| + if (m_pObservable)
|
| + m_pObservable->AddObservedPtr(this);
|
| }
|
| void OnDestroy() {
|
| - ASSERT(m_pObservedPtr);
|
| - m_pObservedPtr = nullptr;
|
| + ASSERT(m_pObservable);
|
| + m_pObservable = nullptr;
|
| + }
|
| + ObservedPtr& operator=(const ObservedPtr& that) {
|
| + Reset(that.Get());
|
| + return *this;
|
| }
|
| - ObservedPtr& operator=(const ObservedPtr& that) = delete;
|
| bool operator==(const ObservedPtr& that) const {
|
| - return m_pObservedPtr == that.m_pObservedPtr;
|
| + return m_pObservable == that.m_pObservable;
|
| }
|
| bool operator!=(const ObservedPtr& that) const { return !(*this == that); }
|
| - explicit operator bool() const { return !!m_pObservedPtr; }
|
| - T* Get() const { return m_pObservedPtr; }
|
| - T& operator*() const { return *m_pObservedPtr; }
|
| - T* operator->() const { return m_pObservedPtr; }
|
| + explicit operator bool() const { return !!m_pObservable; }
|
| + T* Get() const { return m_pObservable; }
|
| + T& operator*() const { return *m_pObservable; }
|
| + T* operator->() const { return m_pObservable; }
|
|
|
| private:
|
| - T* m_pObservedPtr;
|
| + T* m_pObservable;
|
| };
|
|
|
| CFX_Observable() {}
|
|
|