ACF $AcfVersion:0$
TCachedUpdateManagerWrap.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5#include <istd/IChangeable.h>
6
7
8namespace istd
9{
10
11
15template <class Base>
16class TCachedUpdateManagerWrap: virtual public Base
17{
18public:
19 typedef Base BaseClass;
20
22
23 // reimplemented (istd::IChangeable)
24 virtual void BeginChanges(const IChangeable::ChangeSet& changeSet) override;
25 virtual void EndChanges(const IChangeable::ChangeSet& changeSet) override;
26
27protected:
32 bool EnsureCacheValid() const;
48 virtual bool CalculateCache(const IChangeable::ChangeSet& changeSet);
49
50private:
51 int m_changesCounter;
52 mutable bool m_isCacheValid;
53 mutable IChangeable::ChangeSet m_cumulatedSet;
54};
55
56
57// public inline methods
58
59// reimplemented (istd::IChangeable)
60
61template <class Base>
63{
64 Q_ASSERT(m_changesCounter >= 0);
65
66 InvalidateCache(changeSet);
67
68 BaseClass::BeginChanges(changeSet);
69
70 ++m_changesCounter;
71}
72
73
74template <class Base>
76{
77 --m_changesCounter;
78 Q_ASSERT(m_changesCounter >= 0);
79
80 BaseClass::EndChanges(changeSet);
81}
82
83
84// protected inline methods
85
86template <class Base>
88{
89 if (!m_isCacheValid && (m_changesCounter <= 0)){
90 m_isCacheValid = true; // set to avoid recursion
91
92 m_isCacheValid = const_cast<TCachedUpdateManagerWrap<Base>*>(this)->CalculateCache(m_cumulatedSet);
93
94 m_cumulatedSet.Reset();
95 }
96
97 return m_isCacheValid;
98}
99
100
101template <class Base>
103{
104 m_cumulatedSet += changeSet;
105
106 m_isCacheValid = false;
107}
108
109
110template <class Base>
112{
113 m_cumulatedSet.Reset();
114
115 m_isCacheValid = true;
116}
117
118
119template <class Base>
121{
122 return true;
123}
124
125
126// public methods
127
128template <class Base>
130: m_changesCounter(0),
131 m_isCacheValid(false)
132{
133}
134
135
136} // namespace istd
137
138
139
140
Set of change flags (its IDs).
Definition IChangeable.h:36
void Reset()
Remove all IDs.
Help wrapper class supporting of cached parts.
virtual void BeginChanges(const IChangeable::ChangeSet &changeSet) override
virtual bool CalculateCache(const IChangeable::ChangeSet &changeSet)
Calculate cache.
void InvalidateCache(const IChangeable::ChangeSet &changeSet)
Make cache invalid.
void SetCacheValid()
Say that cache is valid.
virtual void EndChanges(const IChangeable::ChangeSet &changeSet) override
bool EnsureCacheValid() const
Ensures cache is valid.
Standard library.
Definition IComponent.h:17