Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
dbcfile.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef DBCFILE_H
7#define DBCFILE_H
8#include <cassert>
9#include <string>
10#include "StormLib.h"
11
13{
14 public:
15 DBCFile(HANDLE file);
16 ~DBCFile();
17
18 // Open database. It must be openened before it can be used.
19 virtual bool open();
20
21 // Database exceptions
23 {
24 public:
25 Exception(const std::string &message) : message(message) { }
26 virtual ~Exception() { }
27 const std::string &getMessage() { return message; }
28 private:
29 std::string message;
30 };
31
32 class NotFound: public Exception
33 {
34 public:
35 NotFound(): Exception("Key was not found") { }
36 };
37
38 // Iteration over database
39 class Iterator;
40 class Record
41 {
42 public:
43 float getFloat(size_t field) const
44 {
45 assert(field < file._fieldCount);
46 return *reinterpret_cast<float*>(offset + field * 4);
47 }
48
49 unsigned int getUInt(size_t field) const
50 {
51 assert(field < file._fieldCount);
52 return *reinterpret_cast<unsigned int*>(offset + field * 4);
53 }
54
55 int getInt(size_t field) const
56 {
57 assert(field < file._fieldCount);
58 return *reinterpret_cast<int*>(offset + field * 4);
59 }
60
61 char const* getString(size_t field) const
62 {
63 assert(field < file._fieldCount);
64 size_t stringOffset = getUInt(field);
65 assert(stringOffset < file._stringSize);
66 return reinterpret_cast<char*>(file._stringTable + stringOffset);
67 }
68
69 private:
70 Record(DBCFile& file, unsigned char* offset): file(file), offset(offset) {}
72 unsigned char* offset;
73
74 friend class DBCFile;
75 friend class DBCFile::Iterator;
76
77 Record& operator=(Record const& right);
78 };
79
82 {
83 public:
84 Iterator(DBCFile &file, unsigned char* offset) : record(file, offset) { }
85
88 {
89 record.offset += record.file._recordSize;
90 return *this;
91 }
92
94 Record const& operator*() const { return record; }
95 Record const* operator->() const { return &record; }
96
98 bool operator==(Iterator const& b) const
99 {
100 return record.offset == b.record.offset;
101 }
102
103 bool operator!=(Iterator const& b) const
104 {
105 return record.offset != b.record.offset;
106 }
107
108 private:
110
112 };
113
114 // Get record by id
115 Record getRecord(size_t id);
117 Iterator begin();
119 Iterator end();
121 size_t getRecordCount() const { return _recordCount; }
122 size_t getFieldCount() const { return _fieldCount; }
123 size_t getMaxId();
124
125 protected:
126 HANDLE _file;
131 unsigned char* _data;
132 unsigned char* _stringTable;
133};
134
135#endif
Exception(const std::string &message)
Definition dbcfile.h:25
std::string message
Definition dbcfile.h:29
virtual ~Exception()
Definition dbcfile.h:26
const std::string & getMessage()
Definition dbcfile.h:27
Record const * operator->() const
Definition dbcfile.h:95
Iterator & operator=(Iterator const &right)
bool operator!=(Iterator const &b) const
Definition dbcfile.h:103
Iterator(DBCFile &file, unsigned char *offset)
Definition dbcfile.h:84
bool operator==(Iterator const &b) const
Comparison.
Definition dbcfile.h:98
Record const & operator*() const
Return address of current instance.
Definition dbcfile.h:94
Iterator & operator++()
Advance (prefix only).
Definition dbcfile.h:87
Record(DBCFile &file, unsigned char *offset)
Definition dbcfile.h:70
char const * getString(size_t field) const
Definition dbcfile.h:61
friend class DBCFile
Definition dbcfile.h:74
float getFloat(size_t field) const
Definition dbcfile.h:43
unsigned int getUInt(size_t field) const
Definition dbcfile.h:49
int getInt(size_t field) const
Definition dbcfile.h:55
DBCFile & file
Definition dbcfile.h:71
unsigned char * offset
Definition dbcfile.h:72
Record & operator=(Record const &right)
size_t _stringSize
Definition dbcfile.h:130
Record getRecord(size_t id)
Definition dbcfile.cpp:68
~DBCFile()
Definition dbcfile.cpp:63
unsigned char * _stringTable
Definition dbcfile.h:132
unsigned char * _data
Definition dbcfile.h:131
Iterator end()
Get begin iterator over records.
Definition dbcfile.cpp:92
size_t getFieldCount() const
Definition dbcfile.h:122
size_t _recordSize
Definition dbcfile.h:127
size_t getMaxId()
Definition dbcfile.cpp:74
Iterator begin()
Get begin iterator over records.
Definition dbcfile.cpp:86
size_t _fieldCount
Definition dbcfile.h:129
size_t _recordCount
Definition dbcfile.h:128
virtual bool open()
Definition dbcfile.cpp:16
HANDLE _file
Definition dbcfile.h:126
size_t getRecordCount() const
Trivial.
Definition dbcfile.h:121
DBCFile(HANDLE file)
Definition dbcfile.cpp:10