The AvgOptDataCache object contains all the AvgOptData objects for the add-in instance. This includes (i) new objects, waiting to be calculated, (ii) objects currently being calculated by a worker thread and (iii) objects whose calculation are complete.
The cache uses an STL std::set to map the objects against their inputs. Thus when the add-in function is called it can build a new AvgOptData object and compare it with those already in the cache; if it is matched, then the existing object can be used, and there is no need to create a new one.
Only three methods are provided by the class:
Function | Description |
---|---|
Find(AvgOptData* t) | If an object in the cache has the same inputs as *t then a pointer to the existing object is returned. If no match is found, then zero is returned. |
Add(AvgOptData* t) | The object is added to the cache. |
Clear() | All objects are removed from the cache. |
class AvgOptDataCache { protected: typedef std::set<AvgOptData*, AvgOptData_less> set_t; set_t m_set; public: AvgOptData* Find(AvgOptData* t) { set_t::iterator itF = m_set.find(t); return itF == m_set.end() ? 0 : *itF; } void Add(AvgOptData* t) { ASSERT(t != 0); m_set.insert(t); } void Clear() { for (set_t::iterator it = m_set.begin(); it != m_set.end(); it++) delete *it; m_set.clear(); } };
This helper class acts as the predicate for a set containing the AvgOptData pointers. A set normally compares two contained objects using "x < y"; however since our set contains pointers, we need to compare "*x < *y". The AvgOptData_less class implements this behavior.