38 if (m_pObject !=
nullptr)
39 ClearCacheSpecific(m_pObject);
45 static void ClearCacheAll()
47 CachedObjectHelpers::Lock();
48 for (
typename std::set<ObjectPointer*>::iterator p =
49 m_spObjectPointers.begin();
50 p != m_spObjectPointers.end();
52 (*p)->m_pCache =
nullptr;
53 (*p)->m_bCacheIsSet =
false;
55 CachedObjectHelpers::Unlock();
59 static void ClearCacheSpecific(
const T* pObject)
61 CachedObjectHelpers::Lock();
62 for (
typename std::set<ObjectPointer*>::iterator p =
63 m_spObjectPointers.begin();
64 p != m_spObjectPointers.end();
66 if ((*p)->m_pCache == pObject) {
67 (*p)->m_pCache =
nullptr;
68 (*p)->m_bCacheIsSet =
false;
71 CachedObjectHelpers::Unlock();
75 static void ClearCacheNegative()
77 CachedObjectHelpers::Lock();
78 for (
typename std::set<ObjectPointer*>::iterator p =
79 m_spObjectPointers.begin();
80 p != m_spObjectPointers.end();
82 if ((*p)->m_pCache ==
nullptr)
83 (*p)->m_bCacheIsSet =
false;
85 CachedObjectHelpers::Unlock();
92 static void Register(
ObjectPointer* p) { m_spObjectPointers.insert(p); }
96 typename std::set<ObjectPointer*>::iterator it =
97 m_spObjectPointers.find(p);
98 ASSERT(it != m_spObjectPointers.end());
99 m_spObjectPointers.erase(it);
109 static std::set<ObjectPointer*> m_spObjectPointers;
124 Object::Register(
this);
128 : m_pCache(cpy.m_pCache)
129 , m_bCacheIsSet(cpy.m_bCacheIsSet)
131 CachedObjectHelpers::Lock();
132 Object::Register(
this);
133 CachedObjectHelpers::Unlock();
138 auto Get(T** pRet)
const ->
bool
140 CachedObjectHelpers::Lock();
141 if (!m_bCacheIsSet) {
142 CachedObjectHelpers::Unlock();
146 CachedObjectHelpers::Unlock();
152 CachedObjectHelpers::Lock();
154 m_bCacheIsSet =
true;
156 p->m_CachedObject.m_pObject = p;
157 CachedObjectHelpers::Unlock();
162 CachedObjectHelpers::Lock();
164 m_bCacheIsSet =
false;
165 CachedObjectHelpers::Unlock();
172 bool m_bCacheIsSet{
false };