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

Reply via email to