10 #ifndef smtk_geometry_Cache_h
11 #define smtk_geometry_Cache_h
13 #include "smtk/geometry/GeometryForBackend.h"
14 #include "smtk/geometry/Resource.h"
37 template<
typename BaseClass>
43 smtkSuperclassMacro(BaseClass);
46 using DataType =
typename BaseClass::DataType;
70 CacheEntry& operator=(
const CacheEntry&) =
default;
99 virtual void queryGeometry(
const smtk::resource::PersistentObject::Ptr&, CacheEntry& cache)
const
101 cache.m_generation = Invalid;
107 GenerationNumber
generationNumber(
const smtk::resource::PersistentObject::Ptr& obj)
const override
111 auto it = m_cache.find(obj->id());
112 bool found = it != m_cache.end();
113 if (found && it->second.m_geometry)
115 return it->second.m_generation;
120 if (!it->second.isValid())
126 return it->second.m_generation;
135 m_cache[obj->id()] = entry;
136 return entry.m_generation;
148 auto it = m_cache.find(obj->id());
149 bool found = it != m_cache.end();
150 if (found && it->second.m_geometry)
152 this->geometricBounds(it->second.m_geometry, bds);
158 if (it->second.isValid())
160 this->geometricBounds(it->second.m_geometry, bds);
174 m_cache[obj->id()] = entry;
175 this->geometricBounds(entry.m_geometry, bds);
181 bds[0] = bds[2] = bds[4] = 0.0;
182 bds[1] = bds[3] = bds[5] = -1.0;
186 DataType&
data(
const smtk::resource::PersistentObject::Ptr& obj)
const override
190 auto it = m_cache.find(obj->id());
191 bool found = it != m_cache.end();
192 if (found && it->second.m_geometry)
194 return it->second.m_geometry;
199 if (it->second.isValid())
201 return it->second.m_geometry;
214 m_cache[obj->id()] = entry;
215 return m_cache[obj->id()].m_geometry;
219 static DataType invalid;
238 auto rsrc = this->resource();
241 auto it = m_cache.begin();
242 for (
auto entry = it; entry != m_cache.end(); entry = it)
245 auto comp = rsrc->find(entry->first);
248 visitor(comp, entry->second.m_generation);
250 else if (entry->first == rsrc->id())
252 visitor(rsrc, entry->second.m_generation);
264 void markModified(
const smtk::resource::PersistentObject::Ptr& obj)
override
268 ++this->BaseClass::m_lastModified;
269 auto it = m_cache.find(obj->id());
270 if (it != m_cache.end())
273 it->second.m_geometry = blank;
278 m_cache[obj->id()] = invalid;
293 mutable std::map<smtk::common::UUID, CacheEntry> m_cache;
299 #endif // smtk_geometry_Cache_h