acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
cotaskptr.h
1
#pragma once
2
3
4
#include "acme/prototype/string/string.h"
5
6
7
template
<
typename
POINTER_TYPE >
8
class
cotaskptr
9
{
10
public
:
11
12
13
POINTER_TYPE m_p;
14
15
cotaskptr()
16
{
17
18
m_p =
nullptr
;
19
20
}
21
22
23
~cotaskptr()
24
{
25
26
free();
27
28
}
29
30
void
alloc(SIZE_T size)
31
{
32
33
if
(m_p !=
nullptr
)
34
{
35
36
m_p = (POINTER_TYPE) CoTaskMemRealloc(m_p, size);
37
38
}
39
else
40
{
41
42
m_p = (POINTER_TYPE) CoTaskMemAlloc(size);
43
44
}
45
46
}
47
48
bool
is_null()
const
49
{
50
51
return
m_p ==
nullptr
;
52
53
}
54
55
bool
is_set()
const
56
{
57
58
return
m_p !=
nullptr
;
59
60
}
61
62
void
free()
63
{
64
65
if
(m_p !=
nullptr
)
66
{
67
68
::CoTaskMemFree(m_p);
69
70
m_p =
nullptr
;
71
72
}
73
74
}
75
76
77
operator
POINTER_TYPE()
78
{
79
80
return
m_p;
81
82
}
83
84
operator
const
POINTER_TYPE()
const
85
{
86
87
return
m_p;
88
89
}
90
91
92
POINTER_TYPE operator ->()
93
{
94
95
return
m_p;
96
97
}
98
99
100
const
POINTER_TYPE operator ->()
const
101
{
102
103
return
m_p;
104
105
}
106
107
POINTER_TYPE * operator &()
108
{
109
110
free();
111
112
return
&m_p;
113
114
}
115
116
const
POINTER_TYPE * operator &()
const
117
{
118
119
return
&m_p;
120
121
}
122
123
124
};
125
126
127
template
<
typename
POINTER_TYPE >
128
class
sec_cotaskptr :
129
public
cotaskptr < POINTER_TYPE >
130
{
131
public
:
132
133
134
DWORD m_size;
135
136
137
sec_cotaskptr(DWORD size = 0)
138
{
139
140
m_size = size;
141
142
}
143
144
145
~sec_cotaskptr()
146
{
147
148
free();
149
150
}
151
152
using
cotaskptr < POINTER_TYPE > ::alloc;
153
void
alloc()
154
{
155
156
alloc(m_size);
157
158
}
159
160
void
free()
161
{
162
163
if
(this->m_p !=
nullptr
)
164
{
165
166
if
(m_size > 0)
167
{
168
169
SecureZeroMemory(this->m_p, m_size);
170
171
m_size = 0;
172
173
}
174
175
::cotaskptr < POINTER_TYPE > ::free();
176
177
}
178
179
}
180
181
};
182
183
184
185
186
187
188
#define cotaskp(POINTER_TYPE) cotaskptr < POINTER_TYPE >
189
190
191
192
template
<
typename
POINTER_TYPE >
193
inline
auto
as_string(
const
cotaskptr < POINTER_TYPE >&
ptr
)
194
{
195
196
return ::as_string((
const
POINTER_TYPE)
ptr
);
197
198
}
199
200
201
202
//namespace str
203
//{
204
//
205
206
inline
ansi_string& assign(ansi_string& ansistrDst,
const
cotaskptr < PWSTR >& pwidesz)
207
{
208
209
ansistrDst.assign(pwidesz.operator
const
PWSTR());
210
211
return
ansistrDst;
212
213
}
214
215
216
inline
wide_string& assign(wide_string& widestrDst,
const
cotaskptr < PSTR >& pansisz)
217
{
218
219
widestrDst.assign(pansisz.operator
const
PSTR());
220
221
return
widestrDst;
222
223
}
224
225
226
inline
ansi_string& assign(ansi_string& ansistrDst,
const
cotaskptr < PSTR >& pansisz)
227
{
228
229
ansistrDst.assign(pansisz.operator
const
PSTR());
230
231
return
ansistrDst;
232
233
}
234
235
236
inline
wide_string& assign(wide_string& widestrDst,
const
cotaskptr < PWSTR >& pwidesz)
237
{
238
239
widestrDst.assign(pwidesz.operator
const
PWSTR());
240
241
return
widestrDst;
242
243
}
244
//
245
//
246
//} // namespace str
247
248
249
ptr
Definition
ptr.h:18
operating_system
windows_common
com
cotaskptr.h
Generated by
1.17.0