1 #pragma once 2 3 #include <ctime> 4 #include <string> 5 #include <zlib.h> 6 7 #include "mapfile.hpp" 8 9 struct DictCache { 10 int chunk; 11 char *inBuffer; 12 int stamp; 13 int count; 14 }; 15 16 class DictData 17 { 18 public: 19 static const size_t DICT_CACHE_SIZE = 5; 20 DictData()21 DictData() {} ~DictData()22 ~DictData() { close(); } 23 bool open(const std::string &filename, int computeCRC); 24 void close(); 25 void read(char *buffer, unsigned long start, unsigned long size); 26 27 private: 28 const char *start; /* start of mmap'd area */ 29 const char *end; /* end of mmap'd area */ 30 unsigned long size; /* size of mmap */ 31 32 int type; 33 z_stream zStream; 34 int initialized; 35 36 int headerLength; 37 int method; 38 int flags; 39 time_t mtime; 40 int extraFlags; 41 int os; 42 int version; 43 int chunkLength; 44 int chunkCount; 45 int *chunks; 46 unsigned long *offsets; /* Sum-scan of chunks. */ 47 std::string origFilename; 48 std::string comment; 49 unsigned long crc; 50 unsigned long length; 51 unsigned long compressedLength; 52 DictCache cache[DICT_CACHE_SIZE]; 53 MapFile mapfile; 54 55 int read_header(const std::string &filename, int computeCRC); 56 }; 57