@ -1,5 +1,5 @@
# include "bsaarchive.hpp"
# include <components/bsa/compressedbsafile.hpp>
# include <memory>
namespace VFS
@ -7,15 +7,7 @@ namespace VFS
BsaArchive : : BsaArchive ( const std : : string & filename )
{
Bsa : : BsaVersion bsaVersion = Bsa : : CompressedBSAFile : : detectVersion ( filename ) ;
if ( bsaVersion = = Bsa : : BSAVER_COMPRESSED ) {
mFile = std : : make_unique < Bsa : : CompressedBSAFile > ( Bsa : : CompressedBSAFile ( ) ) ;
}
else {
mFile = std : : make_unique < Bsa : : BSAFile > ( Bsa : : BSAFile ( ) ) ;
}
mFile = std : : make_unique < Bsa : : BSAFile > ( Bsa : : BSAFile ( ) ) ;
mFile - > open ( filename ) ;
const Bsa : : BSAFile : : FileList & filelist = mFile - > getList ( ) ;
@ -25,6 +17,10 @@ BsaArchive::BsaArchive(const std::string &filename)
}
}
BsaArchive : : BsaArchive ( )
{
}
BsaArchive : : ~ BsaArchive ( ) {
}
@ -56,6 +52,31 @@ std::string BsaArchive::getDescription() const
return std : : string { " BSA: " } + mFile - > getFilename ( ) ;
}
CompressedBsaArchive : : CompressedBsaArchive ( const std : : string & filename )
: BsaArchive ( )
{
mFile = std : : make_unique < Bsa : : BSAFile > ( Bsa : : CompressedBSAFile ( ) ) ;
mFile - > open ( filename ) ;
const Bsa : : BSAFile : : FileList & filelist = mFile - > getList ( ) ;
for ( Bsa : : BSAFile : : FileList : : const_iterator it = filelist . begin ( ) ; it ! = filelist . end ( ) ; + + it )
{
mResources . emplace_back ( & * it , mFile . get ( ) ) ;
mCompressedResources . emplace_back ( & * it , static_cast < Bsa : : CompressedBSAFile * > ( mFile . get ( ) ) ) ;
}
}
void CompressedBsaArchive : : listResources ( std : : map < std : : string , File * > & out , char ( * normalize_function ) ( char ) )
{
for ( std : : vector < CompressedBsaArchiveFile > : : iterator it = mCompressedResources . begin ( ) ; it ! = mCompressedResources . end ( ) ; + + it )
{
std : : string ent = it - > mInfo - > name ( ) ;
std : : transform ( ent . begin ( ) , ent . end ( ) , ent . begin ( ) , normalize_function ) ;
out [ ent ] = & * it ;
}
}
// ------------------------------------------------------------------------------
BsaArchiveFile : : BsaArchiveFile ( const Bsa : : BSAFile : : FileStruct * info , Bsa : : BSAFile * bsa )
@ -70,4 +91,16 @@ Files::IStreamPtr BsaArchiveFile::open()
return mFile - > getFile ( mInfo ) ;
}
CompressedBsaArchiveFile : : CompressedBsaArchiveFile ( const Bsa : : BSAFile : : FileStruct * info , Bsa : : CompressedBSAFile * bsa )
: BsaArchiveFile ( info , bsa )
, mCompressedFile ( bsa )
{
}
Files : : IStreamPtr CompressedBsaArchiveFile : : open ( )
{
return mCompressedFile - > getFile ( mInfo ) ;
}
}