Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_ASSET_CONTAINER_H__
00009 #define __SP_ASSET_CONTAINER_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013 #include "Base/spInputOutputFileSystem.hpp"
00014
00015 #include <list>
00016 #include <map>
00017
00018
00019 namespace sp
00020 {
00021 namespace io
00022 {
00023
00024
00026 class SP_EXPORT AssetContainer
00027 {
00028
00029 public:
00030
00031 AssetContainer();
00032 ~AssetContainer();
00033
00034
00035
00036 bool read(const io::stringc &AssetContainerFilename, const io::stringc &RootPath = "");
00037 bool write(const io::stringc &AssetContainerFilename, const io::stringc &RootPath = "");
00038
00039 void addFile(const io::stringc &AssetFilename);
00040 io::File* getFile(io::FileSystem &FileSys, const io::stringc &AssetFilename);
00041
00042 void setCipherKey(const io::stringc &Key);
00043
00044 void clear();
00045
00046
00047
00048 inline io::stringc getCipherKey() const
00049 {
00050 return CipherKey_;
00051 }
00052
00053 private:
00054
00055
00056
00057 static const u32 MAGIC_NUMBER;
00058 static const u16 VERSION_NUMBER;
00059
00060
00061
00062 #if defined(_MSC_VER)
00063 # pragma pack(push, packing)
00064 # pragma pack(1)
00065 # define SP_PACK_STRUCT
00066 #elif defined(__GNUC__)
00067 # define SP_PACK_STRUCT __attribute__((packed))
00068 #else
00069 # define SP_PACK_STRUCT
00070 #endif
00071
00072 struct SHeader
00073 {
00074 SHeader() :
00075 Magic (0),
00076 Version (0),
00077 AssetCount (0)
00078 {
00079 }
00080 ~SHeader()
00081 {
00082 }
00083
00084
00085 u32 Magic;
00086 u16 Version;
00087 u32 AssetCount;
00088 }
00089 SP_PACK_STRUCT;
00090
00091 #ifdef _MSC_VER
00092 # pragma pack(pop, packing)
00093 #endif
00094
00095 #undef SP_PACK_STRUCT
00096
00097 struct SAsset
00098 {
00099 SAsset() :
00100 Size (0),
00101 Offset (0),
00102 FileObj (0)
00103 {
00104 }
00105 ~SAsset()
00106 {
00107 }
00108
00109
00110 io::stringc Filename;
00111 u32 Size;
00112 u32 Offset;
00113 io::File* FileObj;
00114 };
00115
00116
00117
00118 SHeader Header_;
00119
00120 io::FileSystem FileSys_;
00121 io::File* AssetFile_;
00122
00123 io::stringc CipherKey_;
00124 io::stringc RootPath_;
00125
00126 std::list<SAsset> AssetsList_;
00127 std::map<std::string, SAsset*> AssetsMap_;
00128
00129 };
00130
00131
00132 }
00133
00134 }
00135
00136
00137 #endif
00138
00139
00140
00141