Hi Brad,

Changes look good, now merged and submitted to svn/trunk.  I'll update
the .osga plugin to reflect the new implementation in Archive.

When merging the changes I had to fix the indentation of all the files
you submitted as you are indenting with 3 spaces rather than the 4
spaces that the OSG code base sticks to.  There is only a few cases
where other indentation is kept - these are 3rd party files that we've
integrated.  Have lots of differnt indentation styles results in
poorer readability so I much prefer to keep everything consistent, so
in future submissions could you stick to four space indentation?

Thanks,
Robert.

On Tue, May 17, 2011 at 6:54 PM, Anderegg, Bradley G
<[email protected]> wrote:
> Hi Robert,
>
> Ok, I am re-submitting this with the changes we discussed.  That is, there is 
> a default implementation of osgDB::Archive::getDirectoryContents() that uses 
> getFileNames(), and the osgDB::ArchiveExtended header was removed as it is 
> now unnecessary.
>
> Here is a quick list of the modified files:
>
> Archive - getDirectoryContents() no longer pure virtual
> Archive.cpp - default getDirectoryContents() implementation
> unzip.cpp - modified to fix a bug where the same file will not load twice in 
> a row
> ZipArchive.h / ZipArchive.cpp - extends osgDB::Archive and provides support 
> for random access loading within a .zip file
> ReaderWriterZip.cpp - modified to use the ZipArchive class
>
> Brad
>
>
>
> Senior Software Engineer
> Alion Science & Technology Corporation
> BMH Operation - A CMMI Maturity Level 3 Organization
> 5365 Robin Hood Road, Suite 100
> Norfolk, VA 23513
> Desk:  (757) 857-5670 x257
> Fax:  (757) 857-6781
> www.alionscience.com
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Robert 
> Osfield
> Sent: Thursday, May 05, 2011 5:24 AM
> To: OpenSceneGraph Submissions
> Subject: Re: [osg-submissions] Registry modifications
>
> Hi Brad,
>
> Keeping the getDirectoryContexts() virtual would allow both a default 
> implementation that uses getFileNames() and an local implementation that 
> overrides this when appropriate.
>
> Robert.
>
> On Wed, May 4, 2011 at 4:14 AM, Christiansen, Brad 
> <[email protected]> wrote:
>> Hi,
>>
>> I thought I should add my 2c on the issue as I have done some work in this 
>> area I hope to turn into a submission soon (if there is interest from the 
>> commuity).
>>
>> When working with large VPB data sets I found the current osga format did 
>> not scale very well to files 100+ gig in size. Just opening the archive 
>> could take many minutes as it read the full index. To overcome these issues 
>> I have implemented an SQL Lite implementation of the OSG archive interface 
>> (public domain simple SQL single file databse). This is working very well 
>> and is still very responsive with 5+ million individual entries and archive 
>> file sizes over 100 gig.
>>
>> Given the approach I have taken, it will be important to at least allow any 
>> getDirectoryContents implementaion to avoid calling getFileNames. For my 
>> implementation of getDirectoryContents I would write a specific SQL query. 
>> While I have implemented the getFileNames method I intent to avoid ever 
>> calling this if possible as with 5million + entries it is not very useful or 
>> performant.
>>
>> As a side note, I have been very happy with the performance and flexablility 
>> I have gained by using SQL Lite as the back end. It forfills the needs of an 
>> OSG archive very well and has enabled me to very easily extend the contents 
>> of the archive to include application specific non-OSG based data.
>>
>> Cheers,
>>
>> Brad
>>
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of
>> Robert Osfield
>> Sent: Saturday, 30 April 2011 12:54 AM
>> To: OpenSceneGraph Submissions
>> Subject: Re: [osg-submissions] Registry modifications
>>
>> Hi Bradley,
>>
>> Rather than dive in right away and merge you submission I thought I'd
>> prep the ground for it - first up added your suggested methods to
>> osgDB::Archive.   I have also implemented these methods in the osga
>> plugin, although as yet I have only compiled then and will need
>> obviously need to test them properly by adding extra checks to the
>> osgarchive example.  I have run out working week so will have to leave
>> this to others or for another day.
>>
>> I have now checked these changes into svn/trunk, could you please
>> update you submission to use the osgDB::Archive as your
>> ArchiveExtended is no longer required.   I would also like you to
>> review my implementation of OSGA_Archive::getDirectoryContents(..) as
>> I believe this is the type of functionality you intended, but I've
>> added handling of the possibility of different slashes being used in
>> the archive vs calling functions directory name.  The implementation
>> is below (also in svn/trunk's src/osgPlugins/osga).
>>
>> It occurred to me that would could probably implement the
>> getDirectoryContents() method directly in the base class if we change
>> this function to use the getFileNames() function to get all the
>> filenames from the underlying implementation.  This wouldn't be quite
>> as computationally efficient, but would avoid the potential for the
>> implementations to diverge in their interpretation of how they are
>> meant to work.  Another possible approproach would be to put a helper
>> method into base class to help with the identification of contenders
>> for a directory name match.
>>
>> Thoughts?
>> Robert.
>>
>> -- Implementation of OSGGA_Archive::getDirectoryContents(const
>> std::string&) const:
>>
>>
>> osgDB::DirectoryContents OSGA_Archive::getDirectoryContents(const
>> std::string& dirName) const
>> {
>>    osgDB::DirectoryContents files;
>>    if (dirName.empty() || dirName==".")
>>    {
>>        getFileNames(files);
>>        return files;
>>    }
>>
>>    bool dirNameHasTrailingSlash = false;
>>    char d = dirName[dirName.size()-1];
>>    if (d=='\\' || d=='/') dirNameHasTrailingSlash = true;
>>
>>    for(FileNamePositionMap::const_iterator itr=_indexMap.begin();
>>        itr!=_indexMap.end();
>>        ++itr)
>>    {
>>        const std::string& filename = itr->first;
>>        if (filename.size()>dirName.size())
>>        {
>>            // check for match of directory name while accounting for
>> potential
>>            // differences in types of slashes
>>            unsigned int i=0;
>>            for(; i<dirName.size(); ++i)
>>            {
>>                char f = filename[i];
>>                char d = dirName[i];
>>                if (f=='\\') f='/';
>>                if (d=='\\') d='/';
>>                if (f!=d) break;
>>            }
>>
>>            if (i==dirName.size())
>>            {
>>                bool directoryMatched = false;
>>                if (!dirNameHasTrailingSlash)
>>                {
>>                    // no trailing slash on dirName so we won't have
>> matched
>>                    // the required slash on filename to make sure the
>> next character is slash.
>>                    char f = filename[i];
>>
>>                    // check for slash
>>                    if (f=='\\' || f=='/')
>>                    {
>>                        // found slash, now need to skip over it.
>>                        ++i;
>>                        directoryMatched = true;
>>                    }
>>                }
>>                else
>>                {
>>                    directoryMatched = true;
>>                }
>>
>>                if (directoryMatched)
>>                {
>>                    files.push_back(filename.substr(i));
>>                }
>>            }
>>        }
>>    }
>>    return files;
>> }
>> _______________________________________________
>> osg-submissions mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscene
>> graph.org
>>
>>
>>
>> DISCLAIMER:-----------------------------------------------------------
>> ---------------- This e-mail transmission and any documents, files and
>> previous e-mail messages attached to it are private and confidential.
>> They may contain proprietary or copyright material or information that
>> is subject to legal professional privilege. They are for the use of
>> the intended recipient only.  Any unauthorised viewing, use,
>> disclosure, copying, alteration, storage or distribution of, or
>> reliance on, this message is strictly prohibited. No part may be
>> reproduced, adapted or transmitted without the written permission of
>> the owner. If you have received this transmission in error, or are not
>> an authorised recipient, please immediately notify the sender by
>> return email, delete this message and all copies from your e-mail
>> system, and destroy any printed copies. Receipt by anyone other than
>> the intended recipient should not be deemed a waiver of any privilege
>> or protection. Thales Australia does not warrant or represent that this 
>> e-mail or any documents, files and previous e-mail messages attached are 
>> error or virus free.
>> ----------------------------------------------------------------------
>> ----------------
>>
>> _______________________________________________
>> osg-submissions mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscene
>> graph.org
>>
> _______________________________________________
> 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
>
>
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to