ReXGlue SDK
Toggle main menu visibility
Loading...
Searching...
No Matches
kernel_object.h
Go to the documentation of this file.
1
10
11
#pragma once
12
13
#include <atomic>
14
#include <memory>
15
#include <string>
16
#include <utility>
17
#include <variant>
18
#include <vector>
19
20
#include <
rex/kernel/object/event_object.h
>
21
#include <
rex/kernel/object/file_object.h
>
22
#include <
rex/kernel/object/io_completion_object.h
>
23
#include <
rex/kernel/object/kernel_thread.h
>
24
#include <
rex/kernel/object/module_object.h
>
25
#include <
rex/kernel/object/mutant_object.h
>
26
#include <
rex/kernel/object/notify_listener_object.h
>
27
#include <
rex/kernel/object/object.h
>
28
#include <
rex/kernel/object/object_block.h
>
29
#include <
rex/kernel/object/semaphore_object.h
>
30
#include <
rex/kernel/object/symbolic_link_object.h
>
31
#include <
rex/kernel/object/timer_object.h
>
32
#include <
rex/kernel/object/xam_object.h
>
33
#include <
rex/kernel/types/status.h
>
34
#include <
rex/types.h
>
35
36
namespace
rex::kernel
{
37
39
using
ObjectData
= std::variant<
EventObject
,
SemaphoreObject
,
MutantObject
,
TimerObject
,
FileObject
,
40
NotifyListenerObject
,
IOCompletionObject
,
SymbolicLinkObject
,
41
ModuleObject
,
ThreadRef
,
XAMObject
>;
42
44
struct
KernelObject
{
51
template
<
typename
T,
typename
... Args>
52
explicit
KernelObject
(std::in_place_type_t<T> tag, Args&&... args)
53
: data(tag, std::forward<Args>(args)...) {}
54
55
REX_KERNEL_API
~KernelObject
();
56
57
[[nodiscard]] ObjectType GetType()
const
{
return
static_cast<
ObjectType
>
(data.index()); }
58
59
ObjectData
data;
60
std::string
name
;
61
std::vector<X_HANDLE>
handles
;
62
bool
header_hold
=
false
;
63
u32
pointer_refs
= 0;
64
u32
guest_ptr
= 0;
65
bool
owns_guest_block
=
false
;
67
std::atomic<bool>
reinit_pending
{
false
};
68
kernel::GuestAddressSpace
*
memory
=
nullptr
;
69
WorkspaceHeap
*
workspace
=
nullptr
;
70
PinCount
pins
;
72
void (*
destroy
)(
KernelObject
* object)
noexcept
=
nullptr
;
73
};
74
80
template
<
typename
T,
typename
... Args>
81
[[nodiscard]] std::unique_ptr<KernelObject>
MakeObject
(Args&&... args) {
82
if
constexpr
(
XAMObjectClass<T>
) {
83
return
std::make_unique<KernelObject>(std::in_place_type<XAMObject>,
84
std::make_unique<T>(std::forward<Args>(args)...));
85
}
else
{
86
return
std::make_unique<KernelObject>(std::in_place_type<T>, std::forward<Args>(args)...);
87
}
88
}
89
90
}
// namespace rex::kernel
rex::kernel::GuestAddressSpace
Definition
heap.h:594
rex::kernel::PinCount
Definition
object.h:150
rex::kernel::WorkspaceHeap
Definition
guest_allocator.h:179
rex::kernel::XAMObjectClass
Definition
xam_object.h:40
event_object.h
file_object.h
io_completion_object.h
kernel_thread.h
module_object.h
mutant_object.h
rex::kernel
Definition
export.h:24
rex::kernel::ObjectData
std::variant< EventObject, SemaphoreObject, MutantObject, TimerObject, FileObject, NotifyListenerObject, IOCompletionObject, SymbolicLinkObject, ModuleObject, ThreadRef, XAMObject > ObjectData
Definition
kernel_object.h:39
rex::kernel::MakeObject
std::unique_ptr< KernelObject > MakeObject(Args &&... args)
Definition
kernel_object.h:81
rex::memory
Definition
endian.h:27
notify_listener_object.h
object.h
object_block.h
REX_KERNEL_API
#define REX_KERNEL_API
Definition
platform.h:297
semaphore_object.h
status.h
rex::kernel::EventObject
Definition
event_object.h:59
rex::kernel::FileObject
Definition
file_object.h:161
rex::kernel::IOCompletionObject
Definition
io_completion_object.h:49
rex::kernel::KernelObject::destroy
void(*) destroy(KernelObject *object) noexcept
Definition
kernel_object.h:72
rex::kernel::KernelObject::~KernelObject
~KernelObject()
rex::kernel::KernelObject::guest_ptr
u32 guest_ptr
Definition
kernel_object.h:64
rex::kernel::KernelObject::reinit_pending
std::atomic< bool > reinit_pending
Definition
kernel_object.h:67
rex::kernel::KernelObject::handles
std::vector< X_HANDLE > handles
Definition
kernel_object.h:61
rex::kernel::KernelObject::owns_guest_block
bool owns_guest_block
Definition
kernel_object.h:65
rex::kernel::KernelObject::header_hold
bool header_hold
Definition
kernel_object.h:62
rex::kernel::KernelObject::pins
PinCount pins
Definition
kernel_object.h:70
rex::kernel::KernelObject::pointer_refs
u32 pointer_refs
Definition
kernel_object.h:63
rex::kernel::KernelObject::name
std::string name
Definition
kernel_object.h:60
rex::kernel::KernelObject::workspace
WorkspaceHeap * workspace
Definition
kernel_object.h:69
rex::kernel::KernelObject::KernelObject
KernelObject(std::in_place_type_t< T > tag, Args &&... args)
Definition
kernel_object.h:52
rex::kernel::ModuleObject
Definition
module_object.h:189
rex::kernel::MutantObject
Definition
mutant_object.h:54
rex::kernel::NotifyListenerObject
Definition
notify_listener_object.h:68
rex::kernel::SemaphoreObject
Definition
semaphore_object.h:38
rex::kernel::SymbolicLinkObject
Definition
symbolic_link_object.h:27
rex::kernel::ThreadRef
Definition
kernel_thread.h:48
rex::kernel::TimerObject
Definition
timer_object.h:45
rex::kernel::XAMObject
Definition
xam_object.h:28
symbolic_link_object.h
timer_object.h
types.h
Integer types, byte order wrappers and size literals.
xam_object.h
rex
kernel
object
kernel_object.h
Generated by
1.18.0