liblcf
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ldb_parameters.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 liblcf authors
3  * This file is released under the MIT License
4  * http://opensource.org/licenses/MIT
5  */
6 
7 #include "ldb_reader.h"
8 #include "ldb_chunks.h"
9 #include "reader_struct.h"
10 
11 template <>
12 struct RawStruct<RPG::Parameters> {
13  static void ReadLcf(RPG::Parameters& ref, LcfReader& stream, uint32_t length);
14  static void WriteLcf(const RPG::Parameters& ref, LcfWriter& stream);
15  static int LcfSize(const RPG::Parameters& ref, LcfWriter& stream);
16  static void WriteXml(const RPG::Parameters& ref, XmlWriter& stream);
17  static void BeginXml(RPG::Parameters& ref, XmlReader& stream);
18 };
19 
23 void RawStruct<RPG::Parameters>::ReadLcf(RPG::Parameters& ref, LcfReader& stream, uint32_t length) {
24  int n = length / 6;
25  stream.Read(ref.maxhp, n);
26  stream.Read(ref.maxsp, n);
27  stream.Read(ref.attack, n);
28  stream.Read(ref.defense, n);
29  stream.Read(ref.spirit, n);
30  stream.Read(ref.agility, n);
31 }
32 
34  stream.Write(ref.maxhp);
35  stream.Write(ref.maxsp);
36  stream.Write(ref.attack);
37  stream.Write(ref.defense);
38  stream.Write(ref.spirit);
39  stream.Write(ref.agility);
40 }
41 
43  return ref.maxhp.size() * 2 * 6;
44 }
45 
47  stream.BeginElement("Parameters");
48  stream.WriteNode<std::vector<int16_t> >("maxhp", ref.maxhp);
49  stream.WriteNode<std::vector<int16_t> >("maxsp", ref.maxsp);
50  stream.WriteNode<std::vector<int16_t> >("attack", ref.attack);
51  stream.WriteNode<std::vector<int16_t> >("defense", ref.defense);
52  stream.WriteNode<std::vector<int16_t> >("spirit", ref.spirit);
53  stream.WriteNode<std::vector<int16_t> >("agility", ref.agility);
54  stream.EndElement("Parameters");
55 }
56 
58 private:
60  std::vector<int16_t>* field;
61 public:
62  ParametersXmlHandler(RPG::Parameters& ref) : ref(ref), field(NULL) {}
63  void StartElement(XmlReader& stream, const char* name, const char** /* atts */) {
64  if (strcmp(name, "maxhp") == 0)
65  field = &ref.maxhp;
66  else if (strcmp(name, "maxsp") == 0)
67  field = &ref.maxsp;
68  else if (strcmp(name, "attack") == 0)
69  field = &ref.attack;
70  else if (strcmp(name, "defense") == 0)
71  field = &ref.defense;
72  else if (strcmp(name, "spirit") == 0)
73  field = &ref.spirit;
74  else if (strcmp(name, "agility") == 0)
75  field = &ref.agility;
76  else {
77  stream.Error("Unrecognized field '%s'", name);
78  field = NULL;
79  }
80  }
81  void EndElement(XmlReader& /* stream */, const char* /* name */) {
82  field = NULL;
83  }
84  void CharacterData(XmlReader& /* stream */, const std::string& data) {
85  if (field != NULL)
86  XmlReader::Read<std::vector<int16_t> >(*field, data);
87  }
88 };
89 
91  stream.SetHandler(new WrapperXmlHandler("Parameters", new ParametersXmlHandler(ref)));
92 }
RPG::Database data
Definition: data.cpp:11
void SetHandler(XmlHandler *handler)
Definition: reader_xml.cpp:92
void BeginElement(const std::string &name)
Definition: writer_xml.cpp:163
void EndElement(XmlReader &, const char *)
void Read(void *ptr, size_t size, size_t nmemb)
Definition: reader_lcf.cpp:52
std::vector< int16_t > attack
void EndElement(const std::string &name)
Definition: writer_xml.cpp:177
ParametersXmlHandler(RPG::Parameters &ref)
static void ReadLcf(T &ref, LcfReader &stream, uint32_t length)
void Error(const char *fmt,...)
Definition: reader_xml.cpp:71
void Write(const void *ptr, size_t size, size_t nmemb)
Definition: writer_lcf.cpp:33
std::vector< int16_t > spirit
std::vector< int16_t > * field
std::vector< int16_t > maxsp
std::vector< int16_t > agility
static void WriteLcf(const T &ref, LcfWriter &stream)
static int LcfSize(const T &ref, LcfWriter &stream)
std::vector< int16_t > maxhp
Definition: rpg_actor.h:23
static void BeginXml(T &ref, XmlReader &stream)
RPG::Parameters & ref
static void WriteXml(const T &ref, XmlWriter &stream)
void CharacterData(XmlReader &, const std::string &data)
void WriteNode(const std::string &name, const T &val)
Definition: writer_xml.cpp:157
std::vector< int16_t > defense
void StartElement(XmlReader &stream, const char *name, const char **)