Fri, 23 May 2025 12:44:24 +0200
make test-compile depend on both static and shared
the shared lib is not needed for the tests,
but when run with coverage, gcov will be confused
when outdated line information is available from
a previous shared build
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
6ce8cfa10a96
add iterator interface + linked list iterator
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 |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | */ |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | /** |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
29 | * @file iterator.h |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
30 | * @brief Interface for iterator implementations. |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
31 | * @author Mike Becker |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
32 | * @author Olaf Wintermann |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
33 | * @copyright 2-Clause BSD License |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | */ |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | #ifndef UCX_ITERATOR_H |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | #define UCX_ITERATOR_H |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | #include "common.h" |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | |
|
933
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
41 | #ifdef __cplusplus |
|
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
42 | extern "C" { |
|
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
43 | #endif |
|
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
44 | |
|
1035
9b6ded88d7a0
add missing documentation in iterator.h
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
45 | /** |
|
9b6ded88d7a0
add missing documentation in iterator.h
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
46 | * Common data for all iterators. |
|
9b6ded88d7a0
add missing documentation in iterator.h
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
47 | */ |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
48 | struct cx_iterator_base_s { |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
49 | /** |
|
1192
1f69336faa63
fix some typos - issue #548
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1180
diff
changeset
|
50 | * True if the iterator points to valid data. |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
51 | */ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
858
diff
changeset
|
52 | bool (*valid)(const void *); |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
53 | |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
54 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
55 | * Returns a pointer to the current element. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
56 | * |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
57 | * When valid returns false, the behavior of this function is undefined. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
58 | */ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
858
diff
changeset
|
59 | void *(*current)(const void *); |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
60 | |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
61 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
62 | * Original implementation in case the function needs to be wrapped. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
63 | */ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
858
diff
changeset
|
64 | void *(*current_impl)(const void *); |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
65 | |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
66 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
67 | * Advances the iterator. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
68 | * |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
69 | * When valid returns false, the behavior of this function is undefined. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
70 | */ |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
71 | void (*next)(void *); |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
72 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
73 | * Indicates whether this iterator may remove elements. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
74 | */ |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
75 | bool mutating; |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
76 | /** |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
77 | * Internal flag for removing the current element when advancing. |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
78 | */ |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
79 | bool remove; |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
80 | }; |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
81 | |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
82 | /** |
|
1214
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
83 | * Convenience type definition for the base structure of an iterator. |
|
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
84 | * @see #CX_ITERATOR_BASE |
|
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
85 | */ |
|
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
86 | typedef struct cx_iterator_base_s CxIteratorBase; |
|
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
87 | |
|
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
88 | /** |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
89 | * Declares base attributes for an iterator. |
|
858
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
90 | * Must be the first member of an iterator structure. |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
91 | */ |
|
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
92 | #define CX_ITERATOR_BASE struct cx_iterator_base_s base |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
93 | |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
94 | /** |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
95 | * Internal iterator struct - use CxIterator. |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
96 | */ |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
97 | struct cx_iterator_s { |
|
1035
9b6ded88d7a0
add missing documentation in iterator.h
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
98 | /** |
|
9b6ded88d7a0
add missing documentation in iterator.h
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
99 | * Inherited common data for all iterators. |
|
9b6ded88d7a0
add missing documentation in iterator.h
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
100 | */ |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
101 | CX_ITERATOR_BASE; |
|
641
d402fead3386
add new pointer list wrapper - resolves #234
Mike Becker <universe@uap-core.de>
parents:
630
diff
changeset
|
102 | |
|
d402fead3386
add new pointer list wrapper - resolves #234
Mike Becker <universe@uap-core.de>
parents:
630
diff
changeset
|
103 | /** |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
104 | * Handle for the current element. |
|
495
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
105 | */ |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
106 | void *elem_handle; |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
107 | |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
108 | /** |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
109 | * Handle for the source collection, if any. |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
110 | */ |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
111 | union { |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
112 | /** |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
113 | * Access for mutating iterators. |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
114 | */ |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
115 | void *m; |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
116 | /** |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
117 | * Access for normal iterators. |
|
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
118 | */ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
858
diff
changeset
|
119 | const void *c; |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
120 | } src_handle; |
|
495
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
121 | |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
122 | /** |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
123 | * If the iterator is position-aware, contains the index of the element in the underlying collection. |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
124 | * Otherwise, this field is usually uninitialized. |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
125 | */ |
|
2856c74e18ba
add the feature to remove items during iteration
Mike Becker <universe@uap-core.de>
parents:
494
diff
changeset
|
126 | size_t index; |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
127 | |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
128 | /** |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
129 | * The size of an individual element. |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
130 | */ |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
131 | size_t elem_size; |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
132 | |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
133 | /** |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
134 | * May contain the total number of elements, if known. |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
135 | * Shall be set to @c SIZE_MAX when the total number is unknown during iteration. |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
136 | */ |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
137 | size_t elem_count; |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
138 | }; |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
139 | |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
140 | /** |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
141 | * Iterator type. |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
142 | * |
|
741
378578666c83
fix iterator doc
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
704
diff
changeset
|
143 | * An iterator points to a certain element in a (possibly unbounded) chain of elements. |
|
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
144 | * Iterators that are based on collections (which have a defined "first" element), are supposed |
|
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
145 | * to be "position-aware", which means that they keep track of the current index within the collection. |
|
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
146 | * |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
147 | * @note Objects that are pointed to by an iterator are always mutable through that iterator. However, |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
148 | * any concurrent mutation of the collection other than by this iterator makes this iterator invalid, |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
149 | * and it must not be used anymore. |
|
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
150 | */ |
|
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
151 | typedef struct cx_iterator_s CxIterator; |
|
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
152 | |
|
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
497
diff
changeset
|
153 | /** |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
154 | * Checks if the iterator points to valid data. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
155 | * |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
156 | * @param iter the iterator |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
157 | * @retval true if the iterator points to valid data |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
158 | * @retval false if the iterator already moved past the end |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
159 | */ |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
160 | #define cxIteratorValid(iter) (iter).base.valid(&(iter)) |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
161 | |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
162 | /** |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | * Returns a pointer to the current element. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
164 | * |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
165 | * The behavior is undefined if this iterator is invalid. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
166 | * |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
167 | * @param iter the iterator |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
168 | * @return a pointer to the current element |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
169 | * @see cxIteratorValid() |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
170 | */ |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
171 | #define cxIteratorCurrent(iter) (iter).base.current(&iter) |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | /** |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | * Advances the iterator to the next element. |
|
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
175 | * |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
176 | * @param iter the iterator |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
177 | */ |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
178 | #define cxIteratorNext(iter) (iter).base.next(&iter) |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
179 | |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
180 | /** |
|
829
7d4e31d295af
remove unnecessary flag_removal function
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
181 | * Flags the current element for removal, if this iterator is mutating. |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
182 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
183 | * Does nothing for non-mutating iterators. |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
184 | * |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
185 | * @param iter the iterator |
|
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
186 | */ |
|
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
187 | #define cxIteratorFlagRemoval(iter) (iter).base.remove |= (iter).base.mutating |
|
494
6ce8cfa10a96
add iterator interface + linked list iterator
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
188 | |
| 496 | 189 | /** |
|
858
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
190 | * Obtains a reference to an arbitrary iterator. |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
191 | * |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
192 | * This is useful for APIs that expect some iterator as an argument. |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
193 | * |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
194 | * @param iter the iterator |
|
1214
ee4e33284f0c
add convenience type CxIteratorBase
Mike Becker <universe@uap-core.de>
parents:
1193
diff
changeset
|
195 | * @return (@c struct @c cx_iterator_base_s*) a pointer to the iterator |
|
858
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
196 | */ |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
197 | #define cxIteratorRef(iter) &((iter).base) |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
198 | |
|
d9ad7904c4c2
add cxIteratorRef() macro
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
199 | /** |
| 496 | 200 | * Loops over an iterator. |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
201 | * |
| 496 | 202 | * @param type the type of the elements |
| 203 | * @param elem the name of the iteration variable | |
| 204 | * @param iter the iterator | |
| 205 | */ | |
| 206 | #define cx_foreach(type, elem, iter) \ | |
|
630
ac5e7f789048
separate iterators and mutating iterators
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
207 | for (type elem; cxIteratorValid(iter) && (elem = (type)cxIteratorCurrent(iter)) != NULL ; cxIteratorNext(iter)) |
| 496 | 208 | |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
209 | |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
210 | /** |
| 852 | 211 | * Creates an iterator for the specified plain array. |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
212 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
213 | * The @p array can be @c NULL in which case the iterator will be immediately |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
214 | * initialized such that #cxIteratorValid() returns @c false. |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
215 | * |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
216 | * This iterator yields the addresses of the array elements. |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
217 | * If you want to iterator over an array of pointers, you can |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
218 | * use cxIteratorPtr() to create an iterator which directly |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
219 | * yields the stored pointers. |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
220 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
221 | * @param array a pointer to the array (can be @c NULL) |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
222 | * @param elem_size the size of one array element |
|
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
223 | * @param elem_count the number of elements in the array |
|
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
224 | * @return an iterator for the specified array |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
225 | * @see cxIteratorPtr() |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
226 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
933
diff
changeset
|
227 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
228 | cx_attr_export |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
229 | CxIterator cxIterator( |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
858
diff
changeset
|
230 | const void *array, |
|
851
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
231 | size_t elem_size, |
|
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
232 | size_t elem_count |
|
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
233 | ); |
|
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
234 | |
|
adb4e0737c33
issue #389 : add separate function for immutable arrays
Mike Becker <universe@uap-core.de>
parents:
850
diff
changeset
|
235 | /** |
| 852 | 236 | * Creates a mutating iterator for the specified plain array. |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
237 | * |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
238 | * While the iterator is in use, the array may only be altered by removing |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
239 | * elements through #cxIteratorFlagRemoval(). Every other change to the array |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
240 | * will bring this iterator to an undefined state. |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
241 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
242 | * When @p remove_keeps_order is set to @c false, removing an element will only |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
243 | * move the last element to the position of the removed element, instead of |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
244 | * moving all subsequent elements by one. Usually, when the order of elements is |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
245 | * not important, this parameter should be set to @c false. |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
246 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
247 | * The @p array can be @c NULL in which case the iterator will be immediately |
|
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
248 | * initialized such that #cxIteratorValid() returns @c false. |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
249 | * |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
250 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
251 | * @param array a pointer to the array (can be @c NULL) |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
252 | * @param elem_size the size of one array element |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
253 | * @param elem_count the number of elements in the array |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
254 | * @param remove_keeps_order @c true if the order of elements must be preserved |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
255 | * when removing an element |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
256 | * @return an iterator for the specified array |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
257 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
933
diff
changeset
|
258 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
259 | cx_attr_export |
|
853
d4baf4dd55c3
simplify iterator structures
Mike Becker <universe@uap-core.de>
parents:
852
diff
changeset
|
260 | CxIterator cxMutIterator( |
|
850
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
261 | void *array, |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
262 | size_t elem_size, |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
263 | size_t elem_count, |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
264 | bool remove_keeps_order |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
265 | ); |
|
b2bc48c2b251
add iterator over raw C arrays - closes #389
Mike Becker <universe@uap-core.de>
parents:
829
diff
changeset
|
266 | |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
267 | /** |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
268 | * Creates an iterator for the specified plain pointer array. |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
269 | * |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
270 | * This iterator assumes that every element in the array is a pointer |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
271 | * and yields exactly those pointers during iteration (while in contrast |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
272 | * an iterator created with cxIterator() would return the addresses |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
273 | * of those pointers within the array). |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
274 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
275 | * @param array a pointer to the array (can be @c NULL) |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
276 | * @param elem_count the number of elements in the array |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
277 | * @return an iterator for the specified array |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
278 | * @see cxIterator() |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
279 | */ |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
280 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
281 | cx_attr_export |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
282 | CxIterator cxIteratorPtr( |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
283 | const void *array, |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
284 | size_t elem_count |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
285 | ); |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
286 | |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
287 | /** |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
288 | * Creates a mutating iterator for the specified plain pointer array. |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
289 | * |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
290 | * This is the mutating variant of cxIteratorPtr(). See also |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
291 | * cxMutIterator(). |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
292 | * |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
293 | * @param array a pointer to the array (can be @c NULL) |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
294 | * @param elem_count the number of elements in the array |
|
1096
2cb1ed4da55d
refine docs for iterator.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1070
diff
changeset
|
295 | * @param remove_keeps_order @c true if the order of elements must be preserved |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
296 | * when removing an element |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
297 | * @return an iterator for the specified array |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
298 | * @see cxMutIterator() |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
299 | * @see cxIteratorPtr() |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
300 | */ |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
301 | cx_attr_nodiscard |
|
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1115
diff
changeset
|
302 | cx_attr_export |
|
1070
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
303 | CxIterator cxMutIteratorPtr( |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
304 | void *array, |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
305 | size_t elem_count, |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
306 | bool remove_keeps_order |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
307 | ); |
|
0a5a356a4486
add array iterator over pointer arrays
Mike Becker <universe@uap-core.de>
parents:
1035
diff
changeset
|
308 | |
|
933
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
309 | #ifdef __cplusplus |
|
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
310 | } // extern "C" |
|
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
311 | #endif |
|
40bf2f212d2a
add extern "C" to iterator.h
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
312 | |
|
628
1e2be40f0cb5
use //-style single line comments everywhere
Mike Becker <universe@uap-core.de>
parents:
551
diff
changeset
|
313 | #endif // UCX_ITERATOR_H |