13 #include <unordered_map>
24 static constexpr uint32_t Nil =
static_cast<uint32_t
>(~0);
32 VM(
VM&&) noexcept = delete;
33 VM& operator=(const
VM&) = delete;
34 VM& operator=(
VM&&) noexcept = delete;
43 void LoadProgram(const std::shared_ptr<const
void>& program);
50 void Execute(const std::function<
void()>& function);
52 void RequestAll(const int32_t level, const
char* actionName, const std::shared_ptr<
Actor>& sender) const;
53 bool Request(const int32_t level, const
char* actorName, const
char* actionName, const std::shared_ptr<
Actor>& sender);
55 [[nodiscard]] const std::shared_ptr<
Actor>&
GetActor(const
char* name);
56 [[nodiscard]] const std::string_view&
GetActorName(const std::shared_ptr<
Actor>& actor) const;
57 [[nodiscard]] std::shared_ptr<
Actor>
CloneActor(const std::shared_ptr<
Actor>& actor, const
char* newName);
58 [[nodiscard]] std::shared_ptr<
Actor>
CreateActor(const
char* name, const
char* newName);
71 [[nodiscard]] int8_t GetInt8FromMemory(const uint32_t address) const;
72 [[nodiscard]] uint8_t GetUint8FromMemory(const uint32_t address) const;
73 [[nodiscard]] int16_t GetInt16FromMemory(const uint32_t address) const;
74 [[nodiscard]] uint16_t GetUint16FromMemory(const uint32_t address) const;
75 [[nodiscard]] int32_t GetInt32FromMemory(const uint32_t address) const;
76 [[nodiscard]] uint32_t GetUint32FromMemory(const uint32_t address) const;
77 [[nodiscard]]
float GetFloatFromMemory(const uint32_t address) const;
78 [[nodiscard]] const
char* GetStringFromMemory(const uint32_t address) const;
80 [[nodiscard]] int32_t GetOpecode(const uint32_t address) const;
84 [[nodiscard]]
Buffer& GetGlobalVariables() noexcept;
85 [[nodiscard]] const
Buffer& GetGlobalVariables() const noexcept;
86 [[nodiscard]]
Buffer& GetStaticVariables() noexcept;
87 [[nodiscard]] const
Buffer& GetStaticVariables() const noexcept;
90 std::shared_ptr<
Plugin> mPlugin;
91 std::shared_ptr<const
void> mProgram;
93 const uint8_t* mInstructionPool =
nullptr;
94 const
char* mConstantPool =
nullptr;
97 std::unordered_map<std::string_view, std::shared_ptr<
Actor>> mActorHash;
98 std::unordered_map<std::string_view, const
ActorInfoHeader*> mPhantomHash;
102 uint32_t mFrameCounter = 0;
107 InitializeActionRunning,
108 InitializeActionFinished,
113 std::bitset<8> mFlag;
void YieldAll()
Definition: VM.inl:304
const std::string_view & GetActorName(const std::shared_ptr< Actor > &actor) const
Definition: VM.inl:317
bool Request(const int32_t level, const char *actorName, const char *actionName, const std::shared_ptr< Actor > &sender)
Definition: VM.inl:296
void RequestAll(const int32_t level, const char *actionName, const std::shared_ptr< Actor > &sender) const
Definition: VM.inl:288
void Execute(const std::function< void()> &function)
Definition: VM.inl:280
std::shared_ptr< Actor > CloneActor(const std::shared_ptr< Actor > &actor, const char *newName)
Definition: VM.inl:332
bool IsFinishInitAction() const
Definition: VM.inl:485
std::shared_ptr< Actor > CreateActor(const char *name, const char *newName)
Definition: VM.inl:345
void SetSystemRequest(const bool enable)
Definition: VM.inl:490
bool IsSystemRequestEnabled() const
Definition: VM.inl:498
uint32_t GetFrameCounter() const
Definition: VM.inl:503
bool IsRunning() const
Definition: VM.inl:267
const std::shared_ptr< Actor > & GetActor(const char *name)
Definition: VM.inl:312
void Restart()
Definition: VM.inl:219
void UnloadProgram()
Definition: VM.inl:187
void LoadPlugins(const std::string &directoryName)
Definition: VM.inl:25
void LoadProgram(const std::string &path)
Definition: VM.inl:47
std::shared_ptr< Actor > CreateActorFromPhantom(const char *name, const char *newName)
Definition: VM.inl:350
bool Run()
Definition: VM.inl:230
float_t GetDeltaTime() const
VM(VM &&) noexcept=delete
bool IsInInitAction() const
Definition: VM.inl:480
std::function< void(const std::shared_ptr< Actor > &)> ExternalFunctionType
Definition: VM.h:27
void LoadPlugin(const std::string &filename)
Definition: VM.inl:18
bool IsFrameChanged() const
Definition: VM.inl:508
void RegisterFunction(const std::string &name, const ExternalFunctionType &function)
Definition: VM.inl:32
Definition: CodeBuffer.cpp:12
float float_t
Definition: Type.h:28
Definition: Noncopyable.h:18