acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
pool.h
1
// Created by camilo on 2025-06-30 01:22 <3ThomasBorregaardSørensen!!
2
#pragma once
3
4
5
#include "acme/prototype/prototype/call.h"
6
7
class
CLASS_DECL_ACME
ongoing_particle_array_source
:
8
virtual
public
::particle
9
{
10
public
:
11
12
virtual ::particle_array* ongoing_particle_array();
13
14
15
};
16
17
18
class
CLASS_DECL_ACME pool_group :
19
virtual
public
::particle
20
{
21
public
:
22
23
24
::particle* m_pallocator;
25
// frame
26
//::array<::particle_array > m_particleaOngoing;
27
::pointer < ongoing_particle_array_source > m_pongoingparticlearraysource;
28
29
30
pool_group();
31
~pool_group()
override
;
32
33
34
void
on_initialize_particle()
override
;
35
36
37
virtual
void
call_ongoing(const ::call& call);
38
39
40
virtual ::particle_array* ongoing_particle_array();
41
42
43
};
44
45
46
47
48
49
template
<
typename
TYPE >
50
class
pool
51
{
52
public
:
53
54
55
pool_group
* m_ppoolgroup;
56
::pointer_array < TYPE > m_aPool;
57
58
59
pool()
60
{
61
62
m_ppoolgroup =
nullptr
;
63
64
}
65
66
67
~pool()
68
{
69
70
}
71
72
73
TYPE* get()
74
{
75
76
_synchronous_lock
synchronouslock(m_ppoolgroup->synchronization(), m_ppoolgroup, SYNCHRONOUS_LOCK_SUFFIX);
77
78
TYPE* pGet;
79
80
if
(m_aPool.is_empty())
81
{
82
83
auto
p = m_ppoolgroup->m_pallocator->createø<TYPE >();
84
85
p->m_ppool =
this
;
86
87
pGet = p;
88
89
m_ppoolgroup->ongoing_particle_array()->add(::transfer(p));
90
91
}
92
else
93
{
94
95
auto
p = m_aPool.pop();
96
97
ASSERT(p->m_ppool ==
this
);
98
99
if
(p->m_bNew)
100
{
101
102
p->m_bNew =
false
;
103
104
}
105
106
pGet = p;
107
108
m_ppoolgroup->ongoing_particle_array()->add(::transfer(p));
109
110
}
111
112
return
pGet;
113
114
}
115
116
117
};
118
119
120
121
_synchronous_lock
Definition
synchronous_lock.h:31
ongoing_particle_array_source
Definition
pool.h:9
pool_group
Definition
pool.h:20
prototype
prototype
pool.h
Generated by
1.17.0