#ifndef MRT_BASE_FILE_H
#define MRT_BASE_FILE_H
#include "Base/CString.h"
#include "Base/Types.h"
#include "os/Path.h"
namespace MapleRuntime {
enum class FileType {
C_FILE,
UNKNOWN
};
class BaseFile {
public:
explicit BaseFile(const CString nameStr) : realPath(nameStr)
{
baseName = Os::Path::GetBaseName(realPath.Str());
}
static BaseFile* CreateCJFile(FileType type, CString filePath, Uptr cfileMetaAddr);
virtual ~BaseFile() = default;
virtual void RegisterFile() = 0;
virtual void UnregisterFile() = 0;
virtual bool IsAddrInCJFile(Uptr addr) const = 0;
virtual Uptr GetPackageInfoBase() = 0;
virtual U32 GetPackageInfoTotalSize() = 0;
virtual void GetGlobalInitFunc(std::vector<Uptr> &globalFuncs) const = 0;
virtual Uptr GetFileMetaAddr() const = 0;
virtual Uptr GetExtensionDataBase() = 0;
virtual U32 GetExtensionDataSize() = 0;
virtual Uptr GetInnerTypeExtensionsBase() = 0;
virtual U32 GetInnerTypeExtensionsSize() = 0;
virtual Uptr GetOuterTypeExtensionsBase() = 0;
virtual U32 GetOuterTypeExtensionsSize() = 0;
virtual Uptr GetStaticGIBase() = 0;
virtual U32 GetStaticGISize() = 0;
virtual Uptr GetTypeInfoBase() = 0;
virtual U32 GetTypeInfoTotalSize() = 0;
virtual Uptr GetTypeExtBase() = 0;
virtual U32 GetTypeExtTotalSize() = 0;
virtual CString GetSDKVersion() const = 0;
virtual const CString& GetRealPath() const;
const CString& GetBaseName() const;
void SetFileCompatibility(bool isComp) { isCompatible = isComp; }
bool IsCompatible() const { return isCompatible; }
private:
CString realPath;
CString baseName;
bool isCompatible { false };
};
}
#endif