1#pragma once
2
3#include <basis/seadTypes.h>
4#include <prim/seadSafeString.h>
5
6namespace al {
7class ParameterBase;
8class ByamlIter;
9class ParameterArray;
10
11class ParameterObj {
12public:
13 ParameterObj();
14
15 void pushBackListNode(ParameterBase* param);
16 void tryGetParam(const ByamlIter& iter);
17 void addArray(ParameterArray* array, const sead::SafeString& key);
18 bool isEqual(const ParameterObj& obj) const;
19 void copy(const ParameterObj& obj);
20 void copyLerp(const ParameterObj& objA, const ParameterObj& objB, f32 rate);
21 ParameterBase* findParameter(const char* name) const;
22
23 ParameterBase* getRootParam() const { return mRootParam; }
24
25 ParameterObj* getNext() const { return mNext; }
26
27 ParameterArray* getParamArray() const { return mParamArray; }
28
29 void setNext(ParameterObj* obj) { mNext = obj; }
30
31 void setKey(const sead::SafeString& key) { mKey = key; }
32
33private:
34 ParameterBase* mRootParam = nullptr;
35 ParameterBase* mTailParam = nullptr;
36 ParameterObj* mNext = nullptr;
37 ParameterArray* mParamArray = nullptr;
38 sead::FixedSafeString<0x40> mKey;
39};
40
41class ParameterArray {
42public:
43 ParameterArray();
44 void tryGetParam(const ByamlIter& iter);
45 bool isEqual(const ParameterArray& array) const;
46 void copy(const ParameterArray& array);
47 void copyLerp(const ParameterArray& arrayA, const ParameterArray& arrayB, f32 rate);
48 void addObj(ParameterObj* obj);
49 void clearObj();
50 void removeObj(ParameterObj* obj);
51 bool isExistObj(ParameterObj* obj);
52
53 ParameterObj* getRootObjNode() const { return mRootObjNode; }
54
55 ParameterArray* getNext() const { return mNext; }
56
57 void setNext(ParameterArray* array) { mNext = array; }
58
59 void setKey(const sead::SafeString& key) { mKey = key; }
60
61 s32 getSize() const { return mSize; }
62
63private:
64 ParameterObj* mRootObjNode = nullptr;
65 ParameterArray* mNext = nullptr;
66 sead::FixedSafeString<0x40> mKey;
67 s32 mSize = 0;
68};
69
70class ParameterList {
71public:
72 ParameterList();
73
74 void addParam(ParameterBase* param);
75 void addList(ParameterList* list, const sead::SafeString& key);
76 void addObj(ParameterObj* obj, const sead::SafeString& key);
77 void addArray(ParameterArray* array, const sead::SafeString& key);
78 void clearList();
79 void clearObj();
80 void removeList(ParameterList* list);
81 void removeObj(ParameterObj* obj);
82 bool isExistObj(ParameterObj* obj);
83 void tryGetParam(const ByamlIter& iter);
84
85 ParameterList* getNext() const { return mNext; }
86
87 void setNext(ParameterList* list) { mNext = list; }
88
89 void setKey(const sead::SafeString& key) { mKey = key; }
90
91private:
92 ParameterBase* mRootParamNode = nullptr;
93 ParameterObj* mRootObjNode = nullptr;
94 ParameterList* mRootListNode = nullptr;
95 ParameterArray* mRootArrayNode = nullptr;
96 ParameterList* mNext = nullptr;
97 sead::FixedSafeString<0x40> mKey;
98};
99
100class ParameterIo : public ParameterList {
101public:
102 ParameterIo();
103};
104
105} // namespace al
106