src/cx/array_list.h

Sun, 14 Jan 2024 13:50:17 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 14 Jan 2024 13:50:17 +0100
changeset 806
e06249e09f99
parent 804
5136f2fc32ec
child 807
c8d692131b1e
permissions
-rw-r--r--

add constant for reading out strstr sbo size - relates to #343

also fixes the related test which was working with the old SBO size of 256 and was broken after increasing it to 512

606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 /**
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 * \file array_list.h
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 * \brief Array list implementation.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 * \details Also provides several low-level functions for custom array list implementations.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 * \author Mike Becker
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 * \author Olaf Wintermann
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 * \copyright 2-Clause BSD License
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 */
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 #ifndef UCX_ARRAY_LIST_H
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 #define UCX_ARRAY_LIST_H
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40
617
cec11387c1be fix include in array_list.h
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 612
diff changeset
41 #include "list.h"
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 #ifdef __cplusplus
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 extern "C" {
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 #endif
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 /**
804
5136f2fc32ec add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents: 795
diff changeset
48 * Set this flag to true, if you want to disable the use of SBO for
5136f2fc32ec add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents: 795
diff changeset
49 * array list swap operations.
5136f2fc32ec add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents: 795
diff changeset
50 */
5136f2fc32ec add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents: 795
diff changeset
51 extern bool CX_DISABLE_ARRAY_LIST_SWAP_SBO;
5136f2fc32ec add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents: 795
diff changeset
52
5136f2fc32ec add CX_DISABLE_ARRAY_LIST_SWAP_SBO flag
Mike Becker <universe@uap-core.de>
parents: 795
diff changeset
53 /**
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
54 * Defines a reallocation mechanism for arrays.
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
55 */
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
56 struct cx_array_reallocator_s {
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
57 /**
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
58 * Re-allocates space for the given array.
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
59 *
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
60 * Implementations are not required to free the original array.
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
61 * This allows re-allocation of static memory by allocating heap memory
795
00ba1bfa4ab4 fix documentation of reallocator struct
Mike Becker <universe@uap-core.de>
parents: 763
diff changeset
62 * and copying the array contents. The information in the custom fields of
00ba1bfa4ab4 fix documentation of reallocator struct
Mike Becker <universe@uap-core.de>
parents: 763
diff changeset
63 * the referenced allocator can be used to track the state of the memory
00ba1bfa4ab4 fix documentation of reallocator struct
Mike Becker <universe@uap-core.de>
parents: 763
diff changeset
64 * or to transport other additional data.
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
65 *
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
66 * @param array the array to reallocate
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
67 * @param capacity the new capacity (number of elements)
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
68 * @param elem_size the size of each element
609
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
69 * @param alloc a reference to this allocator
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
70 * @return a pointer to the reallocated memory or \c NULL on failure
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
71 */
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
72 void *(*realloc)(
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
73 void *array,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
74 size_t capacity,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
75 size_t elem_size,
609
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
76 struct cx_array_reallocator_s *alloc
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
77 );
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
78
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
79 /**
609
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
80 * Custom data pointer.
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
81 */
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
82 void *ptr1;
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
83 /**
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
84 * Custom data pointer.
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
85 */
609
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
86 void *ptr2;
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
87 /**
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
88 * Custom data integer.
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
89 */
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
90 size_t int1;
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
91 /**
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
92 * Custom data integer.
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
93 */
6ae8146d9f62 more custom data for array re-allocator
Mike Becker <universe@uap-core.de>
parents: 608
diff changeset
94 size_t int2;
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
95 };
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
96
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
97 /**
610
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
98 * Return codes for cx_array_copy().
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
99 */
612
820ee59121b4 fix typo in enum cx_array_copy_result
Mike Becker <universe@uap-core.de>
parents: 610
diff changeset
100 enum cx_array_copy_result {
610
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
101 CX_ARRAY_COPY_SUCCESS,
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
102 CX_ARRAY_COPY_REALLOC_NOT_SUPPORTED,
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
103 CX_ARRAY_COPY_REALLOC_FAILED,
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
104 };
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
105
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
106 /**
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
107 * Copies elements from one array to another.
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
108 *
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
109 * The elements are copied to the \p target array at the specified \p index,
637
ceadf0792ded remove the untrue restriction for the index parameter of cx_array_copy() from the documentation
Mike Becker <universe@uap-core.de>
parents: 628
diff changeset
110 * overwriting possible elements. The \p index does not need to be in range of
ceadf0792ded remove the untrue restriction for the index parameter of cx_array_copy() from the documentation
Mike Becker <universe@uap-core.de>
parents: 628
diff changeset
111 * the current array \p size. If the new index plus the number of elements added
ceadf0792ded remove the untrue restriction for the index parameter of cx_array_copy() from the documentation
Mike Becker <universe@uap-core.de>
parents: 628
diff changeset
112 * would extend the array's size, and \p capacity is not \c NULL, the remaining
ceadf0792ded remove the untrue restriction for the index parameter of cx_array_copy() from the documentation
Mike Becker <universe@uap-core.de>
parents: 628
diff changeset
113 * capacity is used.
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
114 *
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
115 * If the capacity is insufficient to hold the new data, a reallocation
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
116 * attempt is made, unless the allocator is set to \c NULL, in which case
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
117 * this function ultimately returns a failure.
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
118 *
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
119 * @param target the target array
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
120 * @param size a pointer to the size of the target array
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
121 * @param capacity a pointer to the target array's capacity -
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
122 * \c NULL if only the size shall be used to bound the array
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
123 * @param index the index where the copied elements shall be placed
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
124 * @param src the source array
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
125 * @param elem_size the size of one element
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
126 * @param elem_count the number of elements to copy
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
127 * @param reallocator the array re-allocator to use, or \c NULL
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
128 * if re-allocation shall not happen
610
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
129 * @return zero on success, non-zero error code on failure
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
130 */
612
820ee59121b4 fix typo in enum cx_array_copy_result
Mike Becker <universe@uap-core.de>
parents: 610
diff changeset
131 enum cx_array_copy_result cx_array_copy(
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
132 void **target,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
133 size_t *size,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
134 size_t *capacity,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
135 size_t index,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
136 void const *src,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
137 size_t elem_size,
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
138 size_t elem_count,
610
de5d3ee6435f #219 array list: implement add and at
Mike Becker <universe@uap-core.de>
parents: 609
diff changeset
139 struct cx_array_reallocator_s *reallocator
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
140 ) __attribute__((__nonnull__(1, 2, 5)));
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
141
623
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
142
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
143 /**
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
144 * Swaps two array elements.
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
145 *
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
146 * @param arr the array
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
147 * @param elem_size the element size
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
148 * @param idx1 index of first element
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
149 * @param idx2 index of second element
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
150 */
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
151 void cx_array_swap(
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
152 void *arr,
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
153 size_t elem_size,
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
154 size_t idx1,
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
155 size_t idx2
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
156 ) __attribute__((__nonnull__));
21082350a590 #219 array list: implement reverse
Mike Becker <universe@uap-core.de>
parents: 617
diff changeset
157
608
2e93521145ac proposal for a low level array copy
Mike Becker <universe@uap-core.de>
parents: 606
diff changeset
158 /**
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159 * Allocates an array list for storing elements with \p item_size bytes each.
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
160 *
669
dce9b8450656 add docs for CX_STORE_POINTERS and remove cxHashMapCreateForPointers()
Mike Becker <universe@uap-core.de>
parents: 662
diff changeset
161 * If \p item_size is CX_STORE_POINTERS, the created list will be created as if
763
741a2040fa33 make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
162 * cxListStorePointers() was called immediately after creation and the compare
741a2040fa33 make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
163 * function will be automatically set to cx_cmp_ptr(), if none is given.
669
dce9b8450656 add docs for CX_STORE_POINTERS and remove cxHashMapCreateForPointers()
Mike Becker <universe@uap-core.de>
parents: 662
diff changeset
164 *
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
165 * @param allocator the allocator for allocating the list memory
670
4ad8ea3aee49 allow NULL for allocator and comparator
Mike Becker <universe@uap-core.de>
parents: 669
diff changeset
166 * (if \c NULL the cxDefaultAllocator will be used)
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
167 * @param comparator the comparator for the elements
763
741a2040fa33 make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
168 * (if \c NULL, and the list is not storing pointers, sort and find
741a2040fa33 make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
169 * functions will not work)
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
170 * @param item_size the size of each element in bytes
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
171 * @param initial_capacity the initial number of elements the array can store
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
172 * @return the created list
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
173 */
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
174 CxList *cxArrayListCreate(
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
175 CxAllocator const *allocator,
677
b09aae58bba4 refactoring of collections to make use of destructors in map implementations
Mike Becker <universe@uap-core.de>
parents: 670
diff changeset
176 cx_compare_func comparator,
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
177 size_t item_size,
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
178 size_t initial_capacity
670
4ad8ea3aee49 allow NULL for allocator and comparator
Mike Becker <universe@uap-core.de>
parents: 669
diff changeset
179 );
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180
662
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
181 /**
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
182 * Allocates an array list for storing elements with \p item_size bytes each.
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
183 *
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
184 * The list will use the cxDefaultAllocator and \em NO compare function.
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
185 * If you want to call functions that need a compare function, you have to
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
186 * set it immediately after creation or use cxArrayListCreate().
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
187 *
669
dce9b8450656 add docs for CX_STORE_POINTERS and remove cxHashMapCreateForPointers()
Mike Becker <universe@uap-core.de>
parents: 662
diff changeset
188 * If \p item_size is CX_STORE_POINTERS, the created list will be created as if
763
741a2040fa33 make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
189 * cxListStorePointers() was called immediately after creation and the compare
741a2040fa33 make cx_cmp_ptr default comparator for pointer lists - relates to #340
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
190 * function will be automatically set to cx_cmp_ptr().
669
dce9b8450656 add docs for CX_STORE_POINTERS and remove cxHashMapCreateForPointers()
Mike Becker <universe@uap-core.de>
parents: 662
diff changeset
191 *
662
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
192 * @param item_size the size of each element in bytes
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
193 * @param initial_capacity the initial number of elements the array can store
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
194 * @return the created list
d0d95740071b add simple functions for creating lists
Mike Becker <universe@uap-core.de>
parents: 637
diff changeset
195 */
670
4ad8ea3aee49 allow NULL for allocator and comparator
Mike Becker <universe@uap-core.de>
parents: 669
diff changeset
196 #define cxArrayListCreateSimple(item_size, initial_capacity) \
4ad8ea3aee49 allow NULL for allocator and comparator
Mike Becker <universe@uap-core.de>
parents: 669
diff changeset
197 cxArrayListCreate(NULL, NULL, item_size, initial_capacity)
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
198
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
199 #ifdef __cplusplus
628
1e2be40f0cb5 use //-style single line comments everywhere
Mike Becker <universe@uap-core.de>
parents: 623
diff changeset
200 } // extern "C"
606
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
201 #endif
314e9288af2f add array list tests
Mike Becker <universe@uap-core.de>
parents:
diff changeset
202
628
1e2be40f0cb5 use //-style single line comments everywhere
Mike Becker <universe@uap-core.de>
parents: 623
diff changeset
203 #endif // UCX_ARRAY_LIST_H

mercurial