acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
_referencing_debugging.h
1
//
2
// reference_count_debug.h
3
// acme
4
//
5
// Created by Camilo Sasuke Thomas Borregaard Soerensen on 20/06/20.
6
// More work on 2023-11-22 12:47 <3ThomasBorregaardSorensen
7
//
8
#pragma once
9
10
32
33
34
#define __FILE_LINE__ __FILE__ "(" MAKE_STRING(__LINE__) ")"
35
#define __FUNCTION_LINE__ __FUNCTION__, " (" MAKE_STRING(__LINE__) ")"
36
#define __FUNCTION_FILE_LINE__ __FUNCTION__, __FILE__ "(" MAKE_STRING(__LINE__) ")"
37
38
class
subparticle
;
39
40
41
#if REFERENCING_DEBUGGING
42
43
class
reference_referer;
44
struct
reference_count_debug_item;
45
class
reference_count_debug;
46
CLASS_DECL_ACME::subparticle * refdbg_this();
47
48
#define REFDBG_THIS(p) auto refdbg_this = [p]() { return p; }
49
50
//#define createø __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->template __call__create
51
//#define constructø __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct
52
//#define øcreate_by_type __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__id_create
53
//#define create_newø __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->template __call__create_new
54
//#define øconstruct_by_type __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__id_construct
55
//#define øraw_construct __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__raw_construct
56
//#define construct_newø __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_new
57
//#define defer_constructø __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__defer_construct
58
//#define øcreate_new_clone __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_new_clone
59
//#define defer_construct_newø __call__add_referer2({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ })->__calldefer_construct_newø
60
61
#define createø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->template __call__create
62
#define constructø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct
63
#define create_newø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->template __call__create_new
64
#define emplace_newø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__emplace_new
65
//#define øcreate_by_type __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_by_type
66
#define øraw_construct __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__raw_construct
67
#define construct_newø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_new
68
#define defer_constructø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__defer_construct
69
//#define øconstruct_by_type __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_by_type
70
#define øcreate_new_clone __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_new_clone
71
//#define raw_construct_newø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__raw_construct_new
72
//#define øcreate_by_typeid __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_by_typeid
73
//#define forward_constructø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__forward_construct
74
#define defer_construct_newø __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__calldefer_construct_newø
75
//#define øconstruct_by_typeid __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_by_typeid
76
#define ødefer_raw_construct_new __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__defer_raw_construct_new
77
78
79
#define øconstruct_by_ipair __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_by_ipair
80
#define øconstruct_by_custom_id __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_by_custom_id
81
#define øconstruct_by_type __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__construct_by_type
82
83
84
#define øcreate_by_ipair __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_by_ipair
85
#define øcreate_by_custom_id __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_by_custom_id
86
#define øcreate_by_type __call__add_referer2({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__create_by_type
87
88
89
//#define __raw_construct_new(C) __construct_site(C, { refdbg_this(), __FUNCTION_FILE_LINE__ })
90
91
92
//#define __new__prefix(x) __call__add_referer({ refdbg_this(), __FUNCTION_FILE_LINE__ }, &prefererNew)->
93
94
95
96
97
//#define __new__prefix(pprefererGet) __new_site({ nullptr, refdbg_this(), __FUNCTION_FILE_LINE__ }, pprefererGet) <<
98
#define __new__prefix(pprefererGet) __new_site({ refdbg_this(), __FUNCTION_FILE_LINE__ }, pprefererGet) <<
99
100
101
102
//#define ___new __call__add_referer({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__call__new
103
//#define allocateø __call__add_referer({ refdbg_this(), __FUNCTION_FILE_LINE__ })->__callallocateø
104
//#define allocateø __call__add_referer({ refdbg_this(), __FUNCTION_FILE_LINE__ })
105
106
//#define __refdbg_function_file_line_for__(p) { p, refdbg_this(), __FUNCTION_FILE_LINE__ }
107
//#define __comma_refdbg_function_file_line_for__(p) , __refdbg_function_file_line_for__(p)
108
//
109
//#define __refdbg_function_file_line__ __refdbg_function_file_line_for__(nullptr)
110
//#define __comma_refdbg_function_file_line__ __comma_refdbg_function_file_line_for__(nullptr)
111
//
112
//#define __refdbg_function_file_line_for__preferernew(p) __refdbg_function_file_line_for__(p), &prefererNew
113
//#define __comma_refdbg_function_file_line_for__preferernew(p) , __refdbg_function_file_line_for__preferernew(p)
114
//
115
//#define __refdbg_function_file_line__preferernew __refdbg_function_file_line_for__preferernew(nullptr)
116
//#define __comma_refdbg_function_file_line__preferernew , __refdbg_function_file_line_for__preferernew(nullptr)
117
//
118
//#define __refdbg_call_add_referer_for(p) __call__add_referer({ p, refdbg_this(), __FUNCTION_FILE_LINE__ }) <<
119
//#define __refdbg_call_add_referer __refdbg_call_add_referer_for(nullptr) <<
120
121
122
#define __refdbg_function_file_line_for__(p) { refdbg_this(), __FUNCTION_FILE_LINE__ }
123
#define __comma_refdbg_function_file_line_for__(p) , __refdbg_function_file_line_for__(p)
124
125
#define __refdbg_function_file_line__ __refdbg_function_file_line_for__(nullptr)
126
#define __comma_refdbg_function_file_line__ __comma_refdbg_function_file_line_for__(nullptr)
127
128
#define __refdbg_function_file_line_for__preferernew(p) __refdbg_function_file_line_for__(p), &prefererNew
129
#define __comma_refdbg_function_file_line_for__preferernew(p) , __refdbg_function_file_line_for__preferernew(p)
130
131
#define __refdbg_function_file_line__preferernew __refdbg_function_file_line_for__preferernew(nullptr)
132
#define __comma_refdbg_function_file_line__preferernew , __refdbg_function_file_line_for__preferernew(nullptr)
133
134
#define __refdbg_call_add_referer_for(p) __call__add_referer({ p, refdbg_this(), __FUNCTION_FILE_LINE__ }) <<
135
#define __refdbg_call_add_referer __refdbg_call_add_referer_for(nullptr) <<
136
137
138
#define __fn_refdbg_referer__ refdbg_referer()
139
140
#define __refdbg_referer__ referer
141
142
#define __comma_refdbg_m_preferer__ , m_preferer
143
#define __comma_refdbg_preferer__ , preferer
144
145
#define __raw_construct_new(C) __construct_site(C __comma_refdbg_function_file_line__)
146
147
148
#define __check_refdbg check_refdbg();
149
150
//#define __refdbg_add_referer ::allocator::push_referer({nullptr, refdbg_this(), __FUNCTION_FILE_LINE__});
151
//#define __refdbg_add_referer_for(p) ::allocator::defer_push_referer(p, {p, refdbg_this(), __FUNCTION_FILE_LINE__});
152
//#define __refdbg_assign_referer_for(p) m_preferer = ::allocator::defer_push_referer(p, {p, refdbg_this(), __FUNCTION_FILE_LINE__});
153
//#define __refdbg_add_releaser(preferer) ::allocator::add_releaser(preferer);
154
155
#define __refdbg_add_referer ::allocator::push_referer({refdbg_this(), __FUNCTION_FILE_LINE__});
156
#define __refdbg_add_referer_for(p) ::allocator::defer_push_referer(p, {refdbg_this(), __FUNCTION_FILE_LINE__});
157
#define __refdbg_assign_referer_for(p) m_preferer = ::allocator::defer_push_referer(p, {refdbg_this(), __FUNCTION_FILE_LINE__});
158
#define __refdbg_add_releaser(preferer) ::allocator::add_releaser(preferer);
159
#define __refdbg_this(pparticle) auto refdbg_this= [pparticle]() { return pparticle; }
160
CLASS_DECL_ACME
void
check_refdbg();
161
162
163
//#define REFERENCING_DEBUGGING_MAX_COUNT 256
164
//#define referer
165
//#define ,
166
#define REF_DBG_POINTER nullptr
167
#define REF_DBG_VAR nullptr
168
#define REF_DBG_COMMA_POINTER , REF_DBG_POINTER
169
//#define const reference_referer & referer
170
//#define const reference_referer & referer = nullptr
171
//#define ,
172
//#define ,
173
#define REFERENCING_DEBUGGING_ARGUMENTS referer
174
#define COMMA_REFERENCING_DEBUGGING_ARGUMENTS , REFERENCING_DEBUGGING_ARGUMENTS
175
#define REFERENCING_DEBUGGING_ARGUMENTS_COMMA REFERENCING_DEBUGGING_ARGUMENTS ,
176
#define REFERENCING_DEBUGGING_PARAMETERS_DEFINITION const ::reference_referer & referer
177
#define COMMA_REFERENCING_DEBUGGING_PARAMETERS_DEFINITION , REFERENCING_DEBUGGING_PARAMETERS_DEFINITION
178
#define REFERENCING_DEBUGGING_PARAMETERS_DECLARATION REFERENCING_DEBUGGING_PARAMETERS_DEFINITION = nullptr
179
#define COMMA_REFERENCING_DEBUGGING_PARAMETERS_DECLARATION , REFERENCING_DEBUGGING_PARAMETERS_DECLARATION
180
#define REFERENCING_DEBUGGING_PARAMETERS_DEFINITION2 ,
181
#define REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DEFINITION ::reference_referer * preferer
182
#define COMMA_REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DEFINITION , REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DEFINITION
183
#define REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DECLARATION REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DEFINITION = nullptr
184
#define COMMA_REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DECLARATION , REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DECLARATION
185
#define REFERENCING_DEBUGGING_COMMA_NOTE(note) , {nullptr, note}
186
#define REFERENCING_DEBUGGING_P(ptr) ptr
187
#define REFERENCING_DEBUGGING_COMMA_P(ptr) , REFERENCING_DEBUGGING_P(ptr)
188
//#define (this)
189
#define REFERENCING_DEBUGGING_COMMA_THIS ,
190
#define REFERENCING_DEBUGGING_WILD_NOTE(note) {nullptr, note}
191
#define REFERENCING_DEBUGGING_WILD_FUNCTION_FILE_LINE REFERENCING_DEBUGGING_WILD_NOTE( __FUNCTION_FILE_LINE__ )
192
#define REFERENCING_DEBUGGING_COMMA_WILD_NOTE(note) , REFERENCING_DEBUGGING_WILD_NOTE(note)
193
#define REFERENCING_DEBUGGING_COMMA_WILD_FUNCTION_FILE_LINE , REFERENCING_DEBUGGING_WILD_FUNCTION_FILE_LINE
194
#define REFERENCING_DEBUGGING_THIS_NOTE(note) {this, note}
195
#define REFERENCING_DEBUGGING_THIS_FUNCTION_FILE_LINE REFERENCING_DEBUGGING_THIS_NOTE( __FUNCTION_FILE_LINE__ )
196
#define REFERENCING_DEBUGGING_COMMA_THIS_NOTE(note) , REFERENCING_DEBUGGING_THIS_NOTE(note)
197
#define REFERENCING_DEBUGGING_COMMA_THIS_FUNCTION_FILE_LINE , REFERENCING_DEBUGGING_THIS_FUNCTION_FILE_LINE
198
#define REFERENCING_DEBUGGING_P_FUNCTION_NOTE(p, function, note) {p, function, note}
199
#define REFERENCING_DEBUGGING_P_FUNCTION_FILE_LINE(p) REFERENCING_DEBUGGING_P_FUNCTION_NOTE(p, __FUNCTION_FILE_LINE__ )
200
#define REFERENCING_DEBUGGING_COMMA_P_FUNCTION_NOTE(p, function, note) , REFERENCING_DEBUGGING_P_FUNCTION_NOTE(p, function, note)
201
#define REFERENCING_DEBUGGING_COMMA_P_FUNCTION_FILE_LINE(p) REFERENCING_DEBUGGING_COMMA_P_NOTE(p, __FUNCTION_FILE_LINE__ )
202
#define tracking_assign(target, ...) reference_count_debug_assign(target, __VA_ARGS__ )
203
#define tracking_note_assign(target, source, ... ) reference_count_debug_assign(target, source, __VA_ARGS__ )
204
#define tracking_named_release(...) reference_count_debug_release( __VA_ARGS__ )
205
#define tracking_check_pending_releases(x) x->check_pending_releases()
206
207
208
CLASS_DECL_ACME ::reference_referer* refdbg_get_top_referer();
209
CLASS_DECL_ACME ::subparticle* refdbg_get_track_allocation();
210
CLASS_DECL_ACME ::reference_referer* refdbg_get_top_releaser();
211
212
213
#else
214
215
216
#define REFDBG_THIS(p)
217
219
#define createø __call__create
220
#define constructø __call__construct
221
#define create_newø __call__create_new
222
#define emplace_newø __call__emplace_new
223
#define øraw_construct __call__raw_construct
224
#define construct_newø __call__construct_new
225
#define defer_constructø __call__defer_construct
226
#define øcreate_new_clone __call__create_new_clone
227
//#define raw_construct_newø __call__raw_construct_new
228
//#define forward_constructø __call__forward_construct
229
#define defer_construct_newø __calldefer_construct_newø
230
#define ødefer_raw_construct_new __call__defer_raw_construct_new
231
232
233
#define øconstruct_by_ipair __call__construct_by_ipair
234
#define øconstruct_by_custom_id __call__construct_by_custom_id
235
#define øconstruct_by_type __call__construct_by_type
236
237
238
#define øcreate_by_ipair __call__create_by_ipair
239
#define øcreate_by_custom_id __call__create_by_custom_id
240
#define øcreate_by_type __call__create_by_type
241
242
243
#define øallocate__prefix(x)
244
//#define allocateø __callallocateø
245
//#define allocateø __callallocateø
246
//#define øallocate_and_initialize __calløallocate_and_initialize
247
//#define __delete __call__delete
248
249
//#define construct_newø(p) __call__construct_new(p)
250
#define __new__prefix(pprefererGet) __new_site() <<
251
252
#define __refdbg_function_file_line__
253
#define __comma_refdbg_function_file_line__
254
255
#define __refdbg_function_file_line__preferernew
256
#define __comma_refdbg_function_file_line__preferernew
257
258
#define __refdbg_call_add_referer
259
260
#define __fn_refdbg_referer__
261
262
#define __refdbg_referer__
263
264
#define __comma_refdbg_m_preferer__
265
#define __comma_refdbg_preferer__
266
267
268
#define __raw_construct_new(C) __call__raw_construct_new(C)
269
270
271
#define __check_refdbg
272
273
#define __refdbg_add_referer
274
#define __refdbg_add_referer_for(p)
275
#define __refdbg_assign_referer_for(p)
276
#define __refdbg_add_releaser(preferer)
277
#define __refdbg_this(pparticle)
278
//#define
279
//#define
280
//#define
281
//#define
282
//#define
283
//#define
284
#define REFERENCING_DEBUGGING_ARGUMENTS
285
#define COMMA_REFERENCING_DEBUGGING_ARGUMENTS
286
#define REFERENCING_DEBUGGING_ARGUMENTS_COMMA
287
#define REFERENCING_DEBUGGING_PARAMETERS_DEFINITION
288
#define COMMA_REFERENCING_DEBUGGING_PARAMETERS_DEFINITION
289
#define REFERENCING_DEBUGGING_PARAMETERS_DECLARATION
290
#define COMMA_REFERENCING_DEBUGGING_PARAMETERS_DECLARATION
291
#define REFERENCING_DEBUGGING_PARAMETERS_DEFINITION2
292
#define REFERENCING_DEBUGGING_COMMA_NOTE(note)
293
#define REFERENCING_DEBUGGING_P(ptr)
294
#define REFERENCING_DEBUGGING_COMMA_P(ptr)
295
//#define (this)
296
#define REFERENCING_DEBUGGING_COMMA_THIS
297
#define REFERENCING_DEBUGGING_WILD_NOTE(note)
298
#define REFERENCING_DEBUGGING_WILD_FUNCTION_FILE_LINE
299
#define REFERENCING_DEBUGGING_COMMA_WILD_NOTE(note)
300
#define REFERENCING_DEBUGGING_COMMA_WILD_FUNCTION_FILE_LINE
301
#define REFERENCING_DEBUGGING_THIS_NOTE(note)
302
#define REFERENCING_DEBUGGING_THIS_FUNCTION_FILE_LINE
303
#define REFERENCING_DEBUGGING_COMMA_THIS_NOTE(note)
304
#define REFERENCING_DEBUGGING_COMMA_THIS_FUNCTION_FILE_LINE
305
#define REFERENCING_DEBUGGING_P_FUNCTION_NOTE(p, function, note)
306
#define REFERENCING_DEBUGGING_P_FUNCTION_FILE_LINE(p)
307
#define REFERENCING_DEBUGGING_COMMA_P_FUNCTION_NOTE(p, function, note)
308
#define REFERENCING_DEBUGGING_COMMA_P_FUNCTION_FILE_LINE(p)
309
#define REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DEFINITION
310
#define COMMA_REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DEFINITION
311
#define REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DECLARATION
312
#define COMMA_REFERENCING_DEBUGGING_RELEASER_PARAMETERS_DECLARATION
313
#define tracking_assign(target, source) target = source
314
#define tracking_note_assign(target, source, note) target = source
315
#define tracking_named_release(x) ::release(x)
316
#define tracking_check_pending_releases(x)
317
318
319
#define __refdbg_call_add_referer
320
321
#define __refdbg_function_file_line__
322
323
#endif
324
325
326
class
__new_site
;
327
class
__delete_site
;
328
class
__raw_new_site
;
329
class
__new_refdbg_continuation_site
;
330
331
332
#define ___new __new_site ( __refdbg_function_file_line__ ) << new
333
#define __delete delete __delete_site(__refdbg_referer__) <<
334
335
336
#define øraw_new __raw_new_site() << new
337
338
339
#define __new_refdbg_continuation __new_refdbg_continuation_site() << new
340
341
//#define øraw_new new
342
343
344
345
346
//CLASS_DECL_ACME abc __call__add_referer(const ::reference_referer& referer, ::reference_referer** ppreferer);
347
348
__delete_site
Definition
reference_referer.h:424
__new_refdbg_continuation_site
Definition
reference_referer.h:359
__new_site
Definition
reference_referer.h:196
__raw_new_site
Definition
reference_referer.h:285
subparticle
Definition
subparticle.h:78
platform
_referencing_debugging.h
Generated by
1.17.0