WoW Model Viewer
Your premiere tool for viewing, equipping and animating World of Warcraft models.
Loading...
Searching...
No Matches
DBDFile.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <fstream>
5#include <string>
6#include <vector>
7
8namespace core
9{
10 // Represents a build version: major.minor.patch.build
11 struct DBDBuild
12 {
13 int major = 0;
14 int minor = 0;
15 int patch = 0;
16 int build = 0;
17
18 static DBDBuild fromString(const std::string& s);
19
20 bool operator<(const DBDBuild& o) const;
21 bool operator<=(const DBDBuild& o) const;
22 bool operator==(const DBDBuild& o) const;
23 bool operator>=(const DBDBuild& o) const;
24 };
25
26 // Column definition from the COLUMNS section of a .dbd file
28 {
29 std::string type; // int, string, float, locstring
30 std::string name; // column name (may end with '?' for unverified)
31 std::string foreignDb; // foreign key DB (empty if none)
32 std::string foreignCol; // foreign key column (empty if none)
33 bool verified = true;
34 };
35
36 // A single field entry within a version definition
38 {
39 std::string name;
40 std::string sizeStr; // e.g. "32", "u8", "16", etc. (empty for strings/floats)
41 unsigned int arraySize = 1;
42 bool isID = false;
43 bool isRelation = false;
44 bool isNonInline = false;
45 std::string comment;
46 };
47
48 // A version definition block (one BUILD/LAYOUT section)
50 {
51 std::vector<std::string> layoutHashes;
52 std::vector<DBDBuild> builds; // exact builds
53 std::vector<std::pair<DBDBuild, DBDBuild>> buildRanges; // build ranges
54 std::string comment;
55 std::vector<DBDVersionField> fields;
56
57 bool matchesBuild(const DBDBuild& target) const;
58 bool matchesLayoutHash(const std::string& layoutHash) const;
59 };
60
62 class DBDFile
63 {
64 public:
65 bool parse(const std::string& filepath);
66 bool parse(std::istream& stream);
67
68 const std::string& tableName() const { return m_tableName; }
69 const std::vector<DBDColumnDef>& columns() const { return m_columns; }
70 const std::vector<DBDVersionDef>& versions() const { return m_versions; }
71
72 // Find the version definition that matches the given build.
73 // Returns nullptr if no match found.
74 const DBDVersionDef* findVersion(const DBDBuild& build) const;
75
76 // Find the version definition that matches the given build or layout hash.
77 // Layout hash is checked first, then build.
78 // Returns nullptr if no match found.
79 const DBDVersionDef* findVersion(const DBDBuild& build, const std::string& layoutHash) const;
80
81 // Find the column definition for a given field name.
82 // Returns nullptr if not found.
83 const DBDColumnDef* findColumn(const std::string& name) const;
84
85 private:
86 bool parseColumns(std::istream& stream, std::string& nextLine);
87 bool parseVersionDef(std::istream& stream, const std::string& firstLine, std::string& nextLine);
88
89 std::string m_tableName;
90 std::vector<DBDColumnDef> m_columns;
91 std::vector<DBDVersionDef> m_versions;
92 };
93}
Parsed content of a single .dbd file (database definition).
Definition DBDFile.h:63
const std::vector< DBDVersionDef > & versions() const
Definition DBDFile.h:70
std::vector< DBDVersionDef > m_versions
Definition DBDFile.h:91
std::vector< DBDColumnDef > m_columns
Definition DBDFile.h:90
bool parseVersionDef(std::istream &stream, const std::string &firstLine, std::string &nextLine)
Definition DBDFile.cpp:232
const std::vector< DBDColumnDef > & columns() const
Definition DBDFile.h:69
const std::string & tableName() const
Definition DBDFile.h:68
bool parse(const std::string &filepath)
Definition DBDFile.cpp:78
const DBDVersionDef * findVersion(const DBDBuild &build) const
Definition DBDFile.cpp:375
std::string m_tableName
Definition DBDFile.h:89
const DBDColumnDef * findColumn(const std::string &name) const
Definition DBDFile.cpp:401
bool parseColumns(std::istream &stream, std::string &nextLine)
Definition DBDFile.cpp:154
Common string utility functions (split, case-insensitive search, etc.).
Definition GameLoader.h:11
bool operator>=(const DBDBuild &o) const
Definition DBDFile.cpp:36
bool operator<=(const DBDBuild &o) const
Definition DBDFile.cpp:31
bool operator==(const DBDBuild &o) const
Definition DBDFile.cpp:32
bool operator<(const DBDBuild &o) const
Definition DBDFile.cpp:23
static DBDBuild fromString(const std::string &s)
Definition DBDFile.cpp:12
std::string foreignDb
Definition DBDFile.h:31
std::string type
Definition DBDFile.h:29
std::string foreignCol
Definition DBDFile.h:32
std::string name
Definition DBDFile.h:30
bool matchesLayoutHash(const std::string &layoutHash) const
Definition DBDFile.cpp:55
std::vector< DBDVersionField > fields
Definition DBDFile.h:55
bool matchesBuild(const DBDBuild &target) const
Definition DBDFile.cpp:40
std::vector< DBDBuild > builds
Definition DBDFile.h:52
std::string comment
Definition DBDFile.h:54
std::vector< std::string > layoutHashes
Definition DBDFile.h:51
std::vector< std::pair< DBDBuild, DBDBuild > > buildRanges
Definition DBDFile.h:53
std::string comment
Definition DBDFile.h:45
std::string name
Definition DBDFile.h:39
std::string sizeStr
Definition DBDFile.h:40
unsigned int arraySize
Definition DBDFile.h:41