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