Fixed RuntimeLibrary setting in VC80/framework.vcproj
[getmangos.git] / contrib / extractor / dbcfile.cpp
blobacfb35482ff0e95cac9f47dd575c84c4979568a7
1 #define _CRT_SECURE_NO_DEPRECATE
3 #include "dbcfile.h"
4 #include "mpq_libmpq.h"
6 DBCFile::DBCFile(const std::string &filename):
7 filename(filename),
8 data(0)
12 void DBCFile::open()
14 MPQFile f(filename.c_str());
15 char header[4];
16 unsigned int na,nb,es,ss;
18 f.read(header,4); // Number of records
19 assert(header[0]=='W' && header[1]=='D' && header[2]=='B' && header[3] == 'C');
20 f.read(&na,4); // Number of records
21 f.read(&nb,4); // Number of fields
22 f.read(&es,4); // Size of a record
23 f.read(&ss,4); // String size
25 recordSize = es;
26 recordCount = na;
27 fieldCount = nb;
28 stringSize = ss;
29 assert(fieldCount*4 == recordSize);
31 data = new unsigned char[recordSize*recordCount+stringSize];
32 stringTable = data + recordSize*recordCount;
33 f.read(data,recordSize*recordCount+stringSize);
34 f.close();
36 DBCFile::~DBCFile()
38 delete [] data;
41 DBCFile::Record DBCFile::getRecord(size_t id)
43 assert(data);
44 return Record(*this, data + id*recordSize);
47 size_t DBCFile::getMaxId()
49 assert(data);
51 size_t maxId = 0;
52 for(size_t i = 0; i < getRecordCount(); ++i)
54 if(maxId < getRecord(i).getUInt(0))
55 maxId = getRecord(i).getUInt(0);
57 return maxId;
60 DBCFile::Iterator DBCFile::begin()
62 assert(data);
63 return Iterator(*this, data);
65 DBCFile::Iterator DBCFile::end()
67 assert(data);
68 return Iterator(*this, stringTable);