evecache 0.42.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ #ifndef _EC_CONFIG_H_
2
+ #define _EC_CONFIG_H_
3
+
4
+ #ifdef WIN32
5
+
6
+ #if defined(EVECACHE_EXPORT) // inside DLL
7
+ # define EVECACHE_API __declspec(dllexport)
8
+ #else // outside DLL
9
+ # define EVECACHE_API __declspec(dllimport)
10
+ #endif
11
+ #else
12
+
13
+ #define EVECACHE_API
14
+
15
+ #endif
16
+
17
+
18
+
19
+ #endif
@@ -0,0 +1,64 @@
1
+ // libevecache - EVE Cache File Reader Library
2
+ // Copyright (C) 2009-2010 StackFoundry LLC and Yann Ramin
3
+ //
4
+ // This library is free software; you can redistribute it and/or
5
+ // modify it under the terms of the GNU General Public
6
+ // License as published by the Free Software Foundation; either
7
+ // version 2 of the License, or (at your option) any later version.
8
+ //
9
+ // This library is distributed in the hope that it will be useful,
10
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ // General Public License for more details.
13
+ //
14
+ // You should have received a copy of the GNU General Public
15
+ // License along with this library; if not, write to the Free Software
16
+ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ //
18
+ // http://dev.eve-central.com/libevecache/
19
+ // http://gitorious.org/libevecache
20
+
21
+
22
+ #ifndef _EC_DBTYPES_H_
23
+ #define _EC_DBTYPES_H_
24
+
25
+ #include <map>
26
+ #include <string>
27
+
28
+ namespace EveCache {
29
+
30
+ enum DbType {
31
+ Int64 = 20,
32
+ Time64 = 64,
33
+ Currency64 = 6,
34
+ Int32 = 3,
35
+ Int16 = 2,
36
+ Int8 = 17,
37
+ Double = 5,
38
+ Bool = 11,
39
+ String = 129,
40
+ String2 = 130,
41
+ };
42
+
43
+ unsigned long windows_to_unix_time(unsigned long long);
44
+
45
+ class ColumnLookup {
46
+ public:
47
+ static unsigned char lookupId(std::string& name);
48
+ static std::string lookupName(unsigned char e);
49
+
50
+ private:
51
+ ColumnLookup() {}
52
+ ColumnLookup(const ColumnLookup &rhs) {}
53
+ static bool isInit;
54
+ static void init();
55
+ static void insert(const char*, unsigned char id);
56
+ static std::map<std::string, unsigned char> _idLookup;
57
+ static std::map<unsigned char, std::string> _nameLookup; // fixme, just bad, no need for this
58
+ };
59
+
60
+
61
+ };
62
+
63
+
64
+ #endif
@@ -0,0 +1,47 @@
1
+ // libevecache - EVE Cache File Reader Library
2
+ // Copyright (C) 2009-2010 StackFoundry LLC and Yann Ramin
3
+ //
4
+ // This program is free software: you can redistribute it and/or modify
5
+ // it under the terms of the GNU General Public License as published by
6
+ // the Free Software Foundation, either version 3 of the License, or
7
+ // (at your option) any later version.
8
+ //
9
+ // This program is distributed in the hope that it will be useful,
10
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ // GNU General Public License for more details.
13
+ //
14
+ // You should have received a copy of the GNU General Public License
15
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ //
17
+ // http://dev.eve-central.com/libevecache/
18
+ // http://gitorious.org/libevecache
19
+
20
+ #ifndef _EC_EXCEPTIONS_H_
21
+ #define _EC_EXCEPTIONS_H_
22
+
23
+ #include <string>
24
+ #include "evecache/config.hpp"
25
+
26
+ namespace EveCache {
27
+
28
+ class EVECACHE_API EndOfFileException {
29
+ public:
30
+ EndOfFileException();
31
+ operator std::string () const;
32
+ };
33
+
34
+ class EVECACHE_API ParseException {
35
+ public:
36
+ ParseException(const std::string& msg);
37
+ ParseException(const char* m);
38
+ operator std::string () const;
39
+ private:
40
+ std::string message;
41
+ };
42
+
43
+
44
+ };
45
+
46
+
47
+ #endif
@@ -0,0 +1,166 @@
1
+ // libevecache - EVE Cache File Reader Library
2
+ // Copyright (C) 2009-2010 StackFoundry LLC and Yann Ramin
3
+ //
4
+ // This library is free software; you can redistribute it and/or
5
+ // modify it under the terms of the GNU General Public
6
+ // License as published by the Free Software Foundation; either
7
+ // version 2 of the License, or (at your option) any later version.
8
+ //
9
+ // This library is distributed in the hope that it will be useful,
10
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ // General Public License for more details.
13
+ //
14
+ // You should have received a copy of the GNU General Public
15
+ // License along with this library; if not, write to the Free Software
16
+ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ //
18
+ // http://dev.eve-central.com/libevecache/
19
+ // http://gitorious.org/libevecache
20
+
21
+
22
+ #ifndef _EC_MARKET_H_
23
+ #define _EC_MARKET_H_
24
+
25
+ #include "evecache/config.hpp"
26
+
27
+ #include <vector>
28
+ #include <string>
29
+
30
+ namespace EveCache {
31
+
32
+
33
+ class SNode;
34
+
35
+ /**
36
+ * Domain object for a market order
37
+ */
38
+ class EVECACHE_API MarketOrder {
39
+ public:
40
+
41
+ MarketOrder() : _price(0), _volRemaining(0), _range(0), _orderID(0), _volEntered(0), _minVolume(0), _bid(0), _issued(0),
42
+ _duration(0), _stationID(0), _regionID(0), _solarSystemID(0), _jumps(0), _type(0) {}
43
+
44
+ /**
45
+ * Utility
46
+ */
47
+
48
+ /**
49
+ * Return this item as a standard CSV file export line
50
+ */
51
+ std::string toCsv() const;
52
+
53
+ /**
54
+ * Data setters
55
+ */
56
+
57
+ void setPrice(unsigned long long v) { _price = v; }
58
+ void setVolRemaining(double v) { _volRemaining = v; }
59
+ void setRange(unsigned int v) { _range = v; }
60
+ void setOrderID(unsigned long long v) { _orderID = v; }
61
+ void setVolEntered(unsigned int v) { _volEntered = v; }
62
+ void setMinVolume(unsigned int v) { _minVolume = v; }
63
+ void setBid(bool b) { _bid = b; }
64
+ void setIssued(unsigned long long v) { _issued = v; }
65
+ void setDuration(unsigned int v) { _duration = v; }
66
+ void setStationID(unsigned int v) { _stationID = v; }
67
+ void setRegionID(unsigned int v) { _regionID = v; }
68
+ void setSolarSystemID(unsigned int v) { _solarSystemID = v; }
69
+ void setJumps(unsigned int v) { _jumps = v; }
70
+ void setType(unsigned int v) { _type = v; }
71
+
72
+ /**
73
+ * Data accessors
74
+ */
75
+ unsigned long long price() const { return _price; }
76
+ double volRemaining() const { return _volRemaining; }
77
+ unsigned int range() const { return _range; }
78
+ unsigned long long orderID() const { return _orderID; }
79
+ unsigned int volEntered() const { return _volEntered; }
80
+ unsigned int minVolume() const { return _minVolume; }
81
+ bool isBid() const { return _bid; }
82
+ unsigned long long issued() const { return _issued; }
83
+ unsigned int duration() const { return _duration; }
84
+ unsigned int stationID() const { return _stationID; }
85
+ unsigned int regionID() const { return _regionID; }
86
+ unsigned int solarSystemID() const { return _solarSystemID; }
87
+ unsigned int jumps() const { return _jumps; }
88
+ unsigned int type() const { return _type; }
89
+
90
+ private:
91
+ unsigned long long _price;
92
+ double _volRemaining;
93
+ unsigned int _range;
94
+ unsigned long long _orderID;
95
+ unsigned int _volEntered;
96
+ unsigned int _minVolume;
97
+ bool _bid;
98
+ unsigned long long _issued;
99
+ unsigned int _duration;
100
+ unsigned int _stationID;
101
+ unsigned int _solarSystemID;
102
+ unsigned int _regionID;
103
+ unsigned int _jumps;
104
+ unsigned int _type;
105
+ };
106
+
107
+
108
+ class EVECACHE_API MarketList {
109
+ public:
110
+ MarketList(int type, int region);
111
+ MarketList();
112
+ MarketList(const MarketList &rhs) {
113
+ _type = rhs._type;
114
+ _region = rhs._region;
115
+ _sellOrders = rhs._sellOrders;
116
+ _buyOrders = rhs._buyOrders;
117
+ _ts = rhs._ts;
118
+ }
119
+
120
+
121
+ void setType(int v) { _type = v; }
122
+ void setRegion(int r) { _region = r; }
123
+ void setTimestamp(unsigned long t) { _ts = t; }
124
+
125
+ int type() const { return _type; }
126
+ int region() const { return _region; }
127
+ unsigned long timestamp() const { return _ts; }
128
+
129
+ std::vector<MarketOrder> getSellOrders() const { return _sellOrders; }
130
+ std::vector<MarketOrder> getBuyOrders() const { return _buyOrders; }
131
+
132
+ void addOrder(MarketOrder& order);
133
+
134
+ private:
135
+ int _type;
136
+ int _region;
137
+ unsigned long _ts;
138
+ std::vector<MarketOrder> _sellOrders;
139
+ std::vector<MarketOrder> _buyOrders;
140
+ };
141
+
142
+
143
+ class EVECACHE_API MarketParser {
144
+ public:
145
+ MarketParser(const SNode *stream);
146
+ MarketParser(const char* fileName);
147
+ MarketParser(const std::string fileName);
148
+ ~MarketParser();
149
+ MarketList getList() const;
150
+ void parse();
151
+ bool valid() const;
152
+ private:
153
+ const SNode *_stream;
154
+ bool _valid;
155
+ void initWithFile(const std::string& fileName);
156
+ void parse(const SNode* nest);
157
+ void parseDbRow(const SNode* nest);
158
+ MarketList _list;
159
+
160
+ };
161
+
162
+
163
+ };
164
+
165
+
166
+ #endif
@@ -0,0 +1,316 @@
1
+ // libevecache - EVE Cache File Reader Library
2
+ // Copyright (C) 2009-2010 StackFoundry LLC and Yann Ramin
3
+ //
4
+ // This library is free software; you can redistribute it and/or
5
+ // modify it under the terms of the GNU General Public
6
+ // License as published by the Free Software Foundation; either
7
+ // version 2 of the License, or (at your option) any later version.
8
+ //
9
+ // This library is distributed in the hope that it will be useful,
10
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU
12
+ // General Public License for more details.
13
+ //
14
+ // You should have received a copy of the GNU General Public
15
+ // License along with this library; if not, write to the Free Software
16
+ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ //
18
+ // http://dev.eve-central.com/libevecache/
19
+ // http://gitorious.org/libevecache
20
+
21
+ #ifndef _EC_PARSER_H_
22
+ #define _EC_PARSER_H_
23
+
24
+ #include <vector>
25
+ #include <string>
26
+
27
+ #include "evecache/config.hpp"
28
+ #include "evecache/dbtypes.hpp"
29
+
30
+ namespace EveCache {
31
+
32
+ typedef enum {
33
+ EStreamStart = 0x7e,
34
+ ENone = 0x01, // Python None type
35
+ EString = 0x2, // Another type of string, also ids
36
+ ELongLong = 0x3, // 64 bit value?
37
+ EInteger = 0x04, // 4 byte, little endian?
38
+ EShort = 0x05, // 2 byte
39
+ EByte = 0x6, // i think
40
+ ENeg1Integer = 0x07, // int == -1
41
+ E0Integer = 0x08, // int == 0
42
+ E1Integer = 0x09, // int == 1
43
+ EReal = 0x0a, // floating point, 64 bits, assume matches machine double type
44
+ E0Real = 0x0b,
45
+ E0String = 0xe, // 0 length string
46
+ EString3 = 0xf, // really? another? single character string
47
+ EString4 = 0x10,
48
+ EMarker = 0x11, // A one byte identifier code
49
+ EUnicodeString = 0x12,
50
+ EIdent = 0x13, // an identifier string
51
+ ETuple = 0x14, // a tuple of N objects
52
+ ETuple2 = 0x15, // a tuple of N objects, variant 2
53
+ EDict = 0x16, // N objects, consisting of key object and value object
54
+ EObject = 0x17, // Object type ?
55
+ ESharedObj = 0x1b, // shared object reference
56
+ EChecksum = 0x1c,
57
+ EBoolTrue = 0x1f,
58
+ EBoolFalse = 0x20,
59
+ EObject22 = 0x22, // a database header field of some variety
60
+ EObject23 = 0x23, // another datatype containing ECompressedRows/DBRows
61
+ E0Tuple = 0x24, // a tuple of 0 objects
62
+ E1Tuple = 0x25, // a tuple of 1 objects
63
+ E0Tuple2 = 0x26,
64
+ E1Tuple2 = 0x27, // a tuple of 1 objects, variant 2
65
+ EEmptyString = 0x28, // empty
66
+ EUnicodeString2 = 0x29,
67
+ ECompressedRow = 0x2a, // the datatype from hell, a RLEish compressed row
68
+ ESubstream = 0x2b, // substream - len bytes followed by 0x7e
69
+ E2Tuple = 0x2c, // a tuple of 2 objects
70
+ EString2 = 0x2e, // stringtastic
71
+ ESizedInt = 0x2f, // when you can't decide ahead of time how long to make the integer...
72
+
73
+ } EStreamCode;
74
+
75
+
76
+ class CacheFile_Iterator;
77
+
78
+ /***********************************************************************/
79
+
80
+ class EVECACHE_API SNode {
81
+ public:
82
+ SNode(EStreamCode t);
83
+ SNode(const SNode&);
84
+ virtual ~SNode();
85
+ virtual std::string repl() const;
86
+ virtual EStreamCode type() const;
87
+ virtual void setType(EStreamCode t);
88
+ virtual void addMember(SNode* node);
89
+ virtual const std::vector<SNode*>& members() const;
90
+ virtual SNode* clone() const;
91
+ private:
92
+ EStreamCode _type;
93
+ protected:
94
+ std::vector<SNode*> _members;
95
+ };
96
+
97
+ /***********************************************************************/
98
+
99
+ class EVECACHE_API SStreamNode : public SNode {
100
+ public:
101
+ SStreamNode();
102
+ SStreamNode(EStreamCode t);
103
+ SStreamNode(const SStreamNode &rhs);
104
+ virtual ~SStreamNode() { }
105
+ virtual std::string repl() const;
106
+ virtual SStreamNode* clone() const;
107
+ protected:
108
+
109
+ };
110
+
111
+ /***********************************************************************/
112
+
113
+ class EVECACHE_API SDBHeader : public SNode {
114
+ public:
115
+ SDBHeader();
116
+ virtual std::string repl() const;
117
+ virtual SDBHeader* clone() const;
118
+ };
119
+
120
+
121
+ /***********************************************************************/
122
+
123
+ class EVECACHE_API STuple : public SNode {
124
+ public:
125
+ STuple(unsigned int len);
126
+ STuple(const STuple &rhs);
127
+ virtual ~STuple();
128
+ virtual unsigned int givenLength() const;
129
+ virtual void addMember(SNode* node);
130
+ virtual std::string repl() const;
131
+ virtual STuple* clone() const;
132
+ protected:
133
+ unsigned int _givenLength;
134
+ };
135
+
136
+ /***********************************************************************/
137
+
138
+ class EVECACHE_API SDict : public SNode {
139
+ public:
140
+ SDict(unsigned int len);
141
+ SDict(const SDict &);
142
+ virtual ~SDict();
143
+ virtual unsigned int givenLength() const;
144
+ virtual void addMember(SNode* node);
145
+ virtual std::string repl() const;
146
+ virtual SDict* clone() const;
147
+ virtual SNode* getByName(const std::string& target) const;
148
+ protected:
149
+ unsigned int _givenLength;
150
+ };
151
+
152
+
153
+ /***********************************************************************/
154
+
155
+ class EVECACHE_API SNone : public SNode {
156
+ public:
157
+ SNone();
158
+ virtual std::string repl() const;
159
+ virtual SNone* clone() const;
160
+ };
161
+
162
+
163
+ /***********************************************************************/
164
+
165
+ class EVECACHE_API SMarker : public SNode {
166
+ public:
167
+ SMarker(unsigned char id);
168
+ virtual unsigned char id() const;
169
+ virtual std::string string() const;
170
+ virtual std::string repl() const;
171
+ virtual SMarker* clone() const;
172
+ protected:
173
+ unsigned char _id;
174
+ };
175
+
176
+ /***********************************************************************/
177
+
178
+ class EVECACHE_API SIdent : public SNode {
179
+ public:
180
+ SIdent(const std::string& m);
181
+ virtual std::string name() const;
182
+ virtual std::string repl() const;
183
+ virtual SIdent* clone() const;
184
+ protected:
185
+ std::string _name;
186
+ };
187
+
188
+ /***********************************************************************/
189
+
190
+ class EVECACHE_API SString : public SNode {
191
+ public:
192
+ SString(const std::string& m);
193
+ virtual std::string string() const;
194
+ virtual std::string repl() const;
195
+ virtual SString* clone() const;
196
+ protected:
197
+ std::string _name;
198
+ };
199
+
200
+ /***********************************************************************/
201
+
202
+ class EVECACHE_API SInt : public SNode {
203
+ public:
204
+ SInt(int val);
205
+ virtual int value() const;
206
+ virtual std::string repl() const;
207
+ virtual SInt* clone() const;
208
+ private:
209
+ int _value;
210
+ };
211
+
212
+ /***********************************************************************/
213
+
214
+ class EVECACHE_API SReal : public SNode {
215
+ public:
216
+ SReal(double val);
217
+ virtual double value() const;
218
+ virtual std::string repl() const;
219
+ virtual SReal* clone() const;
220
+ private:
221
+ double _value;
222
+ };
223
+
224
+
225
+ /***********************************************************************/
226
+
227
+ class EVECACHE_API SLongLong : public SNode {
228
+ public:
229
+ SLongLong(long long val);
230
+ virtual long long value() const;
231
+ virtual std::string repl() const;
232
+ virtual SLongLong* clone() const;
233
+ private:
234
+ long long _value;
235
+ };
236
+
237
+ /***********************************************************************/
238
+
239
+ class EVECACHE_API SObject : public SNode {
240
+ public:
241
+ SObject();
242
+ virtual std::string name() const;
243
+ virtual std::string repl() const;
244
+ virtual SObject* clone() const;
245
+ private:
246
+ };
247
+
248
+
249
+ /***********************************************************************/
250
+
251
+ class EVECACHE_API SSubstream : public SNode {
252
+ public:
253
+ SSubstream(int len);
254
+ virtual std::string repl() const;
255
+ virtual SSubstream* clone() const;
256
+ private:
257
+ int _len;
258
+ };
259
+
260
+ /***********************************************************************/
261
+
262
+ class EVECACHE_API SDBRow : public SNode {
263
+ public:
264
+ SDBRow(int magic, const std::vector<unsigned char>& data);
265
+ bool isLast() const;
266
+ void setLast(bool l);
267
+ virtual std::string repl() const;
268
+ virtual SDBRow* clone() const;
269
+ private:
270
+ int _id;
271
+ bool _last;
272
+ std::vector<unsigned char> _data;
273
+ };
274
+
275
+ /***********************************************************************/
276
+
277
+ class EVECACHE_API SDBRecords : public SNode {
278
+ public:
279
+ SDBRecords();
280
+ virtual std::string repl() const;
281
+ virtual SDBRecords* clone() const;
282
+ };
283
+
284
+ /***********************************************************************/
285
+
286
+ class EVECACHE_API Parser {
287
+ public:
288
+ Parser(CacheFile_Iterator *iter);
289
+ ~Parser();
290
+ void parse();
291
+ std::vector<SNode*> streams() const;
292
+ protected:
293
+ SNode* parseone();
294
+ void parse(SNode* node, int limit);
295
+ SNode* getDBRow();
296
+ int getLen();
297
+ unsigned int shareInit();
298
+ void shareAdd(SNode* obj);
299
+ SNode* shareGet(unsigned int id);
300
+ void shareSkip();
301
+ private:
302
+ std::vector<SNode*> _streams;
303
+ CacheFile_Iterator *_iter;
304
+ unsigned int _sharecount; // number of shared obj
305
+ unsigned int _sharecursor; // current index into
306
+ SNode **_shareobj; // list of already discovered shareds
307
+ unsigned int *_sharemap; // list of slot mappings
308
+
309
+ };
310
+
311
+
312
+
313
+
314
+ };
315
+
316
+ #endif