The Pedigree Project
0.1
src
system
include
pedigree
kernel
utilities
UniqueResource.h
1
/*
2
* Copyright (c) 2026, Pedigree Developers
3
*
4
* Permission to use, copy, modify, and distribute this software for any
5
* purpose with or without fee is hereby granted.
6
*/
7
8
#ifndef PEDIGREE_KERNEL_UTILITIES_UNIQUERESOURCE_H
9
#define PEDIGREE_KERNEL_UTILITIES_UNIQUERESOURCE_H
10
#include "pedigree/kernel/compiler.h"
11
12
#include <config.h>
13
25
template
<
class
T,
class
Releaser>
26
class
UniqueResource
{
27
public
:
28
UniqueResource
() : m_Resource(
nullptr
) {}
29
30
UniqueResource
(
UniqueResource
&& other) noexcept : m_Resource(other.release()) {}
31
32
~UniqueResource
() {
33
reset
();
34
}
35
36
UniqueResource
& operator=(
UniqueResource
&& other)
noexcept
{
37
if
(
this
!= &other) {
38
reset
();
39
m_Resource = other.release();
40
}
41
return
*
this
;
42
}
43
45
MUST_USE_RESULT
static
UniqueResource
adopt
(T* resource) {
46
return
UniqueResource
(resource);
47
}
48
49
T* get()
const
{
50
return
m_Resource;
51
}
52
53
T* operator->()
const
{
54
return
m_Resource;
55
}
56
57
T& operator*()
const
{
58
return
*m_Resource;
59
}
60
61
explicit
operator
bool()
const
{
62
return
m_Resource !=
nullptr
;
63
}
64
66
MUST_USE_RESULT
T*
release
() noexcept {
67
T* resource = m_Resource;
68
m_Resource =
nullptr
;
69
return
resource;
70
}
71
73
void
reset
(T* replacement =
nullptr
) noexcept {
74
if
(replacement == m_Resource) {
75
return
;
76
}
77
T* resource = m_Resource;
78
m_Resource =
nullptr
;
79
if
(resource) {
80
Releaser::release(resource);
81
}
82
m_Resource = replacement;
83
}
84
85
private
:
86
explicit
UniqueResource
(T* resource) : m_Resource(resource) {}
87
88
UniqueResource
(
const
UniqueResource
&) =
delete
;
89
UniqueResource
& operator=(
const
UniqueResource
&) =
delete
;
90
91
T* m_Resource;
92
};
93
94
#endif
UniqueResource
Definition
UniqueResource.h:26
UniqueResource::adopt
static MUST_USE_RESULT UniqueResource adopt(T *resource)
Definition
UniqueResource.h:45
UniqueResource::release
MUST_USE_RESULT T * release() noexcept
Definition
UniqueResource.h:66
UniqueResource::reset
void reset(T *replacement=nullptr) noexcept
Definition
UniqueResource.h:73
MUST_USE_RESULT
#define MUST_USE_RESULT
Definition
system/include/pedigree/kernel/compiler.h:70
Generated on Tue Sep 22 2026 06:05:50 for The Pedigree Project by
1.9.8