1#pragma once
2
3#include <basis/seadTypes.h>
4#include <prim/seadSafeString.h>
5#include <thread/seadMessageQueue.h>
6
7namespace al {
8
9enum class FileState : s32 {
10 None,
11 IsLoadRequested,
12 IsSendMessageDone,
13 IsLoadDone,
14};
15
16class FileEntryBase {
17public:
18 FileEntryBase();
19
20 virtual void load() = 0;
21
22 void setFileName(const sead::SafeString& fileName);
23 const sead::SafeString& getFileName() const;
24 void sendMessageDone();
25 void waitLoadDone();
26 void clear();
27 void setLoadStateRequested();
28
29 FileState getFileState() const { return mFileState; }
30
31 // TODO: Remove, mFileState optimizes differently using a getter
32 friend class ArchiveHolder;
33 friend class SoundItemHolder;
34
35private:
36 sead::FixedSafeString<0x40> mFileName;
37 FileState mFileState = FileState::None;
38 sead::MessageQueue mMessageQueue;
39};
40
41static_assert(sizeof(FileEntryBase) == 0xb8);
42} // namespace al
43