AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
DBCFile Class Reference

#include "dbcfile.h"

Classes

class  Exception
 
class  Iterator
 
class  NotFound
 
class  Record
 

Public Member Functions

 DBCFile (std::string filename)
 
 ~DBCFile ()
 
bool open ()
 
Record getRecord (std::size_t id)
 
Iterator begin ()
 Get begin iterator over records.
 
Iterator end ()
 Get begin iterator over records.
 
std::size_t getRecordCount () const
 Trivial.
 
std::size_t getFieldCount () const
 
std::size_t getMaxId ()
 
 DBCFile (std::string filename)
 
 ~DBCFile ()
 
bool open ()
 
Record getRecord (std::size_t id)
 
Iterator begin ()
 Get begin iterator over records.
 
Iterator end ()
 Get begin iterator over records.
 
std::size_t getRecordCount () const
 Trivial.
 
std::size_t getFieldCount () const
 

Private Attributes

std::string filename
 
std::size_t recordSize
 
std::size_t recordCount
 
std::size_t fieldCount
 
std::size_t stringSize
 
unsigned char * data
 
unsigned char * stringTable
 

Detailed Description

Constructor & Destructor Documentation

◆ DBCFile() [1/2]

DBCFile::DBCFile ( std::string  filename)
24 :
25 filename(std::move(filename)), recordSize(0), recordCount(0), fieldCount(0), stringSize(0), data(nullptr), stringTable(nullptr)
26{
27}
std::size_t recordCount
Definition dbcfile.h:130
unsigned char * data
Definition dbcfile.h:133
std::size_t stringSize
Definition dbcfile.h:132
std::string filename
Definition dbcfile.h:128
std::size_t fieldCount
Definition dbcfile.h:131
std::size_t recordSize
Definition dbcfile.h:129
unsigned char * stringTable
Definition dbcfile.h:134

◆ ~DBCFile() [1/2]

DBCFile::~DBCFile ( )
67{
68 delete [] data;
69}

References data.

◆ DBCFile() [2/2]

DBCFile::DBCFile ( std::string  filename)

◆ ~DBCFile() [2/2]

DBCFile::~DBCFile ( )

Member Function Documentation

◆ begin() [1/2]

DBCFile::Iterator DBCFile::begin ( )

Get begin iterator over records.

91{
92 assert(data);
93 return Iterator(*this, data);
94}

References data.

◆ begin() [2/2]

Iterator DBCFile::begin ( )

Get begin iterator over records.

◆ end() [1/2]

DBCFile::Iterator DBCFile::end ( )

Get begin iterator over records.

96{
97 assert(data);
98 return Iterator(*this, stringTable);
99}

References data, and stringTable.

◆ end() [2/2]

Iterator DBCFile::end ( )

Get begin iterator over records.

◆ getFieldCount() [1/2]

std::size_t DBCFile::getFieldCount ( ) const
inline
125{ return fieldCount; }

References fieldCount.

◆ getFieldCount() [2/2]

std::size_t DBCFile::getFieldCount ( ) const
inline
143{ return fieldCount; }

References fieldCount.

◆ getMaxId()

std::size_t DBCFile::getMaxId ( )
78{
79 assert(data);
80
81 std::size_t maxId = 0;
82 for (std::size_t i = 0; i < getRecordCount(); ++i)
83 {
84 if (maxId < getRecord(i).getUInt(0))
85 maxId = getRecord(i).getUInt(0);
86 }
87 return maxId;
88}
unsigned int getUInt(std::size_t field) const
Definition dbcfile.h:60
Record getRecord(std::size_t id)
Definition dbcfile.cpp:71
std::size_t getRecordCount() const
Trivial.
Definition dbcfile.h:124

References data, getRecord(), getRecordCount(), and DBCFile::Record::getUInt().

◆ getRecord() [1/2]

DBCFile::Record DBCFile::getRecord ( std::size_t  id)
72{
73 assert(data);
74 return Record(*this, data + id * recordSize);
75}

References data, and recordSize.

Referenced by ExtractCameraFiles(), getMaxId(), main(), ReadLiquidTypeTableDBC(), and ReadMapDBC().

◆ getRecord() [2/2]

Record DBCFile::getRecord ( std::size_t  id)

◆ getRecordCount() [1/2]

std::size_t DBCFile::getRecordCount ( ) const
inline

Trivial.

124{ return recordCount;}

References recordCount.

Referenced by ExtractCameraFiles(), getMaxId(), main(), ReadLiquidTypeTableDBC(), and ReadMapDBC().

◆ getRecordCount() [2/2]

std::size_t DBCFile::getRecordCount ( ) const
inline

Trivial.

142{ return recordCount;}

References recordCount.

◆ open() [1/2]

bool DBCFile::open ( )
30{
31 MPQFile f(filename.c_str());
32 char header[4];
33 unsigned int na, nb, es, ss;
34
35 if (f.read(header, 4) != 4) // Number of records
36 return false;
37
38 if (header[0] != 'W' || header[1] != 'D' || header[2] != 'B' || header[3] != 'C')
39 return false;
40
41 if (f.read(&na, 4) != 4) // Number of records
42 return false;
43 if (f.read(&nb, 4) != 4) // Number of fields
44 return false;
45 if (f.read(&es, 4) != 4) // Size of a record
46 return false;
47 if (f.read(&ss, 4) != 4) // String size
48 return false;
49
50 recordSize = es;
51 recordCount = na;
52 fieldCount = nb;
53 stringSize = ss;
54 if (fieldCount * 4 != recordSize)
55 return false;
56
57 data = new unsigned char[recordSize * recordCount + stringSize];
59
60 std::size_t data_size = recordSize * recordCount + stringSize;
61 if (f.read(data, data_size) != data_size)
62 return false;
63 f.close();
64 return true;
65}
Definition mpq_libmpq04.h:74

References MPQFile::close(), data, fieldCount, filename, MPQFile::read(), recordCount, recordSize, stringSize, and stringTable.

Referenced by ExtractCameraFiles(), ExtractGameobjectModels(), main(), ReadLiquidTypeTableDBC(), and ReadMapDBC().

◆ open() [2/2]

bool DBCFile::open ( )

Member Data Documentation

◆ data

unsigned char * DBCFile::data
private

◆ fieldCount

◆ filename

std::string DBCFile::filename
private

Referenced by open().

◆ recordCount

std::size_t DBCFile::recordCount
private

Referenced by getRecordCount(), and open().

◆ recordSize

std::size_t DBCFile::recordSize
private

◆ stringSize

std::size_t DBCFile::stringSize
private

Referenced by DBCFile::Record::getString(), and open().

◆ stringTable

unsigned char * DBCFile::stringTable
private

The documentation for this class was generated from the following files: