Phasor
3.3.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
handle.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <unordered_map>
4
#include <cstdint>
6
namespace
HandleSystem
7
{
8
using
HandleId
= uint32_t;
9
10
inline
HandleId
&
nextId
()
11
{
12
static
HandleId
id
= 1;
13
return
id;
14
}
15
16
template
<
typename
T>
struct
Table
17
{
18
static
std::unordered_map<HandleId, T> &
idToHandle
()
19
{
20
static
std::unordered_map<HandleId, T> map;
21
return
map;
22
}
23
24
static
std::unordered_map<T, HandleId> &
handleToId
()
25
{
26
static
std::unordered_map<T, HandleId> map;
27
return
map;
28
}
29
};
30
31
template
<
typename
T>
inline
HandleId
store
(T handle)
32
{
33
if
(!handle)
34
{
35
return
0;
36
}
37
38
auto
&h2i =
Table<T>::handleToId
();
39
auto
&i2h =
Table<T>::idToHandle
();
40
41
auto
it = h2i.find(handle);
42
if
(it != h2i.end())
43
{
44
return
it->second;
45
}
46
47
HandleId
id
=
nextId
()++;
48
h2i[handle] = id;
49
i2h[id] = handle;
50
return
id;
51
}
52
53
template
<
typename
T>
inline
T
resolve
(
HandleId
id
)
54
{
55
if
(
id
== 0)
56
{
57
return
T{};
58
}
59
60
auto
&i2h =
Table<T>::idToHandle
();
61
auto
it = i2h.find(
id
);
62
if
(it == i2h.end())
63
{
64
return
T{};
65
}
66
67
return
it->second;
68
}
69
70
template
<
typename
T>
inline
void
remove
(
HandleId
id
)
71
{
72
auto
&i2h =
Table<T>::idToHandle
();
73
auto
&h2i =
Table<T>::handleToId
();
74
75
auto
it = i2h.find(
id
);
76
if
(it == i2h.end())
77
{
78
return
;
79
}
80
81
h2i.erase(it->second);
82
i2h.erase(it);
83
}
84
}
// namespace HandleSystem
HandleSystem
Handle system for managed win32 resources.
Definition
handle.hpp:7
HandleSystem::store
HandleId store(T handle)
Definition
handle.hpp:31
HandleSystem::resolve
T resolve(HandleId id)
Definition
handle.hpp:53
HandleSystem::remove
void remove(HandleId id)
Definition
handle.hpp:70
HandleSystem::HandleId
uint32_t HandleId
Definition
handle.hpp:8
HandleSystem::nextId
HandleId & nextId()
Definition
handle.hpp:10
HandleSystem::Table
Definition
handle.hpp:17
HandleSystem::Table::idToHandle
static std::unordered_map< HandleId, T > & idToHandle()
Definition
handle.hpp:18
HandleSystem::Table::handleToId
static std::unordered_map< T, HandleId > & handleToId()
Definition
handle.hpp:24
src
Bindings
win32
handle.hpp
Generated by
1.16.1