1#include "Library/Yaml/MacroUtil.h"
2
3#include "Library/Base/StringUtil.h"
4#include "Library/Yaml/ByamlIter.h"
5#include "Library/Yaml/ByamlUtil.h"
6
7namespace alYamlMacroUtil {
8
9IUseYamlParam::IUseYamlParam(const char* name) : mName(name) {
10 YamlParamGroup::sCurrent->addParam(param: this);
11}
12
13bool IUseYamlParam::isEqualParamName(const char* name) const {
14 return al::isEqualString(str1: name, str2: mName);
15}
16
17template <typename T>
18void YamlParamGroup::setParamPtr(const char* name, T* value) {
19 IUseYamlParam* paramEntry = mHeadParam;
20 while (paramEntry) {
21 if (paramEntry->isEqualParamName(name)) {
22 switch (paramEntry->getClassId()) {
23 case YamlClassId::U8:
24 paramEntry->setPtr_u8(value);
25 break;
26 case YamlClassId::U16:
27 paramEntry->setPtr_u16(value);
28 break;
29 case YamlClassId::S16:
30 paramEntry->setPtr_s16(value);
31 break;
32 case YamlClassId::V2f:
33 paramEntry->setPtr_V2f(value);
34 break;
35 case YamlClassId::V3f:
36 paramEntry->setPtr_V3f(value);
37 break;
38 case YamlClassId::Color:
39 paramEntry->setPtr_YamlColor(value);
40 break;
41 case YamlClassId::S32:
42 paramEntry->setPtr_s32(value);
43 break;
44 case YamlClassId::F32:
45 paramEntry->setPtr_f32(value);
46 break;
47 case YamlClassId::Bool:
48 paramEntry->setPtr_bool(value);
49 break;
50 case YamlClassId::String:
51 paramEntry->setPtr_YamlString(value);
52 break;
53 default:
54 break;
55 }
56 }
57 paramEntry = paramEntry->getNext();
58 }
59}
60
61void YamlParamGroup::addParam(IUseYamlParam* param) {
62 if (!mHeadParam) {
63 mHeadParam = param;
64 mTailParam = param;
65 return;
66 }
67 mTailParam->setNext(param);
68 mTailParam = param;
69}
70
71void YamlParamGroup::readyToSetPtr() {
72 IUseYamlParam* paramEntry = mHeadParam;
73 while (paramEntry) {
74 paramEntry->clearPtr();
75 paramEntry = paramEntry->getNext();
76 }
77}
78
79void YamlParamGroup::readParam(const al::ByamlIter& iter) {
80 IUseYamlParam* paramEntry = mHeadParam;
81 while (paramEntry) {
82 switch (paramEntry->getClassId()) {
83 case YamlClassId::U8:
84 al::tryGetByamlU8(((YamlParamBase<u8>*)paramEntry)->getParamPtr(), iter,
85 paramEntry->getName());
86 break;
87 case YamlClassId::U16:
88 al::tryGetByamlU16(((YamlParamBase<u16>*)paramEntry)->getParamPtr(), iter,
89 paramEntry->getName());
90 break;
91 case YamlClassId::S16:
92 al::tryGetByamlS16(((YamlParamBase<s16>*)paramEntry)->getParamPtr(), iter,
93 paramEntry->getName());
94 break;
95 case YamlClassId::V2f:
96 al::tryGetByamlV2f(((YamlParamBase<sead::Vector2f>*)paramEntry)->getParamPtr(), iter,
97 paramEntry->getName());
98 break;
99 case YamlClassId::V3f:
100 al::tryGetByamlV3f(((YamlParamBase<sead::Vector3f>*)paramEntry)->getParamPtr(), iter,
101 paramEntry->getName());
102 break;
103 case YamlClassId::Color:
104 al::tryGetByamlColor(((YamlParamBase<sead::Color4f>*)paramEntry)->getParamPtr(), iter,
105 paramEntry->getName());
106 break;
107 case YamlClassId::F32:
108 al::tryGetByamlF32(((YamlParamBase<f32>*)paramEntry)->getParamPtr(), iter,
109 paramEntry->getName());
110 break;
111 case YamlClassId::S32: {
112 s32 value = al::tryGetByamlKeyIntOrZero(iter, paramEntry->getName());
113 ((YamlParamBase<s32>*)paramEntry)->setParam(value);
114 break;
115 }
116 case YamlClassId::Bool: {
117 bool value = al::tryGetByamlKeyBoolOrFalse(iter, paramEntry->getName());
118 ((YamlParamBase<bool>*)paramEntry)->setParam(value);
119 break;
120 }
121 case YamlClassId::String: {
122 const char* value = al::tryGetByamlKeyStringOrNULL(iter, paramEntry->getName());
123 ((YamlParamBase<const char*>*)paramEntry)->setParam(value);
124 }
125 }
126 paramEntry = paramEntry->getNext();
127 }
128}
129
130YamlParam_YamlString::YamlParam_YamlString(const char* name) : YamlParamBase(name) {}
131
132YamlClassId YamlParam_YamlString::getClassId() const {
133 return YamlClassId::String;
134}
135
136void YamlParam_YamlString::setPtr_YamlString(const char** value) {
137 setParamPtr(value);
138}
139
140YamlParam_V3f::YamlParam_V3f(const char* name) : YamlParamBase(name) {}
141
142YamlClassId YamlParam_V3f::getClassId() const {
143 return YamlClassId::V3f;
144}
145
146void YamlParam_V3f::setPtr_V3f(sead::Vector3f* value) {
147 setParamPtr(value);
148}
149
150YamlParam_YamlColor::YamlParam_YamlColor(const char* name) : YamlParamBase(name) {}
151
152YamlClassId YamlParam_YamlColor::getClassId() const {
153 return YamlClassId::Color;
154}
155
156void YamlParam_YamlColor::setPtr_YamlColor(sead::Color4f* value) {
157 setParamPtr(value);
158}
159
160YamlParam_bool::YamlParam_bool(const char* name) : YamlParamBase(name) {}
161
162YamlClassId YamlParam_bool::getClassId() const {
163 return YamlClassId::Bool;
164}
165
166void YamlParam_bool::setPtr_bool(bool* value) {
167 setParamPtr(value);
168}
169
170YamlParam_u8::YamlParam_u8(const char* name) : YamlParamBase(name) {}
171
172YamlClassId YamlParam_u8::getClassId() const {
173 return YamlClassId::U8;
174}
175
176void YamlParam_u8::setPtr_u8(u8* value) {
177 setParamPtr(value);
178}
179
180YamlParam_f32::YamlParam_f32(const char* name) : YamlParamBase(name) {}
181
182YamlClassId YamlParam_f32::getClassId() const {
183 return YamlClassId::F32;
184}
185
186void YamlParam_f32::setPtr_f32(f32* value) {
187 setParamPtr(value);
188}
189
190YamlParam_V2f::YamlParam_V2f(const char* name) : YamlParamBase(name) {}
191
192YamlClassId YamlParam_V2f::getClassId() const {
193 return YamlClassId::V2f;
194}
195
196void YamlParam_V2f::setPtr_V2f(sead::Vector2f* value) {
197 setParamPtr(value);
198}
199
200} // namespace alYamlMacroUtil
201