| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | 
							- #ifndef __CLODHANDLER_H__
 
- #define __CLODHANDLER_H__
 
- #include "../global.h"
 
- #include <vector>
 
- #include <string>
 
- #include <fstream>
 
- #include <set>
 
- #include <map>
 
- #include <boost/unordered_set.hpp>
 
- /*
 
-  * CLodhandler.h, part of VCMI engine
 
-  *
 
-  * Authors: listed in file AUTHORS in main folder
 
-  *
 
-  * License: GNU General Public License v2.0 or later
 
-  * Full text of license available in license.txt file, in main folder
 
-  *
 
-  */
 
- namespace boost
 
- {class mutex;}
 
- namespace NLoadHandlerHelp
 
- {
 
- 	const int dmHelp=0, dmNoExtractingMask=1;
 
- 	//std::string P1,P2,CurDir;
 
- 	const int fCHUNK = 50000;
 
- }
 
- struct LodEntry {
 
- 	char filename[16];
 
- 	ui32 offset;				/* little endian */
 
- 	ui32 uncompressedSize;	/* little endian */
 
- 	ui32 unused;				/* little endian */
 
- 	ui32 size;				/* little endian */
 
- };
 
- DLL_EXPORT int readNormalNr (const unsigned char * bufor, int pos, int bytCon = 4, bool cyclic = false);
 
- DLL_EXPORT char readChar(const unsigned char * bufor, int &i);
 
- DLL_EXPORT std::string readString(const unsigned char * bufor, int &i);
 
- enum LodFileType{
 
- 	FILE_ANY,
 
- 	FILE_TEXT,
 
- 	FILE_ANIMATION,
 
- 	FILE_MASK,
 
- 	FILE_CAMPAIGN,
 
- 	FILE_MAP,
 
- 	FILE_FONT,
 
- 	FILE_GRAPHICS,
 
- 	FILE_OTHER
 
- };
 
- struct Entry
 
- {
 
- 	// Info extracted from LOD file
 
- 	std::string name,
 
- 		    realName;//for external files - case\extension may not match 
 
- 	int offset, //from beginning
 
- 		realSize, //size without compression
 
- 		size;	//and with
 
- 	LodFileType type;// file type determined by extension
 
- 	bool operator == (const Entry & comp) const
 
- 	{
 
- 		return (type==comp.type || comp.type== FILE_ANY) && name==comp.name;
 
- 	}
 
- 	
 
- 	Entry(std::string con, LodFileType TYPE): name(con), type(TYPE){};
 
- 	Entry(std::string con): name(con){};
 
- 	Entry(){};
 
- };
 
- namespace boost
 
- {
 
- template<>
 
- struct hash<Entry> : public std::unary_function<Entry, std::size_t>
 
- {
 
- private:
 
- 	hash<std::string> stringHasher;
 
- public:
 
- 	std::size_t operator()(Entry const& en) const
 
- 	{
 
- 		//do NOT improve this hash function as we need same-name hash collisions for find to work properly
 
- 		return stringHasher(en.name);
 
- 	}
 
- };
 
- }
 
- class DLL_EXPORT CLodHandler
 
- {
 
- 	std::map<std::string, LodFileType> extMap;// to convert extensions to file type
 
- 	
 
- 	std::ifstream LOD;
 
- 	unsigned int totalFiles;
 
- 	boost::mutex *mutex;
 
- 	std::string myDir; //load files from this dir instead of .lod file
 
- 	void initEntry(Entry &e, const std::string name);
 
- 	int infs2(unsigned char * in, int size, int realSize, unsigned char*& out, int wBits=15); //zlib fast handler
 
- public:
 
- 	//convert string to upper case and remove extension. If extension!=NULL -> it will be copied here (including dot)
 
- 	void convertName(std::string &filename, std::string *extension=NULL);
 
- 	boost::unordered_set<Entry> entries;
 
- 	CLodHandler();
 
- 	~CLodHandler();
 
- 	void init(const std::string lodFile, const std::string dirName);
 
- 	std::string getFileName(std::string lodFile, LodFileType type=FILE_ANY);
 
- 	unsigned char * giveFile(std::string defName, LodFileType type=FILE_ANY, int * length=NULL); //returns pointer to the decompressed data - it must be deleted when no longer needed!
 
- 	bool haveFile(std::string name, LodFileType type=FILE_ANY);//check if file is present in lod
 
- 	std::string getTextFile(std::string name, LodFileType type=FILE_TEXT); //extracts one file
 
- 	void extractFile(const std::string FName, const std::string name); //extracts a specific file
 
- 	static unsigned char * getUnpackedFile(const std::string & path, int * sizeOut); //loads given file, decompresses and returns
 
- };
 
- #endif // __CLODHANDLER_H__
 
 
  |