sandbox
Loading...
Searching...
No Matches
assembly.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_SCRIPTING_MANAGED_ASSEMBLY_HPP_
3#define LIBSBX_SCRIPTING_MANAGED_ASSEMBLY_HPP_
4
5#include <vector>
6
7#include <libsbx/utility/hashed_string.hpp>
8
9#include <libsbx/containers/stable_vector.hpp>
10
11#include <libsbx/scripting/managed/fwd.hpp>
12#include <libsbx/scripting/managed/core.hpp>
13#include <libsbx/scripting/managed/platform.hpp>
14#include <libsbx/scripting/managed/type.hpp>
15
16namespace sbx::scripting::managed {
17
18enum class assembly_load_status : std::uint8_t {
19 success,
20 file_not_found,
21 file_load_failure,
22 invalid_file_path,
23 invalid_assembly,
24 unknown_error
25}; // enum class assembly_load_status
26
27class assembly {
28
29 friend class host_instance;
30 friend class assembly_load_context;
31
32public:
33
34 auto get_assembly_id() const -> std::int32_t;
35
36 auto get_load_status() const -> assembly_load_status;
37
38 auto get_name() const -> std::string_view;
39
40 auto add_internal_call(std::string_view class_name, std::string_view variable_name, void* function_pointer) -> void;
41
42 auto upload_internal_calls() -> void;
43
44 auto get_type(std::string_view class_name) const -> type&;
45
46 auto get_types() const -> const std::vector<type*>&;
47
48private:
49
50 runtime* _runtime = nullptr;
51 std::int32_t _assembly_id = -1;
52 assembly_load_status _load_status = assembly_load_status::unknown_error;
53 std::string _name;
54
55 std::vector<string_type> _internal_call_name_storage;
56
57 std::vector<internal_call> _internal_calls;
58
59 std::vector<type*> _types;
60
61}; // class assembly
62
64
65 friend class runtime;
66
67public:
68
69 auto load_assembly(std::string_view file_path) -> assembly&;
70
71 auto load_assembly_from_memory(const std::byte* data, std::int64_t data_length) -> assembly&;
72
73 auto get_or_load_assembly(std::string_view file_path) -> assembly&;
74
75 auto get_loaded_assemblies() const -> const containers::stable_vector<assembly>&;
76
77private:
78
79 std::int32_t _context_id;
80 containers::stable_vector<assembly> _loaded_assemblies;
81 std::unordered_map<utility::hashed_string, std::uint32_t> _assembly_indices;
82
83 runtime* _runtime = nullptr;
84
85}; // class assembly_load_context
86
87}; // namespace sbx::scripting::managed
88
89#endif // LIBSBX_SCRIPTING_MANAGED_ASSEMBLY_HPP_
Definition: stable_vector.hpp:21
Definition: assembly.hpp:27
Definition: runtime.hpp:35
Definition: type.hpp:11