#ifndef MRT_RUNTIME_H
#define MRT_RUNTIME_H
#include "Base/Log.h"
namespace MapleRuntime {
extern "C" {
void MRT_FlushGCInfo();
}
class HeapManager;
class ObjectManager;
class ExceptionManager;
class StackManager;
class SignalManager;
class LogManager;
class LoaderManager;
class ThreadManager;
class MutatorManager;
class ConcurrencyModel;
class TypeInfoManager;
#ifdef _WIN64
class WinModuleManager;
#endif
class Runtime {
public:
static inline Runtime& Current()
{
CHECK(runtime != nullptr);
return *runtime;
}
static inline Runtime* CurrentRef() { return runtime; }
inline SignalManager& GetSignalManager()
{
CHECK(signalManager != nullptr);
return *signalManager;
}
inline HeapManager& GetHeapManager()
{
CHECK(heapManager != nullptr);
return *heapManager;
}
inline ObjectManager& GetObjectManager()
{
CHECK(objectManager != nullptr);
return *objectManager;
}
inline ExceptionManager& GetExceptionManager()
{
CHECK(exceptionManager != nullptr);
return *exceptionManager;
}
inline StackManager& GetStackManager()
{
CHECK(stackManager != nullptr);
return *stackManager;
}
inline MutatorManager& GetMutatorManager()
{
CHECK(mutatorManager != nullptr);
return *mutatorManager;
}
inline ConcurrencyModel& GetConcurrencyModel()
{
CHECK(concurrencyModel != nullptr);
return *concurrencyModel;
}
inline LoaderManager& GetLoaderManager()
{
CHECK(loaderManager != nullptr);
return *loaderManager;
}
#ifdef _WIN64
inline WinModuleManager& GetWinModuleManager()
{
CHECK(winModuleManager != nullptr);
return *winModuleManager;
}
#endif
virtual RuntimeParam GetRuntimeParam() const = 0;
virtual void SetGCThreshold(uint64_t threshold) = 0;
protected:
static Runtime* runtime;
Runtime() = default;
virtual ~Runtime() = default;
ConcurrencyModel* concurrencyModel = nullptr;
SignalManager* signalManager = nullptr;
HeapManager* heapManager = nullptr;
ObjectManager* objectManager = nullptr;
ExceptionManager* exceptionManager = nullptr;
StackManager* stackManager = nullptr;
LogManager* logManager = nullptr;
LoaderManager* loaderManager = nullptr;
MutatorManager* mutatorManager = nullptr;
TypeInfoManager* typeInfoManager = nullptr;
#ifdef _WIN64
WinModuleManager* winModuleManager = nullptr;
#endif
};
}
#endif