liblcf
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ldb_equipment.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::Equipment> {
13  static void ReadLcf(RPG::Equipment& ref, LcfReader& stream, uint32_t length);
14  static void WriteLcf(const RPG::Equipment& ref, LcfWriter& stream);
15  static int LcfSize(const RPG::Equipment& ref, LcfWriter& stream);
16  static void WriteXml(const RPG::Equipment& ref, XmlWriter& stream);
17  static void BeginXml(RPG::Equipment& ref, XmlReader& stream);
18 };
19 
23 void RawStruct<RPG::Equipment>::ReadLcf(RPG::Equipment& ref, LcfReader& stream, uint32_t /* length */) {
24  stream.Read(ref.weapon_id);
25  stream.Read(ref.shield_id);
26  stream.Read(ref.armor_id);
27  stream.Read(ref.helmet_id);
28  stream.Read(ref.accessory_id);
29 }
30 
32  stream.Write(ref.weapon_id);
33  stream.Write(ref.shield_id);
34  stream.Write(ref.armor_id);
35  stream.Write(ref.helmet_id);
36  stream.Write(ref.accessory_id);
37 }
38 
39 int RawStruct<RPG::Equipment>::LcfSize(const RPG::Equipment& /* ref */, LcfWriter& /* stream */) {
40  return 2 * 5;
41 }
42 
44  stream.BeginElement("Equipment");
45  stream.WriteNode<int16_t>("weapon_id", ref.weapon_id);
46  stream.WriteNode<int16_t>("shield_id", ref.shield_id);
47  stream.WriteNode<int16_t>("armor_id", ref.armor_id);
48  stream.WriteNode<int16_t>("helmet_id", ref.helmet_id);
49  stream.WriteNode<int16_t>("accessory_id", ref.accessory_id);
50  stream.EndElement("Equipment");
51 }
52 
54 private:
56  int16_t* field;
57 public:
58  EquipmentXmlHandler(RPG::Equipment& ref) : ref(ref), field(NULL) {}
59  void StartElement(XmlReader& stream, const char* name, const char** /* atts */) {
60  if (strcmp(name, "weapon_id") == 0)
61  field = &ref.weapon_id;
62  else if (strcmp(name, "shield_id") == 0)
63  field = &ref.shield_id;
64  else if (strcmp(name, "armor_id") == 0)
65  field = &ref.armor_id;
66  else if (strcmp(name, "helmet_id") == 0)
67  field = &ref.helmet_id;
68  else if (strcmp(name, "accessory_id") == 0)
69  field = &ref.accessory_id;
70  else {
71  stream.Error("Unrecognized field '%s'", name);
72  field = NULL;
73  }
74  }
75  void EndElement(XmlReader& /* stream */, const char* /* name */) {
76  field = NULL;
77  }
78  void CharacterData(XmlReader& /* stream*/, const std::string& data) {
79  if (field != NULL)
80  XmlReader::Read(*field, data);
81  }
82 };
83 
85  stream.SetHandler(new WrapperXmlHandler("Equipment", new EquipmentXmlHandler(ref)));
86 }
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 Read(void *ptr, size_t size, size_t nmemb)
Definition: reader_lcf.cpp:52
void EndElement(const std::string &name)
Definition: writer_xml.cpp:177
static void ReadLcf(T &ref, LcfReader &stream, uint32_t length)
void Error(const char *fmt,...)
Definition: reader_xml.cpp:71
int16_t weapon_id
Definition: rpg_equipment.h:23
void Write(const void *ptr, size_t size, size_t nmemb)
Definition: writer_lcf.cpp:33
int16_t armor_id
Definition: rpg_equipment.h:25
static void WriteLcf(const T &ref, LcfWriter &stream)
static int LcfSize(const T &ref, LcfWriter &stream)
EquipmentXmlHandler(RPG::Equipment &ref)
int16_t shield_id
Definition: rpg_equipment.h:24
Definition: rpg_actor.h:23
static void BeginXml(T &ref, XmlReader &stream)
int16_t helmet_id
Definition: rpg_equipment.h:26
int16_t accessory_id
Definition: rpg_equipment.h:27
void CharacterData(XmlReader &, const std::string &data)
static void WriteXml(const T &ref, XmlWriter &stream)
void WriteNode(const std::string &name, const T &val)
Definition: writer_xml.cpp:157
void EndElement(XmlReader &, const char *)
static void Read(T &ref, const std::string &data)
RPG::Equipment & ref
void StartElement(XmlReader &stream, const char *name, const char **)