liblcf
Loading...
Searching...
No Matches
lmt_rect.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/lmt/reader.h"
11#include "lcf/lmt/chunks.h"
12#include "reader_struct.h"
13
14namespace lcf {
15
16template <>
17struct RawStruct<rpg::Rect> {
18 static void ReadLcf(rpg::Rect& ref, LcfReader& stream, uint32_t length);
19 static void WriteLcf(const rpg::Rect& ref, LcfWriter& stream);
20 static int LcfSize(const rpg::Rect& ref, LcfWriter& stream);
21 static void WriteXml(const rpg::Rect& ref, XmlWriter& stream);
22 static void BeginXml(rpg::Rect& ref, XmlReader& stream);
23};
24
28void RawStruct<rpg::Rect>::ReadLcf(rpg::Rect& ref, LcfReader& stream, uint32_t length) {
29 assert(length == 16);
30 (void)length;
31 stream.Read(ref.l);
32 stream.Read(ref.t);
33 stream.Read(ref.r);
34 stream.Read(ref.b);
35}
36
37void RawStruct<rpg::Rect>::WriteLcf(const rpg::Rect& ref, LcfWriter& stream) {
38 stream.Write(ref.l);
39 stream.Write(ref.t);
40 stream.Write(ref.r);
41 stream.Write(ref.b);
42}
43
44int RawStruct<rpg::Rect>::LcfSize(const rpg::Rect& /* ref */, LcfWriter& /* stream */) {
45 return 4 * 4;
46}
47
48void RawStruct<rpg::Rect>::WriteXml(const rpg::Rect& ref, XmlWriter& stream) {
49 stream.BeginElement("Rect");
50 stream.WriteNode<int32_t>("l", ref.l);
51 stream.WriteNode<int32_t>("t", ref.t);
52 stream.WriteNode<int32_t>("r", ref.r);
53 stream.WriteNode<int32_t>("b", ref.b);
54 stream.EndElement("Rect");
55}
56
57class RectXmlHandler : public XmlHandler {
58private:
59 rpg::Rect& ref;
60 uint32_t* field;
61public:
62 RectXmlHandler(rpg::Rect& ref) : ref(ref), field(NULL) {}
63 void StartElement(XmlReader& stream, const char* name, const char** /* atts */) {
64 if (strcmp(name, "l") == 0)
65 field = &ref.l;
66 else if (strcmp(name, "t") == 0)
67 field = &ref.t;
68 else if (strcmp(name, "r") == 0)
69 field = &ref.r;
70 else if (strcmp(name, "b") == 0)
71 field = &ref.b;
72 else {
73 stream.Error("Unrecognized field '%s'", name);
74 field = NULL;
75 }
76 }
77 void EndElement(XmlReader& /* stream */, const char* /* name */) {
78 field = NULL;
79 }
80 void CharacterData(XmlReader& /* stream */, const std::string& data) {
81 if (field != NULL)
82 XmlReader::Read(*field, data);
83 }
84};
85
86void RawStruct<rpg::Rect>::BeginXml(rpg::Rect& ref, XmlReader& stream) {
87 stream.SetHandler(new WrapperXmlHandler("Rect", new RectXmlHandler(ref)));
88}
89
90} //namespace lcf
rpg::Rect & ref
Definition lmt_rect.cpp:59
void CharacterData(XmlReader &, const std::string &data)
Definition lmt_rect.cpp:80
void StartElement(XmlReader &stream, const char *name, const char **)
Definition lmt_rect.cpp:63
RectXmlHandler(rpg::Rect &ref)
Definition lmt_rect.cpp:62
void EndElement(XmlReader &, const char *)
Definition lmt_rect.cpp:77
const char *const Struct< rpg::Actor >::name
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)