| 1 | #pragma once |
|---|---|
| 2 | |
| 3 | #include <basis/seadTypes.h> |
| 4 | #include <prim/seadSafeString.h> |
| 5 | |
| 6 | namespace al { |
| 7 | class ParameterBase; |
| 8 | class ByamlIter; |
| 9 | class ParameterArray; |
| 10 | |
| 11 | class ParameterObj { |
| 12 | public: |
| 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 | |
| 33 | private: |
| 34 | ParameterBase* mRootParam = nullptr; |
| 35 | ParameterBase* mTailParam = nullptr; |
| 36 | ParameterObj* mNext = nullptr; |
| 37 | ParameterArray* mParamArray = nullptr; |
| 38 | sead::FixedSafeString<0x40> mKey; |
| 39 | }; |
| 40 | |
| 41 | class ParameterArray { |
| 42 | public: |
| 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 | |
| 63 | private: |
| 64 | ParameterObj* mRootObjNode = nullptr; |
| 65 | ParameterArray* mNext = nullptr; |
| 66 | sead::FixedSafeString<0x40> mKey; |
| 67 | s32 mSize = 0; |
| 68 | }; |
| 69 | |
| 70 | class ParameterList { |
| 71 | public: |
| 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 | |
| 91 | private: |
| 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 | |
| 100 | class ParameterIo : public ParameterList { |
| 101 | public: |
| 102 | ParameterIo(); |
| 103 | }; |
| 104 | |
| 105 | } // namespace al |
| 106 |