aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/vm/VirtualMachine.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/openvic-simulation/vm/VirtualMachine.hpp')
-rw-r--r--src/openvic-simulation/vm/VirtualMachine.hpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/openvic-simulation/vm/VirtualMachine.hpp b/src/openvic-simulation/vm/VirtualMachine.hpp
new file mode 100644
index 0000000..1c130b2
--- /dev/null
+++ b/src/openvic-simulation/vm/VirtualMachine.hpp
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "RuntimeProcess.hpp"
+#include <lauf/vm.h>
+
+namespace OpenVic::Vm {
+ struct VirtualMachine {
+ VirtualMachine(lauf_vm_options options) : _handle(lauf_create_vm(options)) {}
+
+ VirtualMachine(VirtualMachine&&) = default;
+ VirtualMachine& operator=(VirtualMachine&&) = default;
+
+ VirtualMachine(VirtualMachine const&) = delete;
+ VirtualMachine& operator=(VirtualMachine const&) = delete;
+
+ ~VirtualMachine() {
+ lauf_destroy_vm(_handle);
+ }
+
+ lauf_vm* handle() {
+ return _handle;
+ }
+
+ const lauf_vm* handle() const {
+ return _handle;
+ }
+
+ operator lauf_vm*() {
+ return _handle;
+ }
+
+ operator const lauf_vm*() const {
+ return _handle;
+ }
+
+ RuntimeProcess start_process(const lauf_asm_program* program) {
+ return RuntimeProcess(lauf_vm_start_process(_handle, program));
+ }
+
+ private:
+ lauf_vm* _handle;
+ };
+}