SuperMarioOdysseyOnline/include/sead/hostio/seadHostIOReflexible.h
2022-06-16 14:33:18 -07:00

90 lines
2.6 KiB
C++

#pragma once
#include "hostio/seadHostIOEventListener.h"
#include "prim/seadBitFlag.h"
#include "prim/seadSafeString.h"
namespace sead
{
class Heap;
namespace hostio
{
class Context;
class GenEvent;
class Reflexible : public NodeEventListener
{
public:
enum class NodeClassType
{
/// sead::hostio::Reflexible
Reflexible = 0,
/// sead::hostio::Node
Node = 1,
/// Other classes
Other = 2,
};
virtual NodeClassType getNodeClassType() const { return NodeClassType::Reflexible; }
enum class AllocFlg
{
Name = 1u << 0u,
Meta = 1u << 1u,
};
#ifdef SEAD_DEBUG
Reflexible();
Reflexible(Heap* heap, IDisposer::HeapNullOption heap_null_option);
~Reflexible() override { disposeHostIOImpl_(); }
void listenNodeEvent([[maybe_unused]] const NodeEvent* event) override {}
virtual void genMessage([[maybe_unused]] Context* context) {}
virtual SafeString getMetaFilename() { return SafeString::cEmptyString; }
virtual void genObjectInfo(const GenEvent* event, u32);
virtual Reflexible* searchNode([[maybe_unused]] const SafeString& name) { return nullptr; }
virtual void calcURL(BufferedSafeString* url) const { url->copy(""); }
virtual void calcNodeURL(const Reflexible* reflexible, BufferedSafeString* url)
{
return reflexible->calcURL(url);
}
void callGenMessage(Context*, u32);
void correctChildNodeInfo(Context*);
void baseListen(const PropertyEvent* event);
void applyEventDataToMemory(const PropertyEvent* event);
SafeString getNodeName() const { return mName; }
void setNodeName(const SafeString& name);
void setNodeNameCopyString(const SafeString& name, Heap* heap);
SafeString getNodeMeta() const { return mMeta; }
void setNodeMeta(const SafeString& meta);
void setNodeMetaCopyString(const SafeString& meta, Heap* heap);
protected:
void disposeHostIO() override
{
disposeHostIOImpl_();
NodeEventListener::disposeHostIO();
}
virtual void genChildNode(Context* context);
virtual bool isHaveChild() const { return false; }
private:
using ApplyEventDataToMemoryCallback = bool (*)(const PropertyEvent* event);
void safeDelete_(AllocFlg flag);
const char* createStringBuffer_(AllocFlg flag, const SafeString& name, Heap* heap);
void disposeHostIOImpl_();
const char* mName;
const char* mMeta;
bool mIsGenerated = false;
BitFlag8 mAllocFlg;
static ApplyEventDataToMemoryCallback sApplyEventDataToMemoryCallback;
#endif
};
} // namespace hostio
} // namespace sead