root/trunk/contrib/extractor/dbcfile.cpp @ 247

Revision 2, 1.4 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1#define _CRT_SECURE_NO_DEPRECATE
2
3#include "dbcfile.h"
4#include "mpq_libmpq.h"
5
6DBCFile::DBCFile(const std::string &filename):
7    filename(filename),
8    data(0)
9{
10
11}
12void DBCFile::open()
13{
14    MPQFile f(filename.c_str());
15    char header[4];
16    unsigned int na,nb,es,ss;
17
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
24
25    recordSize = es;
26    recordCount = na;
27    fieldCount = nb;
28    stringSize = ss;
29    assert(fieldCount*4 == recordSize);
30
31    data = new unsigned char[recordSize*recordCount+stringSize];
32    stringTable = data + recordSize*recordCount;
33    f.read(data,recordSize*recordCount+stringSize);
34    f.close();
35}
36DBCFile::~DBCFile()
37{
38    delete [] data;
39}
40
41DBCFile::Record DBCFile::getRecord(size_t id)
42{
43    assert(data);
44    return Record(*this, data + id*recordSize);
45}
46
47size_t DBCFile::getMaxId()
48{
49    assert(data);
50
51    size_t maxId = 0;
52    for(size_t i = 0; i < getRecordCount(); ++i)
53    {
54        if(maxId < getRecord(i).getUInt(0))
55            maxId = getRecord(i).getUInt(0);
56    }
57    return maxId;
58}
59
60DBCFile::Iterator DBCFile::begin()
61{
62    assert(data);
63    return Iterator(*this, data);
64}
65DBCFile::Iterator DBCFile::end()
66{
67    assert(data);
68    return Iterator(*this, stringTable);
69}
Note: See TracBrowser for help on using the browser.