liblcf
ldb_parameters.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of liblcf. Copyright (c) liblcf authors.
3  * https://github.com/EasyRPG/liblcf - https://easyrpg.org
4  *
5  * liblcf is Free/Libre Open Source Software, released under the MIT License.
6  * For the full copyright and license information, please view the COPYING
7  * file that was distributed with this source code.
8  */
9 
10 #include "lcf/ldb/reader.h"
11 #include "lcf/ldb/chunks.h"
12 #include "reader_struct.h"
13 
14 namespace lcf {
15 
16 template <>
17 struct RawStruct<rpg::Parameters> {
18  static void ReadLcf(rpg::Parameters& ref, LcfReader& stream, uint32_t length);
19  static void WriteLcf(const rpg::Parameters& ref, LcfWriter& stream);
20  static int LcfSize(const rpg::Parameters& ref, LcfWriter& stream);
21  static void WriteXml(const rpg::Parameters& ref, XmlWriter& stream);
22  static void BeginXml(rpg::Parameters& ref, XmlReader& stream);
23 };
24 
28 void RawStruct<rpg::Parameters>::ReadLcf(rpg::Parameters& ref, LcfReader& stream, uint32_t length) {
29  int n = length / 6;
30  stream.Read(ref.maxhp, n);
31  stream.Read(ref.maxsp, n);
32  stream.Read(ref.attack, n);
33  stream.Read(ref.defense, n);
34  stream.Read(ref.spirit, n);
35  stream.Read(ref.agility, n);
36 }
37 
38 void RawStruct<rpg::Parameters>::WriteLcf(const rpg::Parameters& ref, LcfWriter& stream) {
39  stream.Write(ref.maxhp);
40  stream.Write(ref.maxsp);
41  stream.Write(ref.attack);
42  stream.Write(ref.defense);
43  stream.Write(ref.spirit);
44  stream.Write(ref.agility);
45 }
46 
47 int RawStruct<rpg::Parameters>::LcfSize(const rpg::Parameters& ref, LcfWriter& /* stream */) {
48  return ref.maxhp.size() * 2 * 6;
49 }
50 
51 void RawStruct<rpg::Parameters>::WriteXml(const rpg::Parameters& ref, XmlWriter& stream) {
52  stream.BeginElement("Parameters");
53  stream.WriteNode<std::vector<int16_t> >("maxhp", ref.maxhp);
54  stream.WriteNode<std::vector<int16_t> >("maxsp", ref.maxsp);
55  stream.WriteNode<std::vector<int16_t> >("attack", ref.attack);
56  stream.WriteNode<std::vector<int16_t> >("defense", ref.defense);
57  stream.WriteNode<std::vector<int16_t> >("spirit", ref.spirit);
58  stream.WriteNode<std::vector<int16_t> >("agility", ref.agility);
59  stream.EndElement("Parameters");
60 }
61 
62 class ParametersXmlHandler : public XmlHandler {
63 private:
64  rpg::Parameters& ref;
65  std::vector<int16_t>* field;
66 public:
67  ParametersXmlHandler(rpg::Parameters& ref) : ref(ref), field(NULL) {}
68  void StartElement(XmlReader& stream, const char* name, const char** /* atts */) {
69  if (strcmp(name, "maxhp") == 0)
70  field = &ref.maxhp;
71  else if (strcmp(name, "maxsp") == 0)
72  field = &ref.maxsp;
73  else if (strcmp(name, "attack") == 0)
74  field = &ref.attack;
75  else if (strcmp(name, "defense") == 0)
76  field = &ref.defense;
77  else if (strcmp(name, "spirit") == 0)
78  field = &ref.spirit;
79  else if (strcmp(name, "agility") == 0)
80  field = &ref.agility;
81  else {
82  stream.Error("Unrecognized field '%s'", name);
83  field = NULL;
84  }
85  }
86  void EndElement(XmlReader& /* stream */, const char* /* name */) {
87  field = NULL;
88  }
89  void CharacterData(XmlReader& /* stream */, const std::string& data) {
90  if (field != NULL)
91  XmlReader::Read<std::vector<int16_t> >(*field, data);
92  }
93 };
94 
95 void RawStruct<rpg::Parameters>::BeginXml(rpg::Parameters& ref, XmlReader& stream) {
96  stream.SetHandler(new WrapperXmlHandler("Parameters", new ParametersXmlHandler(ref)));
97 }
98 
99 } //namespace lcf
void StartElement(XmlReader &stream, const char *name, const char **)
void CharacterData(XmlReader &, const std::string &data)
void EndElement(XmlReader &, const char *)
ParametersXmlHandler(rpg::Parameters &ref)
std::vector< int16_t > * field
Definition: dbarray.cpp:13
static void WriteXml(const T &ref, XmlWriter &stream)
static void BeginXml(T &ref, XmlReader &stream)
static void ReadLcf(T &ref, LcfReader &stream, uint32_t length)
static void WriteLcf(const T &ref, LcfWriter &stream)
static int LcfSize(const T &ref, LcfWriter &stream)