Skip to content

Commit

Permalink
Move StoredArchive[Text]File classes to separate files.
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Aug 31, 2017
1 parent 42ad416 commit d47ba92
Show file tree
Hide file tree
Showing 7 changed files with 137 additions and 107 deletions.
86 changes: 0 additions & 86 deletions libs/archivelib.h
Expand Up @@ -81,92 +81,6 @@ class BinaryToTextInputStream : public TextInputStream
}
};

/// \brief An ArchiveFile which is stored uncompressed as part of a larger archive file.
class StoredArchiveFile :
public ArchiveFile
{
std::string m_name;
FileInputStream m_filestream;
SubFileInputStream m_substream;
FileInputStream::size_type m_size;
public:
typedef FileInputStream::size_type size_type;
typedef FileInputStream::position_type position_type;

StoredArchiveFile(const std::string& name,
const std::string& archiveName,
position_type position,
size_type stream_size,
size_type file_size)
: m_name(name),
m_filestream(archiveName),
m_substream(m_filestream, position, stream_size),
m_size(file_size)
{}

size_type size() const {
return m_size;
}

const std::string& getName() const {
return m_name;
}

InputStream& getInputStream() {
return m_substream;
}
};

/// \brief An ArchiveTextFile which is stored uncompressed as part of a larger archive file.
class StoredArchiveTextFile :
public ArchiveTextFile
{
std::string m_name;
FileInputStream m_filestream;
SubFileInputStream m_substream;
BinaryToTextInputStream<SubFileInputStream> m_textStream;

// Mod directory
std::string _modDir;
public:
typedef FileInputStream::size_type size_type;
typedef FileInputStream::position_type position_type;

/**
* Constructor.
*
* @param modDir
* Name of the mod directory containing this file.
*/
StoredArchiveTextFile(const std::string& name,
const std::string& archiveName,
const std::string& modDir,
position_type position,
size_type stream_size)
: m_name(name),
m_filestream(archiveName),
m_substream(m_filestream, position, stream_size),
m_textStream(m_substream),
_modDir(game::current::getModPath(modDir))
{}

const std::string& getName() const {
return m_name;
}

TextInputStream& getInputStream() {
return m_textStream;
}

/**
* Return mod directory.
*/
std::string getModName() const {
return _modDir;
}
};
typedef std::shared_ptr<StoredArchiveTextFile> StoredArchiveTextFilePtr;

/// \brief An ArchiveFile which is stored as a single file on disk.
class DirectoryArchiveFile :
public ArchiveFile
Expand Down
21 changes: 10 additions & 11 deletions plugins/archivezip/DeflatedArchiveTextFile.h
Expand Up @@ -2,7 +2,6 @@

#include "iarchive.h"
#include "iregistry.h"
#include "gamelib.h"
#include "archivelib.h"

namespace archive
Expand All @@ -22,7 +21,7 @@ class DeflatedArchiveTextFile :
BinaryToTextInputStream<DeflatedInputStream> _textStream; // converts data from _zipstream

// Mod directory containing this file
const std::string _modDir;
const std::string _modName;

public:
typedef FileInputStream::size_type size_type;
Expand All @@ -36,15 +35,15 @@ class DeflatedArchiveTextFile :
*/
DeflatedArchiveTextFile(const std::string& name,
const std::string& archiveName, // full path to ZIP file
const std::string& modDir,
const std::string& modName,
position_type position,
size_type stream_size)
: _name(name),
_istream(archiveName),
_substream(_istream, position, stream_size),
_zipstream(_substream),
_textStream(_zipstream),
_modDir(game::current::getModPath(modDir))
size_type stream_size) :
_name(name),
_istream(archiveName),
_substream(_istream, position, stream_size),
_zipstream(_substream),
_textStream(_zipstream),
_modName(modName)
{}

TextInputStream& getInputStream() override
Expand All @@ -62,7 +61,7 @@ class DeflatedArchiveTextFile :
*/
std::string getModName() const override
{
return _modDir;
return _modName;
}
};

Expand Down
50 changes: 50 additions & 0 deletions plugins/archivezip/StoreArchiveFile.h
@@ -0,0 +1,50 @@
#pragma once

#include "iarchive.h"
#include "archivelib.h"

namespace archive
{

/// \brief An ArchiveFile which is stored uncompressed as part of a larger archive file.
class StoredArchiveFile :
public ArchiveFile
{
private:
std::string _name;
FileInputStream _filestream;
SubFileInputStream _substream; // provides a subset of _filestream
FileInputStream::size_type _size;

public:
typedef FileInputStream::size_type size_type;
typedef FileInputStream::position_type position_type;

StoredArchiveFile(const std::string& name,
const std::string& archiveName, // full path to the archive file
position_type position,
size_type stream_size,
size_type file_size) :
_name(name),
_filestream(archiveName),
_substream(_filestream, position, stream_size),
_size(file_size)
{}

size_type size() const override
{
return _size;
}

const std::string& getName() const override
{
return _name;
}

InputStream& getInputStream() override
{
return _substream;
}
};

}
62 changes: 62 additions & 0 deletions plugins/archivezip/StoredArchiveTextFile.h
@@ -0,0 +1,62 @@
#pragma once

#include "iarchive.h"
#include "archivelib.h"

namespace archive
{

/// \brief An ArchiveTextFile which is stored uncompressed as part of a larger archive file.
class StoredArchiveTextFile :
public ArchiveTextFile
{
private:
std::string _name;
FileInputStream _filestream;
SubFileInputStream _substream; // provides a subset of _filestream
BinaryToTextInputStream<SubFileInputStream> _textStream; // converts data from _substream

// Mod directory
std::string _modName;
public:
typedef FileInputStream::size_type size_type;
typedef FileInputStream::position_type position_type;

/**
* Constructor.
*
* @param modDir
* Name of the mod directory containing this file.
*/
StoredArchiveTextFile(const std::string& name,
const std::string& archiveName,
const std::string& modName,
position_type position,
size_type stream_size) :
_name(name),
_filestream(archiveName),
_substream(_filestream, position, stream_size),
_textStream(_substream),
_modName(modName)
{}

const std::string& getName() const override
{
return _name;
}

TextInputStream& getInputStream() override
{
return _textStream;
}

/**
* Return mod directory.
*/
std::string getModName() const override
{
return _modName;
}
};

}
17 changes: 7 additions & 10 deletions plugins/archivezip/ZipArchive.cpp
Expand Up @@ -4,6 +4,7 @@
#include "itextstream.h"
#include "iarchive.h"
#include "archivelib.h"
#include "gamelib.h"
#include <zlib.h>

#include "os/fs.h"
Expand All @@ -12,6 +13,8 @@
#include "ZipStreamUtils.h"
#include "DeflatedArchiveFile.h"
#include "DeflatedArchiveTextFile.h"
#include "StoreArchiveFile.h"
#include "StoredArchiveTextFile.h"

namespace archive
{
Expand Down Expand Up @@ -118,21 +121,15 @@ ArchiveTextFilePtr ZipArchive::openTextFile(const std::string& name)
}
}

std::string modDir = game::current::getModPath(_containingFolder);

switch (file->mode)
{
case ZipRecord::eStored:
return std::make_shared<StoredArchiveTextFile>(name,
_fullPath,
_containingFolder,
_istream.tell(),
file->stream_size);
return std::make_shared<StoredArchiveTextFile>(name, _fullPath, modDir, _istream.tell(), file->stream_size);

case ZipRecord::eDeflated:
return std::make_shared<DeflatedArchiveTextFile>(name,
_fullPath,
_containingFolder,
_istream.tell(),
file->stream_size);
return std::make_shared<DeflatedArchiveTextFile>(name, _fullPath, modDir, _istream.tell(), file->stream_size);
}
}

Expand Down
2 changes: 2 additions & 0 deletions tools/msvc/archivezip.vcxproj
Expand Up @@ -311,6 +311,8 @@
<ClInclude Include="..\..\plugins\archivezip\DeflatedArchiveTextFile.h" />
<ClInclude Include="..\..\plugins\archivezip\DeflatedInputStream.h" />
<ClInclude Include="..\..\plugins\archivezip\GenericFileSystem.h" />
<ClInclude Include="..\..\plugins\archivezip\StoreArchiveFile.h" />
<ClInclude Include="..\..\plugins\archivezip\StoredArchiveTextFile.h" />
<ClInclude Include="..\..\plugins\archivezip\ZipArchive.h" />
<ClInclude Include="..\..\plugins\archivezip\ZipStreamUtils.h" />
</ItemGroup>
Expand Down
6 changes: 6 additions & 0 deletions tools/msvc/archivezip.vcxproj.filters
Expand Up @@ -25,6 +25,12 @@
<ClInclude Include="..\..\plugins\archivezip\DeflatedInputStream.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\plugins\archivezip\StoreArchiveFile.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\plugins\archivezip\StoredArchiveTextFile.h">
<Filter>src</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\plugins\archivezip\plugin.cpp">
Expand Down

0 comments on commit d47ba92

Please sign in to comment.