ucx/cx/array_list.h

Wed, 31 Dec 2025 16:40:12 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 31 Dec 2025 16:40:12 +0100
changeset 1040
473d8cb58a6c
parent 1034
330b415910bd
permissions
-rw-r--r--

update ucx to version 4.0

174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 /**
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
29 * @file array_list.h
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
30 * @brief Array list implementation.
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
31 * @author Mike Becker
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
32 * @author Olaf Wintermann
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
33 * @copyright 2-Clause BSD License
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 */
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #ifndef UCX_ARRAY_LIST_H
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 #define UCX_ARRAY_LIST_H
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 #include "list.h"
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 /**
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
43 * The maximum item size in an array list that fits into
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
44 * a stack buffer when swapped.
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
45 */
870
e167cf006213 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 845
diff changeset
46 CX_EXPORT extern const unsigned cx_array_swap_sbo_size;
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
47
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
48 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
49 * Declares a typed array with size and capacity.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
50 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
51 * @param type the type of the elements
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
52 * @param name the name of the array
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
53 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
54 #define CX_ARRAY(type, name) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
55 struct { \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
56 type *data; \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
57 size_t size; \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
58 size_t capacity; \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
59 } name
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
60
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
61 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
62 * Internal structure for arrays.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
63 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
64 * A generalization of array structures declared with CX_ARRAY().
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
65 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
66 typedef struct cx_array_s {
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
67 /** The array data. */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
68 void *data;
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
69 /** The number of elements. */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
70 size_t size;
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
71 /** The maximum number of elements. */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
72 size_t capacity;
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
73 } CxArray;
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
74
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
75 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
76 * Initializes an array by allocating memory.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
77 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
78 * Internal function - do not use manually.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
79 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
80 * @param allocator the allocator for the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
81 * @param array a pointer to the array structure
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
82 * @param elem_size size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
83 * @param capacity the initial maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
84 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
85 * @retval non-zero allocation failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
86 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
87 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
88 int cx_array_init_(const CxAllocator *allocator, CxArray *array, size_t elem_size, size_t capacity);
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
89
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
90 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
91 * Initializes an array by allocating memory.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
92 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
93 * The size is set to zero.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
94 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
95 * @attention If the array was already initialized, this will leak memory.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
96 * Use cx_array_reserve() to change the capacity of an initialized array.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
97 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
98 * @param allocator (@c CxAllocator*) the allocator for the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
99 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
100 * @param capacity (@c size_t) the initial maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
101 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
102 * @retval non-zero allocation failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
103 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
104 #define cx_array_init_a(allocator, array, capacity) cx_array_init_(allocator, (CxArray*)&(array), sizeof((array).data[0]), capacity)
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
105
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
106 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
107 * Initializes an array by allocating memory.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
108 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
109 * The size is set to zero.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
110 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
111 * @attention If the array was already initialized, this will leak memory.
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 471
diff changeset
112 *
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
113 * @param array the name of the array
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
114 * @param capacity (@c size_t) the initial maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
115 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
116 * @retval non-zero allocation failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
117 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
118 #define cx_array_init(array, capacity) cx_array_init_a(cxDefaultAllocator, array, capacity)
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
119
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
120 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
121 * Initializes an array with fixed size memory.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
122 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
123 * Internal function - do not use manually.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
124 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
125 * @param array a pointer to the array structure
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
126 * @param data the fixed size array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
127 * @param capacity the capacity of the fixed size array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
128 * @param size the number of initialized elements in the fixed size array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
129 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
130 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
131 void cx_array_init_fixed_(CxArray *array, const void *data, size_t capacity, size_t size);
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
132
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
133 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
134 * Initializes an array with fixed size memory.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
135 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
136 * This is useful, for example, when you want to work with memory on the stack
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
137 * and only want to move to the heap when the stack memory is not enough.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
138 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
139 * With the @p num_initialized argument you can specify how many elements in the
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
140 * fixed size array are already correctly initialized, which determines the
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
141 * initial size of the array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
142 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
143 * The capacity is determined automatically by the compiler.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
144 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
145 * @attention When you add elements to an array that was initialized with fixed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
146 * size memory, you MUST check the capacity before adding the element and invoke
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
147 * cx_array_copy_to_new() when you intend to exceed the capacity.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
148 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
149 * @attention When you pass a pointer to an array that does not have a fixed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
150 * size, the behavior is unspecified.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
151 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
152 * @param array the name of the array to initialize
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
153 * @param fixed_size_array (@c void*) the fixed size array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
154 * @param num_initialized (@c size_t) the number of already initialized elements in the fixed size array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
155 * @see cx_array_copy_to_new()
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
156 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
157 #define cx_array_init_fixed(array, fixed_size_array, num_initialized) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
158 cx_array_init_fixed_((CxArray*)&(array), fixed_size_array, cx_nmemb(fixed_size_array), num_initialized)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
159
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
160 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
161 * Changes the capacity of an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
162 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
163 * Internal function - do not use.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
164 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
165 * @param allocator the allocator
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
166 * @param array a pointer to the array structure
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
167 * @param elem_size the size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
168 * @param capacity the new capacity
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
169 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
170 * @retval non-zero allocation failed
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
172 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
173 int cx_array_reserve_(const CxAllocator *allocator, CxArray *array, size_t elem_size, size_t capacity);
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
176 * Changes the capacity of an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
177 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
178 * If required, the size is reduced to fit into the new capacity.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
179 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
180 * @param allocator (@c CxAllocator*) the allocator for the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
181 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
182 * @param capacity (@c size_t) the new maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
183 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
184 * @retval non-zero allocation failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
185 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
186 #define cx_array_reserve_a(allocator, array, capacity) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
187 cx_array_reserve_(allocator, (CxArray*)&(array), sizeof((array).data[0]), capacity)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
188
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
189 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
190 * Changes the capacity of an array.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
191 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
192 * If required, the size is reduced to fit into the new capacity.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
193 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
194 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
195 * @param capacity (@c size_t) the new maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
196 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
197 * @retval non-zero allocation failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
198 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
199 #define cx_array_reserve(array, capacity) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
200 cx_array_reserve_a(cxDefaultAllocator, array, capacity)
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
201
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
202 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
203 * Copies the array to a new memory region.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
204 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
205 * Internal function - do not use.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
206 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
207 * @param allocator the allocator for new new memory
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
208 * @param array a pointer to the array structure
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
209 * @param elem_size the size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
210 * @param capacity the new capacity
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
211 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
212 * @retval non-zero allocation failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
213 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
214 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
215 int cx_array_copy_to_new_(const CxAllocator *allocator, CxArray *array, size_t elem_size, size_t capacity);
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
216
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
217 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
218 * Copies the array to a new memory region.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
219 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
220 * This is useful when you have initialized the array with a fixed size memory
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
221 * using cx_array_init_fixed(), and now you want to increase the capacity.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
222 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
223 * @attention When the original memory does not belong to stack memory, and
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
224 * you do not have another reference to this memory, it will leak.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
225 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
226 * @param allocator (@c CxAllocator*) the allocator for the new memory
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
227 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
228 * @param capacity (@c size_t) the new maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
229 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
230 * @retval non-zero allocation failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
231 * @see cx_array_init_fixed()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
232 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
233 #define cx_array_copy_to_new_a(allocator, array, capacity) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
234 cx_array_copy_to_new_(allocator, (CxArray*)&(array), sizeof((array).data[0]), capacity)
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
235
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
236 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
237 * Copies the array to a new memory region.
943
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
238 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
239 * This is useful when you have initialized the array with a fixed size memory
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
240 * using cx_array_init_fixed(), and now you want to increase the capacity.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
241 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
242 * @attention When the original memory does not belong to stack memory, and
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
243 * you do not have another reference to this memory, it will leak.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
244 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
245 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
246 * @param capacity (@c size_t) the new maximum number of elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
247 * @retval zero allocation was successful
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
248 * @retval non-zero allocation failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
249 * @see cx_array_init_fixed()
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
250 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
251 #define cx_array_copy_to_new(array, capacity) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
252 cx_array_copy_to_new_a(cxDefaultAllocator, array, capacity)
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
253
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
254 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
255 * Inserts data into an array.
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
256 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
257 * Internal function - do not use.
943
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
258 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
259 * @param allocator the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
260 * @param array a pointer to the array structure
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261 * @param elem_size the size of one element
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
262 * @param index the index where to insert the @p other data
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
263 * @param other a pointer to an array of data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
264 * @param n the number of elements that shall be inserted
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
265 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
266 * @retval non-zero a re-allocation was necessary but failed
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
267 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
268 CX_EXTERN CX_NONNULL_ARG(1, 2)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
269 int cx_array_insert_(const CxAllocator *allocator, CxArray *array,
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
270 size_t elem_size, size_t index, const void *other, size_t n);
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
271
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
272 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
273 * Appends an element to an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
274 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
275 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
276 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
277 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
278 * @param array the name of the array where the element shall be added
1034
330b415910bd fix build (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1016
diff changeset
279 * @param element the element that shall be added
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
280 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
281 * @retval non-zero a re-allocation was necessary but failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
282 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
283 #define cx_array_add_a(allocator, array, element) \
1034
330b415910bd fix build (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1016
diff changeset
284 cx_array_insert_(allocator, (CxArray*)&(array), sizeof((array).data[0]), (array).size, (void*)&(element), 1)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
285
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
286 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
287 * Appends an element to an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
288 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
289 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
290 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
291 * @param array the name of the array where the element shall be added
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
292 * @param element (@c void*) a pointer to the element that shall be added
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
293 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
294 * @retval non-zero a re-allocation was necessary but failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
295 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
296 #define cx_array_add(array, element) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
297 cx_array_add_a(cxDefaultAllocator, array, element)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
298
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
299 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
300 * Inserts an element into an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
301 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
302 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
303 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
304 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
305 * @param array the name of the array where the element shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
306 * @param index (@c size_t) the index where to insert the @p element
1034
330b415910bd fix build (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1016
diff changeset
307 * @param element the element that shall be inserted
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
308 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
309 * @retval non-zero a re-allocation was necessary but failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
310 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
311 #define cx_array_insert_a(allocator, array, index, element) \
1034
330b415910bd fix build (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1016
diff changeset
312 cx_array_insert_(allocator, (CxArray*)&(array), sizeof((array).data[0]), index, (void*)&(element), 1)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
313
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
314 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
315 * Inserts an element into an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
316 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
317 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
318 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
319 * @param array the name of the array where the element shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
320 * @param index (@c size_t) the index where to insert the @p element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
321 * @param element (@c void*) a pointer to the element that shall be inserted
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
322 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
323 * @retval non-zero a re-allocation was necessary but failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
324 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
325 #define cx_array_insert(array, index, element) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
326 cx_array_insert_a(cxDefaultAllocator, array, index, element)
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
327
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
328 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
329 * Inserts data into an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
330 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
331 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
332 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
333 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
334 * @param array the name of the array where the elements shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
335 * @param index (@c size_t) the index where to insert the @p other data
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
336 * @param other (@c void*) a pointer to an array of data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
337 * @param n (@c size_t) the number of elements that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
338 * @retval zero success
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
339 * @retval non-zero a re-allocation was necessary but failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
340 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
341 #define cx_array_insert_array_a(allocator, array, index, other, n) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
342 cx_array_insert_(allocator, (CxArray*)&(array), sizeof((array).data[0]), index, other, n)
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
343
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
344 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
345 * Inserts data into an array.
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
346 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
347 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
348 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
349 * @param array the name of the array where the elements shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
350 * @param index (@c size_t) the index where to insert the @p other data
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
351 * @param other (@c void*) a pointer to an array of data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
352 * @param n (@c size_t) the number of elements that shall be inserted
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
353 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
354 * @retval non-zero a re-allocation was necessary but failed
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
355 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
356 #define cx_array_insert_array(array, index, other, n) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
357 cx_array_insert_array_a(cxDefaultAllocator, array, index, other, n)
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
358
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
359 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
360 * Appends data to an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
361 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
362 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
363 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
364 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
365 * @param array the name of the array where the elements shall be added
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
366 * @param other (@c void*) a pointer to an array of data that shall be added
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
367 * @param n (@c size_t) the number of elements that shall be added
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
368 * @retval zero success
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
369 * @retval non-zero a re-allocation was necessary but failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
370 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
371 #define cx_array_add_array_a(allocator, array, other, n) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
372 cx_array_insert_(allocator, (CxArray*)&(array), sizeof((array).data[0]), (array).size, other, n)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
373
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
374 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
375 * Appends data to an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
376 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
377 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
378 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
379 * @param array the name of the array where the elements shall be added
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
380 * @param other (@c void*) a pointer to an array of data that shall be added
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
381 * @param n (@c size_t) the number of elements that shall be added
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
382 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
383 * @retval non-zero a re-allocation was necessary but failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
384 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
385 #define cx_array_add_array(array, other, n) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
386 cx_array_add_array_a(cxDefaultAllocator, array, other, n)
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
387
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
388 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
389 * Inserts sorted data into a sorted array.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
390 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
391 * Internal function - do not use.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
392 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
393 * @param allocator the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
394 * @param array a pointer to the array structure
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
395 * @param elem_size the size of one element
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
396 * @param sorted_data a pointer to an array of data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
397 * @param n the number of elements that shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
398 * @param cmp_func the compare function
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
399 * @param allow_duplicates @c false if duplicates shall be skipped during insertion
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
400 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
401 * @retval non-zero a re-allocation was necessary but failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
402 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
403 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
404 int cx_array_insert_sorted_(const CxAllocator *allocator, CxArray *array,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
405 size_t elem_size, const void *sorted_data, size_t n,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
406 cx_compare_func cmp_func, bool allow_duplicates);
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
407
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
408 /**
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
409 * Inserts an element into a sorted array.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
410 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
411 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
412 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
413 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
414 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
415 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
416 * @param array the name of the array where the elements shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
417 * @param element the element that shall be inserted
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
418 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
419 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
420 * @retval non-zero a re-allocation was necessary but failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
421 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
422 #define cx_array_insert_sorted_a(allocator, array, element, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
423 cx_array_insert_sorted_(allocator, (CxArray*)&(array), sizeof((array).data[0]), (void*)&(element), 1, cmp_func, true)
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
424
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
425 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
426 * Inserts an element into a sorted array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
427 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
428 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
429 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
430 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
431 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
432 * @param array the name of the array where the elements shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
433 * @param element the element that shall be inserted
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
434 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
435 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
436 * @retval non-zero a re-allocation was necessary but failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
437 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
438 #define cx_array_insert_sorted(array, element, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
439 cx_array_insert_sorted_a(cxDefaultAllocator, array, element, cmp_func)
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
440
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
441 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
442 * Inserts sorted data into a sorted array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
443 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
444 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
445 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
446 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
447 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
448 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
449 * @param array the name of the array where the elements shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
450 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
451 * @param n (@c size_t) the number of elements that shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
452 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
453 * @retval zero success
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
454 * @retval non-zero a re-allocation was necessary but failed
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
455 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
456 #define cx_array_insert_sorted_array_a(allocator, array, sorted_data, n, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
457 cx_array_insert_sorted_(allocator, (CxArray*)&(array), sizeof((array).data[0]), sorted_data, n, cmp_func, true)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
458
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
459 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
460 * Inserts sorted data into a sorted array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
461 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
462 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
463 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
464 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
465 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
466 * @param array the name of the array where the elements shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
467 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
468 * @param n (@c size_t) the number of elements that shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
469 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
470 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
471 * @retval non-zero a re-allocation was necessary but failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
472 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
473 #define cx_array_insert_sorted_array(array, sorted_data, n, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
474 cx_array_insert_sorted_array_a(cxDefaultAllocator, array, sorted_data, n, cmp_func)
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
475
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
476 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
477 * Inserts an element into a sorted array if it is not already contained.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
478 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
479 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
480 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
481 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
482 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
483 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
484 * @param array the name of the array where the elements shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
485 * @param element the element that shall be inserted
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
486 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
487 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
488 * @retval non-zero a re-allocation was necessary but failed
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
489 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
490 #define cx_array_insert_unique_a(allocator, array, element, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
491 cx_array_insert_sorted_(allocator, (CxArray*)&(array), sizeof((array).data[0]), (void*)&(element), 1, cmp_func, false)
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
492
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
493 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
494 * Inserts an element into a sorted array if it is not already contained.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
495 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
496 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
497 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
498 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
499 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
500 * @param array the name of the array where the elements shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
501 * @param element the element that shall be inserted
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
502 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
503 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
504 * @retval non-zero a re-allocation was necessary but failed
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
505 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
506 #define cx_array_insert_unique(array, element, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
507 cx_array_insert_unique_a(cxDefaultAllocator, array, element, cmp_func)
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
508
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
509 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
510 * Inserts sorted data into a sorted array, skipping duplicates.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
511 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
512 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
513 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
514 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
515 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
516 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
517 * @param array the name of the array where the elements shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
518 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
519 * @param n (@c size_t) the number of elements that shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
520 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
521 * @retval zero success
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
522 * @retval non-zero a re-allocation was necessary but failed
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
523 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
524 #define cx_array_insert_unique_array_a(allocator, array, sorted_data, n, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
525 cx_array_insert_sorted_(allocator, (CxArray*)&(array), sizeof((array).data[0]), sorted_data, n, cmp_func, false)
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
526
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
527 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
528 * Inserts sorted data into a sorted array, skipping duplicates.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
529 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
530 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
531 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
532 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
533 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
534 * @param array the name of the array where the elements shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
535 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
536 * @param n (@c size_t) the number of elements that shall be inserted
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
537 * @param cmp_func (@c cx_compare_func) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
538 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
539 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
540 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
541 #define cx_array_insert_unique_array(array, sorted_data, n, cmp_func) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
542 cx_array_insert_unique_array_a(cxDefaultAllocator, array, sorted_data, n, cmp_func)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
543
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
544 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
545 * Inserts sorted data into a sorted array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
546 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
547 * Internal function - do not use.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
548 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
549 * @param allocator the allocator to use for a possible reallocation
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
550 * @param array a pointer to the array structure
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
551 * @param elem_size the size of one element
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
552 * @param sorted_data a pointer to an array of data that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
553 * @param n the number of elements that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
554 * @param cmp_func the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
555 * @param context additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
556 * @param allow_duplicates @c false if duplicates shall be skipped during insertion
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
557 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
558 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
559 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
560 CX_EXTERN CX_NONNULL_ARG(1, 2, 4, 6)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
561 int cx_array_insert_sorted_c_(const CxAllocator *allocator, CxArray *array,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
562 size_t elem_size, const void *sorted_data, size_t n,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
563 cx_compare_func2 cmp_func, void *context, bool allow_duplicates);
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
564
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
565 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
566 * Inserts an element into a sorted array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
567 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
568 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
569 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
570 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
571 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
572 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
573 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
574 * @param element the element that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
575 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
576 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
577 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
578 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
579 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
580 #define cx_array_insert_sorted_ca(allocator, array, element, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
581 cx_array_insert_sorted_c_(allocator, (CxArray*)&(array), sizeof((array).data[0]), (void*)&(element), 1, cmp_func, context, true)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
582
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
583 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
584 * Inserts an element into a sorted array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
585 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
586 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
587 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
588 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
589 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
590 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
591 * @param element the element that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
592 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
593 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
594 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
595 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
596 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
597 #define cx_array_insert_sorted_c(array, element, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
598 cx_array_insert_sorted_ca(cxDefaultAllocator, array, element, cmp_func, context)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
599
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
600 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
601 * Inserts sorted data into a sorted array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
602 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
603 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
604 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
605 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
606 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
607 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
608 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
609 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
610 * @param n (@c size_t) the number of elements that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
611 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
612 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
613 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
614 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
615 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
616 #define cx_array_insert_sorted_array_ca(allocator, array, sorted_data, n, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
617 cx_array_insert_sorted_c_(allocator, (CxArray*)&(array), sizeof((array).data[0]), sorted_data, n, cmp_func, context, true)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
618
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
619 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
620 * Inserts sorted data into a sorted array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
621 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
622 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
623 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
624 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
625 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
626 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
627 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
628 * @param n (@c size_t) the number of elements that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
629 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
630 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
631 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
632 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
633 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
634 #define cx_array_insert_sorted_array_c(array, sorted_data, n, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
635 cx_array_insert_sorted_array_ca(cxDefaultAllocator, array, sorted_data, n, cmp_func, context)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
636
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
637 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
638 * Inserts an element into a sorted array if it is not already contained.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
639 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
640 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
641 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
642 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
643 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
644 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
645 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
646 * @param element the element that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
647 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
648 * @param context (@c void*) additional context for the compare function
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
649 * @retval zero success
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
650 * @retval non-zero a re-allocation was necessary but failed
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
651 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
652 #define cx_array_insert_unique_ca(allocator, array, element, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
653 cx_array_insert_sorted_c_(allocator, (CxArray*)&(array), sizeof((array).data[0]), (void*)&(element), 1, cmp_func, context, false)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
654
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
655 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
656 * Inserts an element into a sorted array if it is not already contained.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
657 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
658 * When the capacity is not enough to hold the new element, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
659 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
660 * @attention if the array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
661 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
662 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
663 * @param element the element that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
664 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
665 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
666 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
667 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
668 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
669 #define cx_array_insert_unique_c(array, element, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
670 cx_array_insert_unique_ca(cxDefaultAllocator, array, element, cmp_func, context)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
671
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
672 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
673 * Inserts sorted data into a sorted array, skipping duplicates.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
674 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
675 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
676 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
677 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
678 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
679 * @param allocator (@c CxAllocator*) the allocator to use for a possible reallocation
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
680 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
681 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
682 * @param n (@c size_t) the number of elements that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
683 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
684 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
685 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
686 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
687 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
688 #define cx_array_insert_unique_array_ca(allocator, array, sorted_data, n, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
689 cx_array_insert_sorted_c_(allocator, (CxArray*)&(array), sizeof((array).data[0]), sorted_data, n, cmp_func, context, false)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
690
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
691 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
692 * Inserts sorted data into a sorted array, skipping duplicates.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
693 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
694 * When the capacity is not enough to hold the new elements, a re-allocation is attempted.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
695 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
696 * @attention if either array is not sorted according to the specified @p cmp_func, the behavior is undefined.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
697 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
698 * @param array the name of the array where the elements shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
699 * @param sorted_data (@c void*) a pointer to an array of sorted data that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
700 * @param n (@c size_t) the number of elements that shall be inserted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
701 * @param cmp_func (@c cx_compare_func2) the compare function that establishes the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
702 * @param context (@c void*) additional context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
703 * @retval zero success
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
704 * @retval non-zero a re-allocation was necessary but failed
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
705 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
706 #define cx_array_insert_unique_array_c(array, sorted_data, n, cmp_func, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
707 cx_array_insert_unique_array_ca(cxDefaultAllocator, array, sorted_data, n, cmp_func, context)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
708
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
709 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
710 * An alternative to qsort_r() when that is not available on your platform.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
711 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
712 * If it is available, qsort_r() is used directly.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
713 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
714 * @param array the array that shall be sorted
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
715 * @param nmemb the number of elements in the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
716 * @param size the size of one element
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
717 * @param fn the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
718 * @param context the context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
719 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
720 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
721 void cx_array_qsort_c(void *array, size_t nmemb, size_t size,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
722 cx_compare_func2 fn, void *context);
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
723
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
724 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
725 * Sorts an array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
726 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
727 * Internal function - do not use.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
728 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
729 * @param array a pointer to the array structure
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
730 * @param elem_size the size of one element
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
731 * @param fn the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
732 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
733 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
734 void cx_array_sort_(CxArray *array, size_t elem_size,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
735 cx_compare_func fn);
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
736
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
737 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
738 * Sorts an array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
739 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
740 * Internal function - do not use.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
741 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
742 * @param array a pointer to the array structure
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
743 * @param elem_size the size of one element
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
744 * @param fn the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
745 * @param context the context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
746 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
747 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
748 void cx_array_sort_c_(CxArray *array, size_t elem_size,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
749 cx_compare_func2 fn, void *context);
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
750
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
751 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
752 * Sorts an array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
753 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
754 * @param array the name of the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
755 * @param fn (@c cx_compare_func) the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
756 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
757 #define cx_array_sort(array, fn) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
758 cx_array_sort_((CxArray*)&(array), sizeof((array).data[0]), fn)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
759
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
760 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
761 * Sorts an array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
762 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
763 * @param array the name of the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
764 * @param fn (@c cx_compare_func2) the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
765 * @param context (@c void*) the context for the compare function
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
766 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
767 #define cx_array_sort_c(array, fn, context) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
768 cx_array_sort_c_((CxArray*)&(array), sizeof((array).data[0]), fn, context)
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
769
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
770 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
771 * Creates an iterator over the elements of an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
772 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
773 * Internal function - do not use.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
774 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
775 * @param array a pointer to the array structure
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
776 * @param elem_size the size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
777 * @return an iterator over the elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
778 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
779 CX_EXTERN CX_NODISCARD CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
780 CxIterator cx_array_iterator_(CxArray *array, size_t elem_size);
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
781
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
782 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
783 * Creates an iterator over the elements of an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
784 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
785 * The iterator will yield pointers to the elements.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
786 *
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
787 * This iterator cannot be used to remove elements
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
788 * because it does not get a modifiable reference to the array's size.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
789 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
790 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
791 * @return an iterator over the elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
792 * @see cx_array_iterator_ptr()
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
793 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
794 #define cx_array_iterator(array) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
795 cx_array_iterator_((CxArray*)&(array), sizeof((array).data[0]))
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
796
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
797 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
798 * Creates an iterator over the elements of an array containing pointers.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
799 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
800 * Internal function - do not use.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
801 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
802 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
803 * @return an iterator over the elements
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
804 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
805 CX_EXTERN CX_NODISCARD CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
806 CxIterator cx_array_iterator_ptr_(CxArray *array);
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
807
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
808 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
809 * Creates an iterator over the elements of an array containing pointers.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
810 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
811 * The iterator will yield the elements themselves, which are supposed to
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
812 * be pointers.
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
813 *
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
814 * This iterator cannot be used to remove elements
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
815 * because it does not get a modifiable reference to the array's size.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
816 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
817 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
818 * @return an iterator over the elements
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
819 * @see cx_array_iterator()
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
820 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
821 #define cx_array_iterator_ptr(array) \
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
822 cx_array_iterator_ptr_((CxArray*)&(array))
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
823
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
824
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
825 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
826 * Removes elements from the array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
827 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
828 * Internal function - do not use.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
829 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
830 * @param array a pointer to the array structure
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
831 * @param elem_size the size of one element
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
832 * @param index the index of the first element to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
833 * @param n the number of elements to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
834 * @param fast indicates whether tail elements should be copied into the gap
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
835 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
836 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
837 void cx_array_remove_(CxArray *array, size_t elem_size, size_t index, size_t n, bool fast);
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
838
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
839 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
840 * Removes one element from the array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
841 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
842 * Tail elements are all moved by one. If you don't need a stable order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
843 * in the array, consider using cx_array_remove_fast().
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
844 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
845 * If the index is out of bounds, this function does nothing.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
846 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
847 * @param array the name of the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
848 * @param index (@c size_t) the index of the element to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
849 * @see cx_array_remove_fast()
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
850 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
851 #define cx_array_remove(array, index) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
852 cx_array_remove_((CxArray*)&(array), sizeof((array).data[0]), index, 1, false)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
853
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
854 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
855 * Removes one element from the array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
856 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
857 * The gap will be filled with a copy of the last element in the array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
858 * This changes the order of elements. If you want a stable order,
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
859 * use cx_array_remove() instead.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
860 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
861 * If the index is out of bounds, this function does nothing.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
862 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
863 * @param array the name of the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
864 * @param index (@c size_t) the index of the element to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
865 * @see cx_array_remove()
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
866 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
867 #define cx_array_remove_fast(array, index) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
868 cx_array_remove_((CxArray*)&(array), sizeof((array).data[0]), index, 1, true)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
869
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
870 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
871 * Removes multiple elements from the array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
872 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
873 * Tail elements are all moved to close the gap. If you don't need a stable
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
874 * order in the array, consider using cx_array_remove_array_fast().
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
875 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
876 * If the index is out of bounds, this function does nothing.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
877 * If @n overflows the array, this function removes as many elements as it can.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
878 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
879 * @param array the name of the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
880 * @param index (@c size_t) the index of the first element to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
881 * @param n (@c size_t) the number of elements to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
882 * @see cx_array_remove_array_fast()
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
883 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
884 #define cx_array_remove_array(array, index, n) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
885 cx_array_remove_((CxArray*)&(array), sizeof((array).data[0]), index, n, false)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
886
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
887 /**
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
888 * Removes multiple elements from the array.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
889 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
890 * Tail elements are copied into the gap. If you have more tail elements
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
891 * than the number of elements that are removed, this will change the order
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
892 * of elements. If you want a stable order, use cx_array_remove_array() instead.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
893 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
894 * If the index is out of bounds, this function does nothing.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
895 * If @n overflows the array, this function removes as many elements as it can.
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
896 *
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
897 * @param array the name of the array
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
898 * @param index (@c size_t) the index of the first element to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
899 * @param n (@c size_t) the number of elements to remove
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
900 * @see cx_array_remove_array()
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
901 */
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
902 #define cx_array_remove_array_fast(array, index, n) \
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
903 cx_array_remove_((CxArray*)&(array), sizeof((array).data[0]), index, n, true)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
904
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
905 /**
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
906 * Deallocates an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
907 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
908 * Internal function - do not use.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
909 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
910 * @param allocator (@c CxAllocator*) the allocator which was used to allocate the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
911 * @param array a pointer to the array structure
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
912 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
913 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
914 void cx_array_free_(const CxAllocator *allocator, CxArray *array);
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
915
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
916 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
917 * Deallocates an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
918 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
919 * The structure is reset to zero and can be re-initialized with
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
920 * cx_array_inita().
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
921 *
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
922 * @param array the name of the array
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
923 */
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
924 #define cx_array_free(array) cx_array_free_(cxDefaultAllocator, (CxArray*)&(array))
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
925
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
926 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
927 * Deallocates an array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
928 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
929 * The structure is reset to zero and can be re-initialized with
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
930 * cx_array_init_a().
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
931 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
932 * @param allocator (@c CxAllocator*) the allocator which was used to allocate the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
933 * @param array the name of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
934 */
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
935 #define cx_array_free_a(allocator, array) cx_array_free_(allocator, (CxArray*)&(array))
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
936
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
937
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
938 /**
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
939 * Searches the largest lower bound in a sorted array.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
940 *
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
941 * In other words, this function returns the index of the largest element
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
942 * in @p arr that is less or equal to @p elem with respect to @p cmp_func.
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
943 * When no such element exists, @p size is returned.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
944 *
943
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
945 * When such an element exists more than once, the largest index of all those
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
946 * elements is returned.
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
947 *
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
948 * If @p elem is contained in the array, this is identical to
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
949 * #cx_array_binary_search().
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
950 *
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
951 * If the array is not sorted with respect to the @p cmp_func, the behavior
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
952 * is undefined.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
953 *
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
954 * @param arr the array to search
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
955 * @param size the size of the array
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
956 * @param elem_size the size of one element
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
957 * @param elem the element to find
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
958 * @param cmp_func the compare function
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
959 * @return the index of the largest lower bound, or @p size
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
960 * @see cx_array_binary_search_sup()
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
961 * @see cx_array_binary_search()
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
962 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
963 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
964 size_t cx_array_binary_search_inf(const void *arr, size_t size,
870
e167cf006213 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 845
diff changeset
965 size_t elem_size, const void *elem, cx_compare_func cmp_func);
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
966
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
967 /**
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
968 * Searches an item in a sorted array.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
969 *
943
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
970 * When such an element exists more than once, the largest index of all those
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
971 * elements is returned.
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
972 *
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
973 * If the array is not sorted with respect to the @p cmp_func, the behavior
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
974 * is undefined.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
975 *
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
976 * @param arr the array to search
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
977 * @param size the size of the array
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
978 * @param elem_size the size of one element
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
979 * @param elem the element to find
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
980 * @param cmp_func the compare function
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
981 * @return the index of the element in the array, or @p size if the element
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
982 * cannot be found
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
983 * @see cx_array_binary_search_inf()
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
984 * @see cx_array_binary_search_sup()
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
985 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
986 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
987 size_t cx_array_binary_search(const void *arr, size_t size,
870
e167cf006213 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 845
diff changeset
988 size_t elem_size, const void *elem, cx_compare_func cmp_func);
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
989
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
990 /**
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
991 * Searches the smallest upper bound in a sorted array.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
992 *
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
993 * In other words, this function returns the index of the smallest element
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
994 * in @p arr that is greater or equal to @p elem with respect to @p cmp_func.
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
995 * When no such element exists, @p size is returned.
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
996 *
943
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
997 * When such an element exists more than once, the smallest index of all those
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
998 * elements is returned.
9b5948aa5b90 update ucx to version 3.2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 870
diff changeset
999 *
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
1000 * If @p elem is contained in the array, this is identical to
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1001 * #cx_array_binary_search().
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1002 *
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
1003 * If the array is not sorted with respect to the @p cmp_func, the behavior
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1004 * is undefined.
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1005 *
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1006 * @param arr the array to search
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1007 * @param size the size of the array
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1008 * @param elem_size the size of one element
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1009 * @param elem the element to find
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1010 * @param cmp_func the compare function
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
1011 * @return the index of the smallest upper bound, or @p size
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
1012 * @see cx_array_binary_search_inf()
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
1013 * @see cx_array_binary_search()
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1014 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1015 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1016 size_t cx_array_binary_search_sup(const void *arr, size_t size,
870
e167cf006213 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 845
diff changeset
1017 size_t elem_size, const void *elem, cx_compare_func cmp_func);
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1018
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1019
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1020 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1021 * Searches the largest lower bound in a sorted array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1022 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1023 * In other words, this function returns the index of the largest element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1024 * in @p arr that is less or equal to @p elem with respect to @p cmp_func.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1025 * When no such element exists, @p size is returned.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1026 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1027 * When such an element exists more than once, the largest index of all those
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1028 * elements is returned.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1029 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1030 * If @p elem is contained in the array, this is identical to
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1031 * #cx_array_binary_search().
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1032 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1033 * If the array is not sorted with respect to the @p cmp_func, the behavior
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1034 * is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1035 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1036 * @param arr the array to search
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1037 * @param size the size of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1038 * @param elem_size the size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1039 * @param elem the element to find
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1040 * @param cmp_func the compare function
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1041 * @param context the context for the compare function
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1042 * @return the index of the largest lower bound, or @p size
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1043 * @see cx_array_binary_search_sup()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1044 * @see cx_array_binary_search()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1045 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1046 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1047 size_t cx_array_binary_search_inf_c(const void *arr, size_t size,
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1048 size_t elem_size, const void *elem, cx_compare_func2 cmp_func, void *context);
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1049
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1050 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1051 * Searches an item in a sorted array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1052 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1053 * When such an element exists more than once, the largest index of all those
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1054 * elements is returned.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1055 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1056 * If the array is not sorted with respect to the @p cmp_func, the behavior
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1057 * is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1058 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1059 * @param arr the array to search
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1060 * @param size the size of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1061 * @param elem_size the size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1062 * @param elem the element to find
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1063 * @param cmp_func the compare function
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1064 * @param context the context for the compare function
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1065 * @return the index of the element in the array, or @p size if the element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1066 * cannot be found
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1067 * @see cx_array_binary_search_inf()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1068 * @see cx_array_binary_search_sup()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1069 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1070 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1071 size_t cx_array_binary_search_c(const void *arr, size_t size,
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1072 size_t elem_size, const void *elem, cx_compare_func2 cmp_func, void *context);
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1073
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1074 /**
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1075 * Searches the smallest upper bound in a sorted array.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1076 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1077 * In other words, this function returns the index of the smallest element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1078 * in @p arr that is greater or equal to @p elem with respect to @p cmp_func.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1079 * When no such element exists, @p size is returned.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1080 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1081 * When such an element exists more than once, the smallest index of all those
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1082 * elements is returned.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1083 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1084 * If @p elem is contained in the array, this is identical to
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1085 * #cx_array_binary_search().
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1086 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1087 * If the array is not sorted with respect to the @p cmp_func, the behavior
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1088 * is undefined.
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1089 *
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1090 * @param arr the array to search
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1091 * @param size the size of the array
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1092 * @param elem_size the size of one element
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1093 * @param elem the element to find
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1094 * @param cmp_func the compare function
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1095 * @param context the context for the compare function
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1096 * @return the index of the smallest upper bound, or @p size
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1097 * @see cx_array_binary_search_inf()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1098 * @see cx_array_binary_search()
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1099 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1100 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1101 size_t cx_array_binary_search_sup_c(const void *arr, size_t size,
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1102 size_t elem_size, const void *elem, cx_compare_func2 cmp_func, void *context);
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1103
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1104 /**
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1105 * Swaps two array elements.
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1106 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1107 * @param arr the array
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1108 * @param elem_size the element size
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
1109 * @param idx1 index of the first element
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
1110 * @param idx2 index of the second element
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1111 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1112 CX_EXTERN CX_NONNULL
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1113 void cx_array_swap(void *arr, size_t elem_size, size_t idx1, size_t idx2);
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1114
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1115 /**
440
7c4b9cba09ca update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 324
diff changeset
1116 * Allocates an array list for storing elements with @p elem_size bytes each.
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1117 *
471
063a9f29098c ucx update + fix doc attach/detach + fix ui_set with unbound values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 440
diff changeset
1118 * If @p elem_size is #CX_STORE_POINTERS, the created list stores pointers instead of
845
f3ab28ed22e5 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 629
diff changeset
1119 * copies of the added elements, and the compare function will be automatically set
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1120 * to cx_cmp_ptr().
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1121 *
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1122 * @param allocator the allocator for allocating the list memory
629
0385a450c2a6 add list initializer
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 471
diff changeset
1123 * (if @c NULL, the cxDefaultAllocator will be used)
324
ce13a778654a update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
1124 * @param elem_size the size of each element in bytes
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1125 * @param initial_capacity the initial number of elements the array can store
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1126 * @return the created list
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1127 */
1040
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1128 CX_EXTERN CX_NODISCARD CX_MALLOC CX_DEALLOC(cxListFree, 1)
473d8cb58a6c update ucx to version 4.0
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 1034
diff changeset
1129 CxList *cxArrayListCreate(const CxAllocator *allocator,
1016
ccde46662db7 update ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 943
diff changeset
1130 size_t elem_size, size_t initial_capacity);
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1131
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1132 #endif // UCX_ARRAY_LIST_H

mercurial