liblcf
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
lmt_rect.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 "lmt_reader.h"
8 #include "lmt_chunks.h"
9 #include "reader_struct.h"
10 
11 template <>
12 struct RawStruct<RPG::Rect> {
13  static void ReadLcf(RPG::Rect& ref, LcfReader& stream, uint32_t length);
14  static void WriteLcf(const RPG::Rect& ref, LcfWriter& stream);
15  static int LcfSize(const RPG::Rect& ref, LcfWriter& stream);
16  static void WriteXml(const RPG::Rect& ref, XmlWriter& stream);
17  static void BeginXml(RPG::Rect& ref, XmlReader& stream);
18 };
19 
23 void RawStruct<RPG::Rect>::ReadLcf(RPG::Rect& ref, LcfReader& stream, uint32_t length) {
24  assert(length == 16);
25  stream.Read(ref.l);
26  stream.Read(ref.t);
27  stream.Read(ref.r);
28  stream.Read(ref.b);
29 }
30 
32  stream.Write(ref.l);
33  stream.Write(ref.t);
34  stream.Write(ref.r);
35  stream.Write(ref.b);
36 }
37 
38 int RawStruct<RPG::Rect>::LcfSize(const RPG::Rect& /* ref */, LcfWriter& /* stream */) {
39  return 4 * 4;
40 }
41 
43  stream.BeginElement("Rect");
44  stream.WriteNode<int>("l", ref.l);
45  stream.WriteNode<int>("t", ref.t);
46  stream.WriteNode<int>("r", ref.r);
47  stream.WriteNode<int>("b", ref.b);
48  stream.EndElement("Rect");
49 }
50 
51 class RectXmlHandler : public XmlHandler {
52 private:
54  uint32_t* field;
55 public:
56  RectXmlHandler(RPG::Rect& ref) : ref(ref), field(NULL) {}
57  void StartElement(XmlReader& stream, const char* name, const char** /* atts */) {
58  if (strcmp(name, "l") == 0)
59  field = &ref.l;
60  else if (strcmp(name, "t") == 0)
61  field = &ref.t;
62  else if (strcmp(name, "r") == 0)
63  field = &ref.r;
64  else if (strcmp(name, "b") == 0)
65  field = &ref.b;
66  else {
67  stream.Error("Unrecognized field '%s'", name);
68  field = NULL;
69  }
70  }
71  void EndElement(XmlReader& /* stream */, const char* /* name */) {
72  field = NULL;
73  }
74  void CharacterData(XmlReader& /* stream */, const std::string& data) {
75  if (field != NULL)
76  XmlReader::Read(*field, data);
77  }
78 };
79 
81  stream.SetHandler(new WrapperXmlHandler("Rect", new RectXmlHandler(ref)));
82 }
void StartElement(XmlReader &stream, const char *name, const char **)
Definition: lmt_rect.cpp:57
RPG::Database data
Definition: data.cpp:11
void EndElement(XmlReader &, const char *)
Definition: lmt_rect.cpp:71
void SetHandler(XmlHandler *handler)
Definition: reader_xml.cpp:92
void BeginElement(const std::string &name)
Definition: writer_xml.cpp:163
RPG::Rect & ref
Definition: lmt_rect.cpp:53
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
RectXmlHandler(RPG::Rect &ref)
Definition: lmt_rect.cpp:56
void Write(const void *ptr, size_t size, size_t nmemb)
Definition: writer_lcf.cpp:33
static void WriteLcf(const T &ref, LcfWriter &stream)
static int LcfSize(const T &ref, LcfWriter &stream)
uint32_t b
Definition: rpg_rect.h:26
uint32_t r
Definition: rpg_rect.h:25
Definition: rpg_actor.h:23
static void BeginXml(T &ref, XmlReader &stream)
uint32_t t
Definition: rpg_rect.h:24
uint32_t * field
Definition: lmt_rect.cpp:54
uint32_t l
Definition: rpg_rect.h:23
void CharacterData(XmlReader &, const std::string &data)
Definition: lmt_rect.cpp:74
static void WriteXml(const T &ref, XmlWriter &stream)
void WriteNode(const std::string &name, const T &val)
Definition: writer_xml.cpp:157
static void Read(T &ref, const std::string &data)