61 [[nodiscard]] virtual
Result<X_HANDLE> AddWithBlock(std::unique_ptr<
KernelObject>
object,
62 u32 attributes_ptr, u32 block_size) = 0;
72 [[nodiscard]] virtual
ObjectBlock AllocateObjectBlock(u32 size, ObjectType type,
73 ObjectBlockHeap heap) = 0;
82 [[nodiscard]] virtual
Result<X_HANDLE> AddEvent(
bool manual_reset,
bool initial_state) = 0;
90 [[nodiscard]] virtual
Result<X_HANDLE> AddXAMObject(std::unique_ptr<
IXAMObject> body,
98 [[nodiscard]] virtual
Result<X_HANDLE> AddFile(std::unique_ptr<filesystem::IFile> file,
99 bool synchronous) = 0;
107 [[nodiscard]] virtual
Result<X_HANDLE> Duplicate(X_HANDLE handle) = 0;
115 [[nodiscard]] virtual
Result<X_HANDLE> Open(const
ObjectPin&
object) = 0;
123 [[nodiscard]] virtual
Result<
void> Close(X_HANDLE handle) = 0;
131 [[nodiscard]] virtual
Result<
void> Reference(const
ObjectPin&
object) = 0;
139 [[nodiscard]] virtual
Result<
void> Dereference(const
ObjectPin&
object) = 0;
147 [[nodiscard]] virtual
ObjectPin GetByAddress(u32 address) = 0;
155 [[nodiscard]] virtual
ObjectPin Get(X_HANDLE handle) = 0;
158 [[nodiscard]] virtual std::vector<
ObjectPin> GetAll() = 0;
166 [[nodiscard]] std::optional<std::vector<
ObjectPin>> GetEach(std::span<const X_HANDLE> handles) {
167 std::vector<ObjectPin> pins;
168 pins.reserve(handles.size());
169 for (
const X_HANDLE handle : handles) {
174 pins.push_back(std::move(pin));
185 [[nodiscard]]
virtual Result<void> AddName(std::string_view name, X_HANDLE handle) = 0;
192 [[nodiscard]]
virtual Result<X_HANDLE> OpenByName(std::string_view name) = 0;
204 [[nodiscard]]
virtual ObjectPin ResolveObject(u32 address, i32 as_type) = 0;
212 virtual void ForgetAddress(u32 address) = 0;
219 template <
typename T,
typename... Args>
222 return AddXAMObject(std::make_unique<T>(std::forward<Args>(args)...), options);
224 return Add(
MakeObject<T>(std::forward<Args>(args)...), options);
235 template <
typename T,
typename... Args>
236 [[nodiscard]]
Result<X_HANDLE> CreateObject(u32 attributes_ptr, u32 block_size, Args&&... args) {
237 return AddWithBlock(
MakeObject<T>(std::forward<Args>(args)...), attributes_ptr, block_size);
246 template <
typename T>
247 [[nodiscard]]
Pinned<T> Get(X_HANDLE handle) {
252 template <
typename T>
253 [[nodiscard]] std::vector<Pinned<T>> All() {
254 std::vector<Pinned<T>> results;
258 results.push_back(std::move(pin));
271 template <
typename T>
272 [[nodiscard]]
Pinned<T> Resolve(u32 address, i32 as_type = -1) {
273 return Pinned<T>(ResolveObject(address, as_type));