Fri, 23 May 2025 12:44:24 +0200
make test-compile depend on both static and shared
the shared lib is not needed for the tests,
but when run with coverage, gcov will be confused
when outdated line information is available from
a previous shared build
606 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | * | |
4 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. | |
5 | * | |
6 | * Redistribution and use in source and binary forms, with or without | |
7 | * modification, are permitted provided that the following conditions are met: | |
8 | * | |
9 | * 1. Redistributions of source code must retain the above copyright | |
10 | * notice, this list of conditions and the following disclaimer. | |
11 | * | |
12 | * 2. Redistributions in binary form must reproduce the above copyright | |
13 | * notice, this list of conditions and the following disclaimer in the | |
14 | * documentation and/or other materials provided with the distribution. | |
15 | * | |
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
26 | * POSSIBILITY OF SUCH DAMAGE. | |
27 | */ | |
28 | /** | |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
29 | * @file array_list.h |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
30 | * @brief Array list implementation. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
31 | * @author Mike Becker |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
32 | * @author Olaf Wintermann |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
33 | * @copyright 2-Clause BSD License |
606 | 34 | */ |
35 | ||
36 | ||
37 | #ifndef UCX_ARRAY_LIST_H | |
38 | #define UCX_ARRAY_LIST_H | |
39 | ||
617
cec11387c1be
fix include in array_list.h
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
612
diff
changeset
|
40 | #include "list.h" |
606 | 41 | |
42 | #ifdef __cplusplus | |
43 | extern "C" { | |
44 | #endif | |
45 | ||
46 | /** | |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
47 | * The maximum item size in an array list that fits into stack buffer |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
48 | * when swapped. |
804
5136f2fc32ec
add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents:
795
diff
changeset
|
49 | */ |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
50 | cx_attr_export |
926
8fdd8d78c14b
fix several survivors of east-const and some missing consts
Mike Becker <universe@uap-core.de>
parents:
891
diff
changeset
|
51 | extern const unsigned cx_array_swap_sbo_size; |
804
5136f2fc32ec
add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents:
795
diff
changeset
|
52 | |
5136f2fc32ec
add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents:
795
diff
changeset
|
53 | /** |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
54 | * Declares variables for an array that can be used with the convenience macros. |
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
55 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
56 | * @par Examples |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
57 | * @code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
58 | * // integer array with at most 255 elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
59 | * CX_ARRAY_DECLARE_SIZED(int, myarray, uint8_t) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
60 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
61 | * // array of MyObject* pointers where size and capacity are stored as unsigned int |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
62 | * CX_ARRAY_DECLARE_SIZED(MyObject*, objects, unsigned int) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
63 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
64 | * // initializing code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
65 | * cx_array_initialize(myarray, 16); // reserve space for 16 |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
66 | * cx_array_initialize(objects, 100); // reserve space for 100 |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
67 | * @endcode |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
68 | * |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
69 | * @param type the type of the data |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
70 | * @param name the name of the array |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
71 | * @param size_type the type of the size (should be uint8_t, uint16_t, uint32_t, or size_t) |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
72 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
73 | * @see cx_array_initialize() |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
74 | * @see cx_array_simple_add() |
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
75 | * @see cx_array_simple_copy() |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
76 | * @see cx_array_simple_add_sorted() |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
77 | * @see cx_array_simple_insert_sorted() |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
78 | */ |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
79 | #define CX_ARRAY_DECLARE_SIZED(type, name, size_type) \ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
80 | type * name; \ |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
81 | /** Array size. */ size_type name##_size; \ |
1010
2d252c1c1d5d
add fake doc to mute doxygen complaints
Mike Becker <universe@uap-core.de>
parents:
999
diff
changeset
|
82 | /** Array capacity. */ size_type name##_capacity |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
83 | |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
84 | /** |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
85 | * Declares variables for an array that can be used with the convenience macros. |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
86 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
87 | * The size and capacity variables will have @c size_t type. |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
88 | * Use #CX_ARRAY_DECLARE_SIZED() to specify a different type. |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
89 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
90 | * @par Examples |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
91 | * @code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
92 | * // int array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
93 | * CX_ARRAY_DECLARE(int, myarray) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
94 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
95 | * // initializing code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
96 | * cx_array_initialize(myarray, 32); // reserve space for 32 |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
97 | * @endcode |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
98 | * |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
99 | * @param type the type of the data |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
100 | * @param name the name of the array |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
101 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
102 | * @see cx_array_initialize() |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
103 | * @see cx_array_simple_add() |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
104 | * @see cx_array_simple_copy() |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
105 | * @see cx_array_simple_add_sorted() |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
106 | * @see cx_array_simple_insert_sorted() |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
107 | */ |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
108 | #define CX_ARRAY_DECLARE(type, name) CX_ARRAY_DECLARE_SIZED(type, name, size_t) |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
109 | |
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
110 | /** |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
111 | * Initializes an array with the given capacity. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
112 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
113 | * The type of the capacity depends on the type used during declaration. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
114 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
115 | * @par Examples |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
116 | * @code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
117 | * CX_ARRAY_DECLARE_SIZED(int, arr1, uint8_t) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
118 | * CX_ARRAY_DECLARE(int, arr2) // size and capacity are implicitly size_t |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
119 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
120 | * // initializing code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
121 | * cx_array_initialize(arr1, 500); // error: maximum for uint8_t is 255 |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
122 | * cx_array_initialize(arr2, 500); // OK |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
123 | * @endcode |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
124 | * |
832
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
125 | * |
1318
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
126 | * The memory for the array is allocated with the cxDefaultAllocator. |
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
127 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
128 | * @param array the name of the array |
832
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
129 | * @param capacity the initial capacity |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
130 | * @see cx_array_initialize_a() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
131 | * @see CX_ARRAY_DECLARE_SIZED() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
132 | * @see CX_ARRAY_DECLARE() |
832
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
133 | */ |
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
134 | #define cx_array_initialize(array, capacity) \ |
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
135 | array##_capacity = capacity; \ |
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
136 | array##_size = 0; \ |
1319
aa1f580f8f59
add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents:
1318
diff
changeset
|
137 | array = cxMallocDefault(sizeof(array[0]) * capacity) |
832
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
138 | |
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
139 | /** |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
140 | * Initializes an array with the given capacity using the specified allocator. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
141 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
142 | * @par Example |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
143 | * @code |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
144 | * CX_ARRAY_DECLARE(int, myarray) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
145 | * |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
146 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
147 | * const CxAllocator *al = // ... |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
148 | * cx_array_initialize_a(al, myarray, 128); |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
149 | * // ... |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
150 | * cxFree(al, myarray); // don't forget to free with same allocator |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
151 | * @endcode |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
152 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
153 | * @param allocator (@c CxAllocator*) the allocator |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
154 | * @param array the name of the array |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
155 | * @param capacity the initial capacity |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
156 | * @see cx_array_initialize() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
157 | * @see CX_ARRAY_DECLARE_SIZED() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
158 | * @see CX_ARRAY_DECLARE() |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
159 | */ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
160 | #define cx_array_initialize_a(allocator, array, capacity) \ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
161 | array##_capacity = capacity; \ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
162 | array##_size = 0; \ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
163 | array = cxMalloc(allocator, sizeof(array[0]) * capacity) |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
164 | |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
165 | /** |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
166 | * Defines a reallocation mechanism for arrays. |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
167 | * You can create your own, use cx_array_reallocator(), or |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
168 | * use the #cx_array_default_reallocator. |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
169 | */ |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
170 | struct cx_array_reallocator_s { |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
171 | /** |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
172 | * Reallocates space for the given array. |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
173 | * |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
174 | * Implementations are not required to free the original array. |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
175 | * This allows reallocation of static memory by allocating heap memory |
795
00ba1bfa4ab4
fix documentation of reallocator struct
Mike Becker <universe@uap-core.de>
parents:
763
diff
changeset
|
176 | * and copying the array contents. The information in the custom fields of |
00ba1bfa4ab4
fix documentation of reallocator struct
Mike Becker <universe@uap-core.de>
parents:
763
diff
changeset
|
177 | * the referenced allocator can be used to track the state of the memory |
00ba1bfa4ab4
fix documentation of reallocator struct
Mike Becker <universe@uap-core.de>
parents:
763
diff
changeset
|
178 | * or to transport other additional data. |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
179 | * |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
180 | * @param array the array to reallocate |
1322
7be10b57f658
fix critical memory overflow in the stack-based array reallocator
Mike Becker <universe@uap-core.de>
parents:
1319
diff
changeset
|
181 | * @param old_capacity the old number of elements |
7be10b57f658
fix critical memory overflow in the stack-based array reallocator
Mike Becker <universe@uap-core.de>
parents:
1319
diff
changeset
|
182 | * @param new_capacity the new number of elements |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
183 | * @param elem_size the size of each element |
609
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
184 | * @param alloc a reference to this allocator |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
185 | * @return a pointer to the reallocated memory or @c NULL on failure |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
186 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
187 | cx_attr_nodiscard |
1322
7be10b57f658
fix critical memory overflow in the stack-based array reallocator
Mike Becker <universe@uap-core.de>
parents:
1319
diff
changeset
|
188 | cx_attr_nonnull_arg(5) |
7be10b57f658
fix critical memory overflow in the stack-based array reallocator
Mike Becker <universe@uap-core.de>
parents:
1319
diff
changeset
|
189 | cx_attr_allocsize(3, 4) |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
190 | void *(*realloc)( |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
191 | void *array, |
1322
7be10b57f658
fix critical memory overflow in the stack-based array reallocator
Mike Becker <universe@uap-core.de>
parents:
1319
diff
changeset
|
192 | size_t old_capacity, |
7be10b57f658
fix critical memory overflow in the stack-based array reallocator
Mike Becker <universe@uap-core.de>
parents:
1319
diff
changeset
|
193 | size_t new_capacity, |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
194 | size_t elem_size, |
609
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
195 | struct cx_array_reallocator_s *alloc |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
196 | ); |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
197 | |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
198 | /** |
609
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
199 | * Custom data pointer. |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
200 | */ |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
201 | void *ptr1; |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
202 | /** |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
203 | * Custom data pointer. |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
204 | */ |
609
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
205 | void *ptr2; |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
206 | /** |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
207 | * Custom data integer. |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
208 | */ |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
209 | size_t int1; |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
210 | /** |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
211 | * Custom data integer. |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
212 | */ |
6ae8146d9f62
more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents:
608
diff
changeset
|
213 | size_t int2; |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
214 | }; |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
215 | |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
216 | /** |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
217 | * Typedef for the array reallocator struct. |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
218 | */ |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
219 | typedef struct cx_array_reallocator_s CxArrayReallocator; |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
220 | |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
221 | /** |
1318
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
222 | * A default array reallocator that is based on the cxDefaultAllocator. |
817
949908c97474
add cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
807
diff
changeset
|
223 | */ |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
224 | cx_attr_export |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
225 | extern CxArrayReallocator *cx_array_default_reallocator; |
817
949908c97474
add cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
807
diff
changeset
|
226 | |
949908c97474
add cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
807
diff
changeset
|
227 | /** |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
228 | * Creates a new array reallocator. |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
229 | * |
1318
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
230 | * When @p allocator is @c NULL, the cxDefaultAllocator will be used. |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
231 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
232 | * When @p stackmem is not @c NULL, the reallocator is supposed to be used |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
233 | * @em only for the specific array that is initially located at @p stackmem. |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
234 | * When reallocation is needed, the reallocator checks, if the array is |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
235 | * still located at @p stackmem and copies the contents to the heap. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
236 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
237 | * @note Invoking this function with both arguments @c NULL will return a |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
238 | * reallocator that behaves like #cx_array_default_reallocator. |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
239 | * |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
240 | * @param allocator the allocator this reallocator shall be based on |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
241 | * @param stackmem the address of the array when the array is initially located |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
242 | * on the stack or shall not reallocated in place |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
243 | * @return an array reallocator |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
244 | */ |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
245 | cx_attr_export |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
246 | CxArrayReallocator cx_array_reallocator( |
953
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
247 | const struct cx_allocator_s *allocator, |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
248 | const void *stackmem |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
249 | ); |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
250 | |
581ad4fd01e9
add function to create array reallocator that can move arrays from stack to heap
Mike Becker <universe@uap-core.de>
parents:
926
diff
changeset
|
251 | /** |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
252 | * Reserves memory for additional elements. |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
253 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
254 | * This function checks if the @p capacity of the array is sufficient to hold |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
255 | * at least @p size plus @p elem_count elements. If not, a reallocation is |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
256 | * performed with the specified @p reallocator. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
257 | * You can create your own reallocator by hand, use #cx_array_default_reallocator, |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
258 | * or use the convenience function cx_array_reallocator() to create a custom reallocator. |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
259 | * |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
260 | * This function can be useful to replace subsequent calls to cx_array_copy() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
261 | * with one single cx_array_reserve() and then - after guaranteeing a |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
262 | * sufficient capacity - use simple memmove() or memcpy(). |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
263 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
264 | * The @p width in bytes refers to the size and capacity. |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
265 | * Both must have the same width. |
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
266 | * Supported are 0, 1, 2, and 4, as well as 8 if running on a 64 bit |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
267 | * architecture. If set to zero, the native word width is used. |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
268 | * |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
269 | * @param array a pointer to the target array |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
270 | * @param size a pointer to the size of the array |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
271 | * @param capacity a pointer to the capacity of the array |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
272 | * @param width the width in bytes for the @p size and @p capacity or zero for default |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
273 | * @param elem_size the size of one element |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
274 | * @param elem_count the number of expected additional elements |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
275 | * @param reallocator the array reallocator to use |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
276 | * (@c NULL defaults to #cx_array_default_reallocator) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
277 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
278 | * @retval non-zero failure |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
279 | * @see cx_array_reallocator() |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
280 | */ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
281 | cx_attr_nonnull_arg(1, 2, 3) |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
282 | cx_attr_export |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
283 | int cx_array_reserve( |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
284 | void **array, |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
285 | void *size, |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
286 | void *capacity, |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
287 | unsigned width, |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
288 | size_t elem_size, |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
289 | size_t elem_count, |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
290 | CxArrayReallocator *reallocator |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
291 | ); |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
292 | |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
293 | /** |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
294 | * Copies elements from one array to another. |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
295 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
296 | * The elements are copied to the @p target array at the specified @p index, |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
297 | * overwriting possible elements. The @p index does not need to be in range of |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
298 | * the current array @p size. If the new index plus the number of elements added |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
299 | * would extend the array's size, the remaining @p capacity is used. |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
300 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
301 | * If the @p capacity is also insufficient to hold the new data, a reallocation |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
302 | * attempt is made with the specified @p reallocator. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
303 | * You can create your own reallocator by hand, use #cx_array_default_reallocator, |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
304 | * or use the convenience function cx_array_reallocator() to create a custom reallocator. |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
305 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
306 | * The @p width in bytes refers to the size and capacity. |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
307 | * Both must have the same width. |
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
308 | * Supported are 0, 1, 2, and 4, as well as 8 if running on a 64 bit |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
309 | * architecture. If set to zero, the native word width is used. |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
310 | * |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
311 | * @param target a pointer to the target array |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
312 | * @param size a pointer to the size of the target array |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
313 | * @param capacity a pointer to the capacity of the target array |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
314 | * @param width the width in bytes for the @p size and @p capacity or zero for default |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
315 | * @param index the index where the copied elements shall be placed |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
316 | * @param src the source array |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
317 | * @param elem_size the size of one element |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
318 | * @param elem_count the number of elements to copy |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
319 | * @param reallocator the array reallocator to use |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
320 | * (@c NULL defaults to #cx_array_default_reallocator) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
321 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
322 | * @retval non-zero failure |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
323 | * @see cx_array_reallocator() |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
324 | */ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
325 | cx_attr_nonnull_arg(1, 2, 3, 6) |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
326 | cx_attr_export |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
327 | int cx_array_copy( |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
328 | void **target, |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
329 | void *size, |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
330 | void *capacity, |
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
331 | unsigned width, |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
332 | size_t index, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
333 | const void *src, |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
334 | size_t elem_size, |
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
335 | size_t elem_count, |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
336 | CxArrayReallocator *reallocator |
891
49d8cff6f0ee
make all function attributes leading - fixes #425
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
337 | ); |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
338 | |
818
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
339 | /** |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
340 | * Convenience macro that uses cx_array_copy() with a default layout and |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
341 | * the specified reallocator. |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
342 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
343 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
344 | * @param array the name of the array (NOT a pointer or alias to the array) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
345 | * @param index (@c size_t) the index where the copied elements shall be placed |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
346 | * @param src (@c void*) the source array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
347 | * @param count (@c size_t) the number of elements to copy |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
348 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
349 | * @retval non-zero failure |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
350 | * @see CX_ARRAY_DECLARE() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
351 | * @see cx_array_simple_copy() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
352 | */ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
353 | #define cx_array_simple_copy_a(reallocator, array, index, src, count) \ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
354 | cx_array_copy((void**)&(array), &(array##_size), &(array##_capacity), \ |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
355 | sizeof(array##_size), index, src, sizeof((array)[0]), count, \ |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
356 | reallocator) |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
357 | |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
358 | /** |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
359 | * Convenience macro that uses cx_array_copy() with a default layout and |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
360 | * the default reallocator. |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
361 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
362 | * @param array the name of the array (NOT a pointer or alias to the array) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
363 | * @param index (@c size_t) the index where the copied elements shall be placed |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
364 | * @param src (@c void*) the source array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
365 | * @param count (@c size_t) the number of elements to copy |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
366 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
367 | * @retval non-zero failure |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
368 | * @see CX_ARRAY_DECLARE() |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
369 | * @see cx_array_simple_copy_a() |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
370 | */ |
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
371 | #define cx_array_simple_copy(array, index, src, count) \ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
372 | cx_array_simple_copy_a(NULL, array, index, src, count) |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
373 | |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
374 | /** |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
375 | * Convenience macro that uses cx_array_reserve() with a default layout and |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
376 | * the specified reallocator. |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
377 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
378 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
379 | * @param array the name of the array (NOT a pointer or alias to the array) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
380 | * @param count (@c size_t) the number of expected @em additional elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
381 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
382 | * @retval non-zero failure |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
383 | * @see CX_ARRAY_DECLARE() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
384 | * @see cx_array_simple_reserve() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
385 | */ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
386 | #define cx_array_simple_reserve_a(reallocator, array, count) \ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
387 | cx_array_reserve((void**)&(array), &(array##_size), &(array##_capacity), \ |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
388 | sizeof(array##_size), sizeof((array)[0]), count, \ |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
389 | reallocator) |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
390 | |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
391 | /** |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
392 | * Convenience macro that uses cx_array_reserve() with a default layout and |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
393 | * the default reallocator. |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
394 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
395 | * @param array the name of the array (NOT a pointer or alias to the array) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
396 | * @param count (@c size_t) the number of expected additional elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
397 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
398 | * @retval non-zero failure |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
399 | * @see CX_ARRAY_DECLARE() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
400 | * @see cx_array_simple_reserve_a() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
401 | */ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
402 | #define cx_array_simple_reserve(array, count) \ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
403 | cx_array_simple_reserve_a(NULL, array, count) |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
404 | |
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
405 | /** |
818
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
406 | * Adds an element to an array with the possibility of allocating more space. |
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
407 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
408 | * The element @p elem is added to the end of the @p target array which contains |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
409 | * @p size elements, already. The @p capacity must point to a variable denoting |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
410 | * the current maximum number of elements the array can hold. |
818
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
411 | * |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
412 | * If the capacity is insufficient to hold the new element, an attempt to |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
413 | * increase the @p capacity is made and the new capacity is written back. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
414 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
415 | * The \@ SIZE_TYPE is flexible and can be any unsigned integer type. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
416 | * It is important, however, that @p size and @p capacity are pointers to |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
417 | * variables of the same type. |
818
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
418 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
419 | * @param target (@c void**) a pointer to the target array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
420 | * @param size (@c SIZE_TYPE*) a pointer to the size of the target array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
421 | * @param capacity (@c SIZE_TYPE*) a pointer to the capacity of the target array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
422 | * @param elem_size (@c size_t) the size of one element |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
423 | * @param elem (@c void*) a pointer to the element to add |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
424 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
425 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
426 | * @retval non-zero failure |
818
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
427 | */ |
2be8fe3d5a2d
add cx_array_add() + fix type of cx_array_default_reallocator
Mike Becker <universe@uap-core.de>
parents:
817
diff
changeset
|
428 | #define cx_array_add(target, size, capacity, elem_size, elem, reallocator) \ |
1084
0bcd71d2615a
change cx_array_reserve() and cx_array_copy() to accept width in bytes instead of bits
Mike Becker <universe@uap-core.de>
parents:
1066
diff
changeset
|
429 | cx_array_copy((void**)(target), size, capacity, sizeof(*(size)), \ |
998
bb196054f3fd
make cx_array_copy() support different types for size/capacity - fixes #492
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
430 | *(size), elem, elem_size, 1, reallocator) |
623
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
431 | |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
432 | /** |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
433 | * Convenience macro that uses cx_array_add() with a default layout and |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
434 | * the specified reallocator. |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
435 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
436 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
437 | * @param array the name of the array (NOT a pointer or alias to the array) |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
438 | * @param elem the element to add (NOT a pointer, address is automatically taken) |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
439 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
440 | * @retval non-zero failure |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
441 | * @see CX_ARRAY_DECLARE() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
442 | * @see cx_array_simple_add() |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
443 | */ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
444 | #define cx_array_simple_add_a(reallocator, array, elem) \ |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
445 | cx_array_simple_copy_a(reallocator, array, array##_size, &(elem), 1) |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
446 | |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
447 | /** |
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
448 | * Convenience macro that uses cx_array_add() with a default layout and |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
449 | * the default reallocator. |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
450 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
451 | * @param array the name of the array (NOT a pointer or alias to the array) |
832
97df2e4c68fb
make cx_array_simple_add() automatically take the address of the element
Mike Becker <universe@uap-core.de>
parents:
831
diff
changeset
|
452 | * @param elem the element to add (NOT a pointer, address is automatically taken) |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
453 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
454 | * @retval non-zero failure |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
455 | * @see CX_ARRAY_DECLARE() |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
456 | * @see cx_array_simple_add_a() |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
457 | */ |
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
458 | #define cx_array_simple_add(array, elem) \ |
999
84fc42b04d3b
add cx_array_reserve() and several more array convenience functions
Mike Becker <universe@uap-core.de>
parents:
998
diff
changeset
|
459 | cx_array_simple_add_a(cx_array_default_reallocator, array, elem) |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
460 | |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
461 | /** |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
462 | * Inserts a sorted array into another sorted array. |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
463 | * |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
464 | * If either the target or the source array is not already sorted with respect |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
465 | * to the specified @p cmp_func, the behavior is undefined. |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
466 | * |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
467 | * If the capacity is insufficient to hold the new data, a reallocation |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
468 | * attempt is made. |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
469 | * You can create your own reallocator by hand, use #cx_array_default_reallocator, |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
470 | * or use the convenience function cx_array_reallocator() to create a custom reallocator. |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
471 | * |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
472 | * @param target a pointer to the target array |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
473 | * @param size a pointer to the size of the target array |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
474 | * @param capacity a pointer to the capacity of the target array |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
475 | * @param cmp_func the compare function for the elements |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
476 | * @param src the source array |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
477 | * @param elem_size the size of one element |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
478 | * @param elem_count the number of elements to insert |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
479 | * @param reallocator the array reallocator to use |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
480 | * (@c NULL defaults to #cx_array_default_reallocator) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
481 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
482 | * @retval non-zero failure |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
483 | */ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
484 | cx_attr_nonnull_arg(1, 2, 3, 5) |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
485 | cx_attr_export |
986
38fa7e41194c
simplify cx_array_copy() - fixes #474
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
486 | int cx_array_insert_sorted( |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
487 | void **target, |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
488 | size_t *size, |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
489 | size_t *capacity, |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
490 | cx_compare_func cmp_func, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
491 | const void *src, |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
492 | size_t elem_size, |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
493 | size_t elem_count, |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
494 | CxArrayReallocator *reallocator |
891
49d8cff6f0ee
make all function attributes leading - fixes #425
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
495 | ); |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
496 | |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
497 | /** |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
498 | * Inserts an element into a sorted array. |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
499 | * |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
500 | * If the target array is not already sorted with respect |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
501 | * to the specified @p cmp_func, the behavior is undefined. |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
502 | * |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
503 | * If the capacity is insufficient to hold the new data, a reallocation |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
504 | * attempt is made. |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
505 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
506 | * The \@ SIZE_TYPE is flexible and can be any unsigned integer type. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
507 | * It is important, however, that @p size and @p capacity are pointers to |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
508 | * variables of the same type. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
509 | * |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
510 | * @param target (@c void**) a pointer to the target array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
511 | * @param size (@c SIZE_TYPE*) a pointer to the size of the target array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
512 | * @param capacity (@c SIZE_TYPE*) a pointer to the capacity of the target array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
513 | * @param elem_size (@c size_t) the size of one element |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
514 | * @param elem (@c void*) a pointer to the element to add |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
515 | * @param cmp_func (@c cx_cmp_func) the compare function for the elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
516 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
517 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
518 | * @retval non-zero failure |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
519 | */ |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
520 | #define cx_array_add_sorted(target, size, capacity, elem_size, elem, cmp_func, reallocator) \ |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
521 | cx_array_insert_sorted((void**)(target), size, capacity, cmp_func, elem, elem_size, 1, reallocator) |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
522 | |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
523 | /** |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
524 | * Convenience macro for cx_array_add_sorted() with a default |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
525 | * layout and the specified reallocator. |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
526 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
527 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
528 | * @param array the name of the array (NOT a pointer or alias to the array) |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
529 | * @param elem the element to add (NOT a pointer, address is automatically taken) |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
530 | * @param cmp_func (@c cx_cmp_func) the compare function for the elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
531 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
532 | * @retval non-zero failure |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
533 | * @see CX_ARRAY_DECLARE() |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
534 | * @see cx_array_simple_add_sorted() |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
535 | */ |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
536 | #define cx_array_simple_add_sorted_a(reallocator, array, elem, cmp_func) \ |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
537 | cx_array_add_sorted(&array, &(array##_size), &(array##_capacity), \ |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
538 | sizeof((array)[0]), &(elem), cmp_func, reallocator) |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
539 | |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
540 | /** |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
541 | * Convenience macro for cx_array_add_sorted() with a default |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
542 | * layout and the default reallocator. |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
543 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
544 | * @param array the name of the array (NOT a pointer or alias to the array) |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
545 | * @param elem the element to add (NOT a pointer, address is automatically taken) |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
546 | * @param cmp_func (@c cx_cmp_func) the compare function for the elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
547 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
548 | * @retval non-zero failure |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
549 | * @see CX_ARRAY_DECLARE() |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
550 | * @see cx_array_simple_add_sorted_a() |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
551 | */ |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
552 | #define cx_array_simple_add_sorted(array, elem, cmp_func) \ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
553 | cx_array_simple_add_sorted_a(NULL, array, elem, cmp_func) |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
554 | |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
555 | /** |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
556 | * Convenience macro for cx_array_insert_sorted() with a default |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
557 | * layout and the specified reallocator. |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
558 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
559 | * @param reallocator (@c CxArrayReallocator*) the array reallocator to use |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
560 | * @param array the name of the array (NOT a pointer or alias to the array) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
561 | * @param src (@c void*) pointer to the source array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
562 | * @param n (@c size_t) number of elements in the source array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
563 | * @param cmp_func (@c cx_cmp_func) the compare function for the elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
564 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
565 | * @retval non-zero failure |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
566 | * @see CX_ARRAY_DECLARE() |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
567 | * @see cx_array_simple_insert_sorted() |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
568 | */ |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
569 | #define cx_array_simple_insert_sorted_a(reallocator, array, src, n, cmp_func) \ |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
570 | cx_array_insert_sorted((void**)(&array), &(array##_size), &(array##_capacity), \ |
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
571 | cmp_func, src, sizeof((array)[0]), n, reallocator) |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
572 | |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
573 | /** |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
574 | * Convenience macro for cx_array_insert_sorted() with a default |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
575 | * layout and the default reallocator. |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
576 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
577 | * @param array the name of the array (NOT a pointer or alias to the array) |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
578 | * @param src (@c void*) pointer to the source array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
579 | * @param n (@c size_t) number of elements in the source array |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
580 | * @param cmp_func (@c cx_cmp_func) the compare function for the elements |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
581 | * @retval zero success |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
582 | * @retval non-zero failure |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
583 | * @see CX_ARRAY_DECLARE() |
1066
8610f87a6b14
add missing convenience macros for sorted insert with array reallocator
Mike Becker <universe@uap-core.de>
parents:
1010
diff
changeset
|
584 | * @see cx_array_simple_insert_sorted_a() |
883
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
585 | */ |
3012e9b4214e
add low level cx_array_insert_sorted() and convenience macros
Mike Becker <universe@uap-core.de>
parents:
855
diff
changeset
|
586 | #define cx_array_simple_insert_sorted(array, src, n, cmp_func) \ |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
587 | cx_array_simple_insert_sorted_a(NULL, array, src, n, cmp_func) |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
588 | |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
589 | /** |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
590 | * Searches the largest lower bound in a sorted array. |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
591 | * |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
592 | * In other words, this function returns the index of the largest element |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
593 | * in @p arr that is less or equal to @p elem with respect to @p cmp_func. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
594 | * When no such element exists, @p size is returned. |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
595 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
596 | * If @p elem is contained in the array, this is identical to |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
597 | * #cx_array_binary_search(). |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
598 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
599 | * If the array is not sorted with respect to the @p cmp_func, the behavior |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
600 | * is undefined. |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
601 | * |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
602 | * @param arr the array to search |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
603 | * @param size the size of the array |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
604 | * @param elem_size the size of one element |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
605 | * @param elem the element to find |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
606 | * @param cmp_func the compare function |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
607 | * @return the index of the largest lower bound, or @p size |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
608 | * @see cx_array_binary_search_sup() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
609 | * @see cx_array_binary_search() |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
610 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
611 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
612 | cx_attr_export |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
613 | size_t cx_array_binary_search_inf( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
614 | const void *arr, |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
615 | size_t size, |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
616 | size_t elem_size, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
617 | const void *elem, |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
618 | cx_compare_func cmp_func |
891
49d8cff6f0ee
make all function attributes leading - fixes #425
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
619 | ); |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
620 | |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
621 | /** |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
622 | * Searches an item in a sorted array. |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
623 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
624 | * If the array is not sorted with respect to the @p cmp_func, the behavior |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
625 | * is undefined. |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
626 | * |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
627 | * @param arr the array to search |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
628 | * @param size the size of the array |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
629 | * @param elem_size the size of one element |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
630 | * @param elem the element to find |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
631 | * @param cmp_func the compare function |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
632 | * @return the index of the element in the array, or @p size if the element |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
633 | * cannot be found |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
634 | * @see cx_array_binary_search_inf() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
635 | * @see cx_array_binary_search_sup() |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
636 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
637 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
638 | cx_attr_export |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
639 | size_t cx_array_binary_search( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
640 | const void *arr, |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
641 | size_t size, |
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
642 | size_t elem_size, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
643 | const void *elem, |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
644 | cx_compare_func cmp_func |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
645 | ); |
884
d375d8056262
add cx_array_binary_search() - fixes #424
Mike Becker <universe@uap-core.de>
parents:
883
diff
changeset
|
646 | |
831
7970eac1c598
add convenience macros for cx_array_*
Mike Becker <universe@uap-core.de>
parents:
819
diff
changeset
|
647 | /** |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
648 | * Searches the smallest upper bound in a sorted array. |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
649 | * |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
650 | * In other words, this function returns the index of the smallest element |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
651 | * in @p arr that is greater or equal to @p elem with respect to @p cmp_func. |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
652 | * When no such element exists, @p size is returned. |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
653 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
654 | * If @p elem is contained in the array, this is identical to |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
655 | * #cx_array_binary_search(). |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
656 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
657 | * If the array is not sorted with respect to the @p cmp_func, the behavior |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
658 | * is undefined. |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
659 | * |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
660 | * @param arr the array to search |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
661 | * @param size the size of the array |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
662 | * @param elem_size the size of one element |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
663 | * @param elem the element to find |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
664 | * @param cmp_func the compare function |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
665 | * @return the index of the smallest upper bound, or @p size |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
666 | * @see cx_array_binary_search_inf() |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
667 | * @see cx_array_binary_search() |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
668 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
669 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
670 | cx_attr_export |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
671 | size_t cx_array_binary_search_sup( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
672 | const void *arr, |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
673 | size_t size, |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
674 | size_t elem_size, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
675 | const void *elem, |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
676 | cx_compare_func cmp_func |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
677 | ); |
886
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
678 | |
5f5514bb104b
also add a binary search for the supremum
Mike Becker <universe@uap-core.de>
parents:
885
diff
changeset
|
679 | /** |
623
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
680 | * Swaps two array elements. |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
681 | * |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
682 | * @param arr the array |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
683 | * @param elem_size the element size |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
684 | * @param idx1 index of first element |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
685 | * @param idx2 index of second element |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
686 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
687 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
688 | cx_attr_export |
623
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
689 | void cx_array_swap( |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
690 | void *arr, |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
691 | size_t elem_size, |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
692 | size_t idx1, |
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
693 | size_t idx2 |
891
49d8cff6f0ee
make all function attributes leading - fixes #425
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
694 | ); |
623
21082350a590
#219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents:
617
diff
changeset
|
695 | |
608
2e93521145ac
proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents:
606
diff
changeset
|
696 | /** |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
697 | * Allocates an array list for storing elements with @p elem_size bytes each. |
606 | 698 | * |
1111
78eeeb950883
remove API for changing the store_pointer property after list creation
Mike Becker <universe@uap-core.de>
parents:
1089
diff
changeset
|
699 | * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of |
78eeeb950883
remove API for changing the store_pointer property after list creation
Mike Becker <universe@uap-core.de>
parents:
1089
diff
changeset
|
700 | * copies of the added elements and the compare function will be automatically set |
78eeeb950883
remove API for changing the store_pointer property after list creation
Mike Becker <universe@uap-core.de>
parents:
1089
diff
changeset
|
701 | * to cx_cmp_ptr(), if none is given. |
669
dce9b8450656
add docs for CX_STORE_POINTERS and remove cxHashMapCreateForPointers()
Mike Becker <universe@uap-core.de>
parents:
662
diff
changeset
|
702 | * |
606 | 703 | * @param allocator the allocator for allocating the list memory |
1318
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
704 | * (if @c NULL, the cxDefaultAllocator will be used) |
606 | 705 | * @param comparator the comparator for the elements |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
706 | * (if @c NULL, and the list is not storing pointers, sort and find |
763
741a2040fa33
make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
707 | * functions will not work) |
855
35bcb3216c0d
fix inconsistent use of item_size and elem_size
Mike Becker <universe@uap-core.de>
parents:
844
diff
changeset
|
708 | * @param elem_size the size of each element in bytes |
606 | 709 | * @param initial_capacity the initial number of elements the array can store |
710 | * @return the created list | |
711 | */ | |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
712 | cx_attr_nodiscard |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
953
diff
changeset
|
713 | cx_attr_malloc |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
989
diff
changeset
|
714 | cx_attr_dealloc(cxListFree, 1) |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1111
diff
changeset
|
715 | cx_attr_export |
606 | 716 | CxList *cxArrayListCreate( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
887
diff
changeset
|
717 | const CxAllocator *allocator, |
677
b09aae58bba4
refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents:
670
diff
changeset
|
718 | cx_compare_func comparator, |
855
35bcb3216c0d
fix inconsistent use of item_size and elem_size
Mike Becker <universe@uap-core.de>
parents:
844
diff
changeset
|
719 | size_t elem_size, |
606 | 720 | size_t initial_capacity |
670
4ad8ea3aee49
allow NULL for allocator and comparator
Mike Becker <universe@uap-core.de>
parents:
669
diff
changeset
|
721 | ); |
606 | 722 | |
662
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
723 | /** |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
724 | * Allocates an array list for storing elements with @p elem_size bytes each. |
662
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
725 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
726 | * The list will use the cxDefaultAllocator and @em NO compare function. |
662
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
727 | * If you want to call functions that need a compare function, you have to |
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
728 | * set it immediately after creation or use cxArrayListCreate(). |
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
729 | * |
1111
78eeeb950883
remove API for changing the store_pointer property after list creation
Mike Becker <universe@uap-core.de>
parents:
1089
diff
changeset
|
730 | * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of |
78eeeb950883
remove API for changing the store_pointer property after list creation
Mike Becker <universe@uap-core.de>
parents:
1089
diff
changeset
|
731 | * copies of the added elements and the compare function will be automatically set |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1180
diff
changeset
|
732 | * to cx_cmp_ptr(). |
669
dce9b8450656
add docs for CX_STORE_POINTERS and remove cxHashMapCreateForPointers()
Mike Becker <universe@uap-core.de>
parents:
662
diff
changeset
|
733 | * |
1089
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
734 | * @param elem_size (@c size_t) the size of each element in bytes |
865c84fef6b4
refine docs for array_list.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1084
diff
changeset
|
735 | * @param initial_capacity (@c size_t) the initial number of elements the array can store |
662
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
736 | * @return the created list |
d0d95740071b
add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents:
637
diff
changeset
|
737 | */ |
855
35bcb3216c0d
fix inconsistent use of item_size and elem_size
Mike Becker <universe@uap-core.de>
parents:
844
diff
changeset
|
738 | #define cxArrayListCreateSimple(elem_size, initial_capacity) \ |
35bcb3216c0d
fix inconsistent use of item_size and elem_size
Mike Becker <universe@uap-core.de>
parents:
844
diff
changeset
|
739 | cxArrayListCreate(NULL, NULL, elem_size, initial_capacity) |
606 | 740 | |
741 | #ifdef __cplusplus | |
628
1e2be40f0cb5
use //-style single line comments everywhere
Mike Becker <universe@uap-core.de>
parents:
623
diff
changeset
|
742 | } // extern "C" |
606 | 743 | #endif |
744 | ||
628
1e2be40f0cb5
use //-style single line comments everywhere
Mike Becker <universe@uap-core.de>
parents:
623
diff
changeset
|
745 | #endif // UCX_ARRAY_LIST_H |