acme
Foundational cross-platform layer of the ca2 framework
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
38class subparticle;
39
40
41#if REFERENCING_DEBUGGING
42
43class reference_referer;
44struct reference_count_debug_item;
45class reference_count_debug;
46CLASS_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; }
160CLASS_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
208CLASS_DECL_ACME ::reference_referer* refdbg_get_top_referer();
209CLASS_DECL_ACME ::subparticle* refdbg_get_track_allocation();
210CLASS_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
326class __new_site;
327class __delete_site;
328class __raw_new_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
Definition reference_referer.h:424
Definition reference_referer.h:359
Definition reference_referer.h:196
Definition reference_referer.h:285
Definition subparticle.h:78