Hi Ralf, I don't think an extra method getContextHash() would be required. I'd just implement an == operator in Options and then clone the Options object that is passed into addEntryToObjectCache.
Robert. On 2 June 2016 at 11:17, Ralf Habacker <[email protected]> wrote: > Am 31.05.2016 um 17:42 schrieb Robert Osfield: >> Hi Ralf, >> >> I have just done a first pass review and understand the motivation >> behind the change but feel that it's not general purpose enough to be >> robust, so while an improvement on the current approach it doesn't >> full address the possibility of different Options object mapping to >> different loaded models. >> >> I think the right approach would be to use the filename string and >> Options object as a key rather than just attempting to reuse the >> filename to encode extra information > So you suggest to change addEntryToObjectCache() to > > void addEntryToObjectCache(const std::string& filename, osg::Object* > object, double timestamp = 0.0, Options *options = NULL); > > and to implement as > > void ObjectCache::addEntryToObjectCache(const std::string& filename, > osg::Object* object, double timestamp, Options *options) > { > OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_objectCacheMutex); > if (options) > { > std::string key = filename + options->getContentHash(); > _objectCache[key]=ObjectTimeStampPair(object,timestamp); > } > else > _objectCache[filename]=ObjectTimeStampPair(object,timestamp); > } > > where Options::getContentHash() is a method to get a unique hash for the > content of the Options instance (may be the string representation of the > Options instance address) ? > > and for searching to extend getRefFromObjectCache() to > > osg::ref_ptr<osg::Object> getRefFromObjectCache(const std::string& > fileName, const Options *options = NULL); > > with an optional options parameter and to implement it as > > > osg::ref_ptr<osg::Object> ObjectCache::getRefFromObjectCache(const > std::string& fileName, const Options *options) > { > OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_objectCacheMutex); > ObjectCacheMap::iterator itr; > if (options) > itr = _objectCache.find(fileName + options.getContentHash()); > else > itr = _objectCache.find(fileName); > if (itr!=_objectCache.end()) > { > // OSG_NOTICE<<"Found "<<fileName<<" in ObjectCache > "<<this<<std::endl; > return itr->second.first; > } > else return 0; > } > > Ralf > > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
