Sun, 22 Dec 2024 22:10:04 +0100
don't trust that size_t always has word width
it should be the case on all platforms supported by UCX, but it's not strictly defined in POSIX that it must be the case
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | */ |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | /** |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | * \file collection.h |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
30 | * \brief Common definitions for various collection implementations. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | * \author Mike Becker |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | * \author Olaf Wintermann |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | * \copyright 2-Clause BSD License |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | */ |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | #ifndef UCX_COLLECTION_H |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | #define UCX_COLLECTION_H |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | #include "allocator.h" |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | #include "iterator.h" |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
41 | #include "compare.h" |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | #ifdef __cplusplus |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | extern "C" { |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | #endif |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | /** |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | * Special constant used for creating collections that are storing pointers. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | */ |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | #define CX_STORE_POINTERS 0 |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | /** |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
53 | * Base attributes of a collection. |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | */ |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
55 | struct cx_collection_s { |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
56 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
57 | * The allocator to use. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
58 | */ |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
857
diff
changeset
|
59 | const CxAllocator *allocator; |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
60 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
61 | * The comparator function for the elements. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
62 | */ |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
63 | cx_compare_func cmpfunc; |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
64 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
65 | * The size of each element. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
66 | */ |
855
35bcb3216c0d
fix inconsistent use of item_size and elem_size
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
67 | size_t elem_size; |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
68 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
69 | * The number of currently stored elements. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
70 | */ |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
71 | size_t size; |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
72 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
73 | * An optional simple destructor for the collection's elements. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
74 | * |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
75 | * @attention Read the documentation of the particular collection implementation |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
76 | * whether this destructor shall only destroy the contents or also free the memory. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
77 | */ |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
78 | cx_destructor_func simple_destructor; |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
79 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
80 | * An optional advanced destructor for the collection's elements. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
81 | * |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
82 | * @attention Read the documentation of the particular collection implementation |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
83 | * whether this destructor shall only destroy the contents or also free the memory. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
84 | */ |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
85 | cx_destructor_func2 advanced_destructor; |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
86 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
87 | * The pointer to additional data that is passed to the advanced destructor. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
88 | */ |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
89 | void *destructor_data; |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
90 | /** |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
91 | * Indicates if this list is supposed to store pointers |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
92 | * instead of copies of the actual objects. |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
93 | */ |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
94 | bool store_pointer; |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
786
diff
changeset
|
95 | }; |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
96 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
97 | /** |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
98 | * Use this macro to declare common members for a collection structure. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
99 | */ |
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
100 | #define CX_COLLECTION_BASE struct cx_collection_s collection |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
101 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
102 | /** |
857
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
103 | * Sets a simple destructor function for this collection. |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
104 | * |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
105 | * @param c the collection |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
106 | * @param destr the destructor function |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
107 | */ |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
108 | #define cxDefineDestructor(c, destr) \ |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
109 | (c)->collection.simple_destructor = (cx_destructor_func) destr |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
110 | |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
111 | /** |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
112 | * Sets a simple destructor function for this collection. |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
113 | * |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
114 | * @param c the collection |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
115 | * @param destr the destructor function |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
116 | */ |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
117 | #define cxDefineAdvancedDestructor(c, destr, data) \ |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
118 | (c)->collection.advanced_destructor = (cx_destructor_func2) destr; \ |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
119 | (c)->collection.destructor_data = data |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
120 | |
4d12e34bb130
add missing convenience functions
Mike Becker <universe@uap-core.de>
parents:
856
diff
changeset
|
121 | /** |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
122 | * Invokes the simple destructor function for a specific element. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
123 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
124 | * Usually only used by collection implementations. There should be no need |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
125 | * to invoke this macro manually. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
126 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
127 | * @param c the collection |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
128 | * @param e the element |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
129 | */ |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
130 | #define cx_invoke_simple_destructor(c, e) \ |
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
131 | (c)->collection.simple_destructor((c)->collection.store_pointer ? (*((void **) (e))) : (e)) |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
132 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
133 | /** |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
134 | * Invokes the advanced destructor function for a specific element. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
135 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
136 | * Usually only used by collection implementations. There should be no need |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
137 | * to invoke this macro manually. |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
138 | * |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
139 | * @param c the collection |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
140 | * @param e the element |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
141 | */ |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
142 | #define cx_invoke_advanced_destructor(c, e) \ |
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
143 | (c)->collection.advanced_destructor((c)->collection.destructor_data, \ |
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
144 | (c)->collection.store_pointer ? (*((void **) (e))) : (e)) |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
145 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
146 | |
712
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
147 | /** |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
148 | * Invokes all available destructor functions for a specific element. |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
149 | * |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
150 | * Usually only used by collection implementations. There should be no need |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
151 | * to invoke this macro manually. |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
152 | * |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
153 | * @param c the collection |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
154 | * @param e the element |
cff828e156a9
add missing docs for cx_invoke_destructor()
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
155 | */ |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
156 | #define cx_invoke_destructor(c, e) \ |
856
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
157 | if ((c)->collection.simple_destructor) cx_invoke_simple_destructor(c,e); \ |
6bbbf219251d
fix name of collection base member (to avoid base.base)
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
158 | if ((c)->collection.advanced_destructor) cx_invoke_advanced_destructor(c,e) |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
159 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
160 | #ifdef __cplusplus |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
161 | } // extern "C" |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
162 | #endif |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | |
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
164 | #endif // UCX_COLLECTION_H |