1#pragma once
2
3#include <basis/seadTypes.h>
4#include <stream/seadStream.h>
5
6namespace al {
7class ByamlHeader {
8public:
9 u16 getTag() const;
10 bool isInvertOrder() const;
11 u16 getVersion() const;
12 u32 getHashKeyTableOffset() const;
13 u32 getStringTableOffset() const;
14 u32 getDataOffset() const;
15
16private:
17 union {
18 s32 _0;
19 u16 mTag, mVersion; // unusable due to different loading mechanisms
20 };
21
22 s32 mHashKeyOffset;
23 s32 mStringTableOffset;
24 s32 mDataOffset;
25};
26
27class ByamlStringTableIter {
28public:
29 ByamlStringTableIter();
30 ByamlStringTableIter(const u8* data, bool isRev);
31
32 s32 getSize() const;
33 const u32* getAddressTable() const;
34 u32 getStringAddress(s32 index) const;
35 u32 getEndAddress() const;
36 const char* getString(s32 index) const;
37 s32 getStringSize(s32 index) const;
38 s32 findStringIndex(const char* str) const;
39 bool isValidate() const;
40
41private:
42 const u8* mData = nullptr;
43 bool mIsRev = false;
44};
45} // namespace al
46
47namespace alByamlLocalUtil {
48
49const char* getDataTypeString(s32 type);
50al::ByamlStringTableIter getHashKeyTable(const u8* data);
51al::ByamlStringTableIter getStringTable(const u8* data);
52u64 getData64Bit(const u8* data, u32 off, bool isRev);
53void writeU24(sead::WriteStream* stream, s32 val);
54bool verifiByaml(const u8* data);
55bool verifiByamlHeader(const u8* data);
56bool verifiByamlStringTable(const u8* data, bool isRev);
57
58} // namespace alByamlLocalUtil
59