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
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
929016224c3c
add ported UCX buffer implementation
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 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | /** |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
30 | * @file buffer.h |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
32 | * @brief Advanced buffer implementation. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | * Instances of CxBuffer can be used to read from or to write to like one |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | * would do with a stream. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | * Some features for convenient use of the buffer |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | * can be enabled. See the documentation of the macro constants for more |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | * information. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
41 | * @author Mike Becker |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
42 | * @author Olaf Wintermann |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
43 | * @copyright 2-Clause BSD License |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | #ifndef UCX_BUFFER_H |
484
9e6900b1cf9d
add common.h include to all other header files
Mike Becker <universe@uap-core.de>
parents:
483
diff
changeset
|
47 | #define UCX_BUFFER_H |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | |
484
9e6900b1cf9d
add common.h include to all other header files
Mike Becker <universe@uap-core.de>
parents:
483
diff
changeset
|
49 | #include "common.h" |
501
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
50 | #include "allocator.h" |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
52 | #ifdef __cplusplus |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | extern "C" { |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | #endif |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
55 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
56 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | * No buffer features enabled (all flags cleared). |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
59 | #define CX_BUFFER_DEFAULT 0x00 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
60 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
61 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
62 | * If this flag is enabled, the buffer will automatically free its contents when destroyed. |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
63 | * |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
64 | * Do NOT set this flag together with #CX_BUFFER_COPY_ON_WRITE. It will be automatically |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
65 | * set when the copy-on-write operations is performed. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
67 | #define CX_BUFFER_FREE_CONTENTS 0x01 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
68 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
69 | /** |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
70 | * If this flag is enabled, the buffer will automatically extend its capacity. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
71 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
72 | #define CX_BUFFER_AUTO_EXTEND 0x02 |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
74 | /** |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
75 | * If this flag is enabled, the buffer will allocate new memory when written to. |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
76 | * |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
77 | * The current contents of the buffer will be copied to the new memory and the flag |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
78 | * will be cleared while the #CX_BUFFER_FREE_CONTENTS flag will be set automatically. |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
79 | */ |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
80 | #define CX_BUFFER_COPY_ON_WRITE 0x04 |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
81 | |
1028
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
82 | /** |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
83 | * If this flag is enabled, the buffer will copy its contents to a new memory area on reallocation. |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
84 | * |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
85 | * After performing the copy, the flag is automatically cleared. |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
86 | * This flag has no effect on buffers which do not have #CX_BUFFER_AUTO_EXTEND set, which is why |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
87 | * buffers automatically admit the auto-extend flag when initialized with copy-on-extend enabled. |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
88 | */ |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
89 | #define CX_BUFFER_COPY_ON_EXTEND 0x08 |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
90 | |
1110 | 91 | /** |
1112
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
92 | * Function pointer for cxBufferWrite that is compatible with cx_write_func. |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
93 | * @see cx_write_func |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
94 | */ |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
95 | #define cxBufferWriteFunc ((cx_write_func) cxBufferWrite) |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
96 | /** |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
97 | * Function pointer for cxBufferRead that is compatible with cx_read_func. |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
98 | * @see cx_read_func |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
99 | */ |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
100 | #define cxBufferReadFunc ((cx_read_func) cxBufferRead) |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
101 | |
22dc2163fffd
add convenience macros to avoid a fptr cast for cxBufferRead and cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
1110
diff
changeset
|
102 | /** |
1110 | 103 | * Configuration for automatic flushing. |
104 | */ | |
105 | struct cx_buffer_flush_config_s { | |
106 | /** | |
107 | * The buffer may not extend beyond this threshold before starting to flush. | |
108 | * | |
109 | * Only used when the buffer uses #CX_BUFFER_AUTO_EXTEND. | |
110 | * The threshold will be the maximum capacity the buffer is extended to | |
111 | * before flushing. | |
112 | */ | |
113 | size_t threshold; | |
114 | /** | |
115 | * The block size for the elements to flush. | |
116 | */ | |
117 | size_t blksize; | |
118 | /** | |
119 | * The maximum number of blocks to flush in one cycle. | |
120 | * | |
121 | * @attention while it is guaranteed that cxBufferFlush() will not flush | |
122 | * more blocks, this is not necessarily the case for cxBufferWrite(). | |
123 | * After performing a flush cycle, cxBufferWrite() will retry the write | |
124 | * operation and potentially trigger another flush cycle, until the | |
125 | * flush target accepts no more data. | |
126 | */ | |
127 | size_t blkmax; | |
128 | ||
129 | /** | |
130 | * The target for write function. | |
131 | */ | |
132 | void *target; | |
133 | ||
134 | /** | |
135 | * The write-function used for flushing. | |
136 | * If NULL, the flushed content gets discarded. | |
137 | */ | |
138 | cx_write_func wfunc; | |
139 | }; | |
140 | ||
141 | /** | |
1181
183bf43aa9b9
fix some typos - issue #548
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1180
diff
changeset
|
142 | * Type alias for the flush configuration struct. |
1110 | 143 | * |
144 | * @code | |
145 | * struct cx_buffer_flush_config_s { | |
146 | * size_t threshold; | |
147 | * size_t blksize; | |
148 | * size_t blkmax; | |
149 | * void *target; | |
150 | * cx_write_func wfunc; | |
151 | * }; | |
152 | * @endcode | |
153 | */ | |
154 | typedef struct cx_buffer_flush_config_s CxBufferFlushConfig; | |
155 | ||
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
156 | /** Structure for the UCX buffer data. */ |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
157 | struct cx_buffer_s { |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
158 | /** A pointer to the buffer contents. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
159 | union { |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
160 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
161 | * Data is interpreted as text. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
162 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | char *space; |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
164 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
165 | * Data is interpreted as binary. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
166 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
167 | unsigned char *bytes; |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
168 | }; |
501
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
169 | /** The allocator to use for automatic memory management. */ |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
761
diff
changeset
|
170 | const CxAllocator *allocator; |
1110 | 171 | /** |
172 | * Optional flush configuration | |
173 | * | |
174 | * @see cxBufferEnableFlushing() | |
175 | */ | |
1181
183bf43aa9b9
fix some typos - issue #548
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1180
diff
changeset
|
176 | CxBufferFlushConfig *flush; |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
177 | /** Current position of the buffer. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
178 | size_t pos; |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
179 | /** Current capacity (i.e. maximum size) of the buffer. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
180 | size_t capacity; |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
181 | /** Current size of the buffer content. */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
182 | size_t size; |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
184 | * Flag register for buffer features. |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
185 | * @see #CX_BUFFER_DEFAULT |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
186 | * @see #CX_BUFFER_FREE_CONTENTS |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
187 | * @see #CX_BUFFER_AUTO_EXTEND |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
188 | * @see #CX_BUFFER_COPY_ON_WRITE |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | */ |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
190 | int flags; |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
191 | }; |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
192 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
193 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
194 | * UCX buffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
195 | */ |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
196 | typedef struct cx_buffer_s CxBuffer; |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
197 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
198 | /** |
501
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
199 | * Initializes a fresh buffer. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
200 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
201 | * You may also provide a read-only @p space, in which case |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
202 | * you will need to cast the pointer, and you should set the |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
203 | * #CX_BUFFER_COPY_ON_WRITE flag. |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
204 | * |
1029
c065d196a2c8
add advice to set the size of a buffer initialized with existing data
Mike Becker <universe@uap-core.de>
parents:
1028
diff
changeset
|
205 | * You need to set the size manually after initialization, if |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
206 | * you provide @p space which already contains data. |
1029
c065d196a2c8
add advice to set the size of a buffer initialized with existing data
Mike Becker <universe@uap-core.de>
parents:
1028
diff
changeset
|
207 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
208 | * When you specify stack memory as @p space and decide to use |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
209 | * the auto-extension feature, you @em must use the |
1028
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
210 | * #CX_BUFFER_COPY_ON_EXTEND flag, instead of the |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
211 | * #CX_BUFFER_AUTO_EXTEND flag. |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
212 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
213 | * @note You may provide @c NULL as argument for @p space. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
214 | * Then this function will allocate the space and enforce |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
215 | * the #CX_BUFFER_FREE_CONTENTS flag. In that case, specifying |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
216 | * copy-on-write should be avoided, because the allocated |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
217 | * space will be leaking after the copy-on-write operation. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
218 | * |
501
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
219 | * @param buffer the buffer to initialize |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
220 | * @param space pointer to the memory area, or @c NULL to allocate |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
221 | * new memory |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
222 | * @param capacity the capacity of the buffer |
673
60fb6aec157d
make allocator in cxBufferInit optional
Mike Becker <universe@uap-core.de>
parents:
628
diff
changeset
|
223 | * @param allocator the allocator this buffer shall use for automatic |
989
8aa57a7fecc4
improve consistency for allocator arguments - fixes #485
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
224 | * memory management |
1318
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1291
diff
changeset
|
225 | * (if @c NULL, the cxDefaultAllocator will be used) |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
226 | * @param flags buffer features (see cx_buffer_s.flags) |
501
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
227 | * @return zero on success, non-zero if a required allocation failed |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
228 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
229 | cx_attr_nonnull_arg(1) |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
230 | cx_attr_export |
501
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
231 | int cxBufferInit( |
9a08f5e515cc
add allocator support to CxBuffer
Mike Becker <universe@uap-core.de>
parents:
500
diff
changeset
|
232 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
233 | void *space, |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
234 | size_t capacity, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
761
diff
changeset
|
235 | const CxAllocator *allocator, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
236 | int flags |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
237 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
238 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
239 | /** |
1110 | 240 | * Configures the buffer for flushing. |
241 | * | |
242 | * Flushing can happen automatically when data is written | |
243 | * to the buffer (see cxBufferWrite()) or manually when | |
244 | * cxBufferFlush() is called. | |
245 | * | |
246 | * @param buffer the buffer | |
247 | * @param config the flush configuration | |
248 | * @retval zero success | |
249 | * @retval non-zero failure | |
250 | * @see cxBufferFlush() | |
251 | * @see cxBufferWrite() | |
252 | */ | |
253 | cx_attr_nonnull | |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
254 | cx_attr_export |
1110 | 255 | int cxBufferEnableFlushing( |
256 | CxBuffer *buffer, | |
257 | CxBufferFlushConfig config | |
258 | ); | |
259 | ||
260 | /** | |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
261 | * Destroys the buffer contents. |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
262 | * |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
263 | * Has no effect if the #CX_BUFFER_FREE_CONTENTS feature is not enabled. |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
264 | * If you want to free the memory of the entire buffer, use cxBufferFree(). |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
265 | * |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
266 | * @param buffer the buffer which contents shall be destroyed |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
267 | * @see cxBufferInit() |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
268 | */ |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
269 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
270 | cx_attr_export |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
271 | void cxBufferDestroy(CxBuffer *buffer); |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
272 | |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
273 | /** |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
274 | * Deallocates the buffer. |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
275 | * |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
276 | * If the #CX_BUFFER_FREE_CONTENTS feature is enabled, this function also destroys |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
277 | * the contents. If you @em only want to destroy the contents, use cxBufferDestroy(). |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
278 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
279 | * @remark As with all free() functions, this accepts @c NULL arguments in which |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
280 | * case it does nothing. |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
281 | * |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
282 | * @param buffer the buffer to deallocate |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
283 | * @see cxBufferCreate() |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
284 | */ |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
285 | cx_attr_export |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
286 | void cxBufferFree(CxBuffer *buffer); |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
287 | |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
288 | /** |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
289 | * Allocates and initializes a fresh buffer. |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
290 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
291 | * You may also provide a read-only @p space, in which case |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
292 | * you will need to cast the pointer, and you should set the |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
293 | * #CX_BUFFER_COPY_ON_WRITE flag. |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
294 | * When you specify stack memory as @p space and decide to use |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
295 | * the auto-extension feature, you @em must use the |
1028
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
296 | * #CX_BUFFER_COPY_ON_EXTEND flag, instead of the |
3e4905241838
add copy-on-extend feature to UCX buffer - fixes #533
Mike Becker <universe@uap-core.de>
parents:
1024
diff
changeset
|
297 | * #CX_BUFFER_AUTO_EXTEND flag. |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
298 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
299 | * @note You may provide @c NULL as argument for @p space. |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
300 | * Then this function will allocate the space and enforce |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
301 | * the #CX_BUFFER_FREE_CONTENTS flag. |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
302 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
303 | * @param space pointer to the memory area, or @c NULL to allocate |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
304 | * new memory |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
305 | * @param capacity the capacity of the buffer |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
306 | * @param allocator the allocator to use for allocating the structure and the automatic |
989
8aa57a7fecc4
improve consistency for allocator arguments - fixes #485
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
307 | * memory management within the buffer |
1318
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
Mike Becker <universe@uap-core.de>
parents:
1291
diff
changeset
|
308 | * (if @c NULL, the cxDefaultAllocator will be used) |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
309 | * @param flags buffer features (see cx_buffer_s.flags) |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
310 | * @return a pointer to the buffer on success, @c NULL if a required allocation failed |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
311 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
312 | cx_attr_malloc |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
313 | cx_attr_dealloc(cxBufferFree, 1) |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
314 | cx_attr_nodiscard |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
315 | cx_attr_export |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
316 | CxBuffer *cxBufferCreate( |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
317 | void *space, |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
318 | size_t capacity, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
761
diff
changeset
|
319 | const CxAllocator *allocator, |
683
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
320 | int flags |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
321 | ); |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
322 | |
aa0d09f2d81c
add convenience functions for allocating a buffer on the heap
Mike Becker <universe@uap-core.de>
parents:
673
diff
changeset
|
323 | /** |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
324 | * Shifts the contents of the buffer by the given offset. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
325 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
326 | * If the offset is positive, the contents are shifted to the right. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
327 | * If auto extension is enabled, the buffer grows, if necessary. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
328 | * In case the auto extension fails, this function returns a non-zero value and |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
329 | * no contents are changed. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
330 | * If auto extension is disabled, the contents that do not fit into the buffer |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
331 | * are discarded. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
332 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
333 | * If the offset is negative, the contents are shifted to the left where the |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
334 | * first @p shift bytes are discarded. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
335 | * The new size of the buffer is the old size minus the absolute shift value. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
336 | * If this value is larger than the buffer size, the buffer is emptied (but |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
337 | * not cleared, see the security note below). |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
338 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
339 | * The buffer position gets shifted alongside with the content but is kept |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
340 | * within the boundaries of the buffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
341 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
342 | * @note For situations where @c off_t is not large enough, there are specialized cxBufferShiftLeft() and |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
343 | * cxBufferShiftRight() functions using a @c size_t as parameter type. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
344 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
345 | * @attention |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
346 | * Security Note: The shifting operation does @em not erase the previously occupied memory cells. |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
347 | * But you can easily do that manually, e.g. by calling |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
348 | * <code>memset(buffer->bytes, 0, shift)</code> for a right shift or |
531
1b8624c8448e
fix erroneous doc for cxBufferShift
Mike Becker <universe@uap-core.de>
parents:
530
diff
changeset
|
349 | * <code>memset(buffer->bytes + buffer->size, 0, buffer->capacity - buffer->size)</code> |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
350 | * for a left shift. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
351 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
352 | * @param buffer the buffer |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
353 | * @param shift the shift offset (negative means left shift) |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
354 | * @retval zero success |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
355 | * @retval non-zero if a required auto-extension or copy-on-write fails |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
356 | * @see cxBufferShiftLeft() |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
357 | * @see cxBufferShiftRight() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
358 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
359 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
360 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
361 | int cxBufferShift( |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
362 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
363 | off_t shift |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
364 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
365 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
366 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
367 | * Shifts the buffer to the right. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
368 | * See cxBufferShift() for details. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
369 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
370 | * @param buffer the buffer |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
371 | * @param shift the shift offset |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
372 | * @retval zero success |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
373 | * @retval non-zero if a required auto-extension or copy-on-write fails |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
374 | * @see cxBufferShift() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
375 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
376 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
377 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
378 | int cxBufferShiftRight( |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
379 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
380 | size_t shift |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
381 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
382 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
383 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
384 | * Shifts the buffer to the left. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
385 | * See cxBufferShift() for details. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
386 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
387 | * @param buffer the buffer |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
388 | * @param shift the positive shift offset |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
389 | * @retval zero success |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
390 | * @retval non-zero if the buffer uses copy-on-write and the allocation fails |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
391 | * @see cxBufferShift() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
392 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
393 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
394 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
395 | int cxBufferShiftLeft( |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
396 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
397 | size_t shift |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
398 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
399 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
400 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
401 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
402 | * Moves the position of the buffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
403 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
404 | * The new position is relative to the @p whence argument. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
405 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
406 | * @li @c SEEK_SET marks the start of the buffer. |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
407 | * @li @c SEEK_CUR marks the current position. |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
408 | * @li @c SEEK_END marks the end of the buffer. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
409 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
410 | * With an offset of zero, this function sets the buffer position to zero |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
411 | * (@c SEEK_SET), the buffer size (@c SEEK_END) or leaves the buffer position |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
412 | * unchanged (@c SEEK_CUR). |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
413 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
414 | * @param buffer the buffer |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
415 | * @param offset position offset relative to @p whence |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
416 | * @param whence one of @c SEEK_SET, @c SEEK_CUR or @c SEEK_END |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
417 | * @retval zero success |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
418 | * @retval non-zero if the position is invalid |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
419 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
420 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
421 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
422 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
423 | int cxBufferSeek( |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
424 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
425 | off_t offset, |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
426 | int whence |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
427 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
428 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
429 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
430 | * Clears the buffer by resetting the position and deleting the data. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
431 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
432 | * The data is deleted by zeroing it with a call to memset(). |
761
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
433 | * If you do not need that, you can use the faster cxBufferReset(). |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
434 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
435 | * @note If the #CX_BUFFER_COPY_ON_WRITE flag is set, this function |
1024
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
436 | * will not erase the data and behave exactly as cxBufferReset(). |
8f99f6c28bd3
add copy-on-write feature to UCX buffer - fixes #531
Mike Becker <universe@uap-core.de>
parents:
1016
diff
changeset
|
437 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
438 | * @param buffer the buffer to be cleared |
761
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
439 | * @see cxBufferReset() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
440 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
441 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
442 | cx_attr_export |
529
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
443 | void cxBufferClear(CxBuffer *buffer); |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
444 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
445 | /** |
761
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
446 | * Resets the buffer by resetting the position and size to zero. |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
447 | * |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
448 | * The data in the buffer is not deleted. If you need a safe |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
449 | * reset of the buffer, use cxBufferClear(). |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
450 | * |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
451 | * @param buffer the buffer to be cleared |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
452 | * @see cxBufferClear() |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
453 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
454 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
455 | cx_attr_export |
761
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
456 | void cxBufferReset(CxBuffer *buffer); |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
457 | |
61d5197d612b
add cxBufferReset() - resolves #338
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
458 | /** |
757
49ceea78fce7
fix incorrect documentation of cxBufferEof()
Mike Becker <universe@uap-core.de>
parents:
683
diff
changeset
|
459 | * Tests, if the buffer position has exceeded the buffer size. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
460 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
461 | * @param buffer the buffer to test |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
462 | * @retval true if the current buffer position has exceeded the last |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
463 | * byte of the buffer's contents |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
464 | * @retval false otherwise |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
465 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
466 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
467 | cx_attr_nodiscard |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
468 | cx_attr_export |
1004
d8044fd5005c
make cxBufferEof() return a bool
Mike Becker <universe@uap-core.de>
parents:
989
diff
changeset
|
469 | bool cxBufferEof(const CxBuffer *buffer); |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
470 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
471 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
472 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
473 | * Ensures that the buffer has a minimum capacity. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
474 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
475 | * If the current capacity is not sufficient, the buffer will be extended. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
476 | * |
1291
5942859fd76c
new auto-extend strategy for CxBuffer - resolves #641
Mike Becker <universe@uap-core.de>
parents:
1290
diff
changeset
|
477 | * The new capacity will be a power of two until the system's page size is reached. |
5942859fd76c
new auto-extend strategy for CxBuffer - resolves #641
Mike Becker <universe@uap-core.de>
parents:
1290
diff
changeset
|
478 | * Then, the new capacity will be a multiple of the page size. |
5942859fd76c
new auto-extend strategy for CxBuffer - resolves #641
Mike Becker <universe@uap-core.de>
parents:
1290
diff
changeset
|
479 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
480 | * @param buffer the buffer |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
481 | * @param capacity the minimum required capacity for this buffer |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
482 | * @retval zero the capacity was already sufficient or successfully increased |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
483 | * @retval non-zero on allocation failure |
1290
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
484 | * @see cxBufferShrink() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
485 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
486 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
487 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
488 | int cxBufferMinimumCapacity( |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
489 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
490 | size_t capacity |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
491 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
492 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
493 | /** |
1290
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
494 | * Shrinks the capacity of the buffer to fit its current size. |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
495 | * |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
496 | * If @p reserve is larger than zero, the buffer is shrunk to its size plus |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
497 | * the number of reserved bytes. |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
498 | * |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
499 | * If the current capacity is not larger than the size plus the reserved bytes, |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
500 | * nothing happens. |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
501 | * |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
502 | * If the #CX_BUFFER_COPY_ON_WRITE or #CX_BUFFER_COPY_ON_EXTEND flag is set, |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
503 | * this function does nothing. |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
504 | * |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
505 | * @param buffer the buffer |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
506 | * @param reserve the number of bytes that shall remain reserved |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
507 | * @see cxBufferMinimumCapacity() |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
508 | */ |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
509 | cx_attr_nonnull |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
510 | cx_attr_export |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
511 | void cxBufferShrink( |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
512 | CxBuffer *buffer, |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
513 | size_t reserve |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
514 | ); |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
515 | |
4ac889e14211
adds cxBufferShrink() - resolves #626
Mike Becker <universe@uap-core.de>
parents:
1284
diff
changeset
|
516 | /** |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
517 | * Writes data to a CxBuffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
518 | * |
1110 | 519 | * If automatic flushing is not enabled, the data is simply written into the |
520 | * buffer at the current position and the position of the buffer is increased | |
521 | * by the number of bytes written. | |
522 | * | |
567
f90a7cfe2480
#184 #170 more thorough flush testing
Mike Becker <universe@uap-core.de>
parents:
545
diff
changeset
|
523 | * If flushing is enabled and the buffer needs to flush, the data is flushed to |
f90a7cfe2480
#184 #170 more thorough flush testing
Mike Becker <universe@uap-core.de>
parents:
545
diff
changeset
|
524 | * the target until the target signals that it cannot take more data by |
f90a7cfe2480
#184 #170 more thorough flush testing
Mike Becker <universe@uap-core.de>
parents:
545
diff
changeset
|
525 | * returning zero via the respective write function. In that case, the remaining |
f90a7cfe2480
#184 #170 more thorough flush testing
Mike Becker <universe@uap-core.de>
parents:
545
diff
changeset
|
526 | * data in this buffer is shifted to the beginning of this buffer so that the |
1129
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
527 | * newly available space can be used to append as much data as possible. |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
528 | * |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
529 | * This function only stops writing more elements, when the flush target and this |
567
f90a7cfe2480
#184 #170 more thorough flush testing
Mike Becker <universe@uap-core.de>
parents:
545
diff
changeset
|
530 | * buffer are both incapable of taking more data or all data has been written. |
1129
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
531 | * |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
532 | * If, after flushing, the number of items that shall be written still exceeds |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
533 | * the capacity or flush threshold, this function tries to write all items directly |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
534 | * to the flush target, if possible. |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
535 | * |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
536 | * The number returned by this function is the number of elements from |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
537 | * @c ptr that could be written to either the flush target or the buffer |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
538 | * (so it does not include the number of items that had been already in the buffer |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
539 | * in were flushed during the process). |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
540 | * |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
541 | * @attention |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
542 | * When @p size is larger than one and the contents of the buffer are not aligned |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
543 | * with @p size, flushing stops after all complete items have been flushed, leaving |
cc60b7d07912
fix #566 by changing the spec (pro-move 8)
Mike Becker <universe@uap-core.de>
parents:
1112
diff
changeset
|
544 | * the mis-aligned part in the buffer. |
1135
f79415d974d3
add test case for flushing when target is full and fixes a bug related to that
Mike Becker <universe@uap-core.de>
parents:
1129
diff
changeset
|
545 | * Afterward, this function only writes as many items as possible to the buffer. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
546 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
547 | * @note The signature is compatible with the fwrite() family of functions. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
548 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
549 | * @param ptr a pointer to the memory area containing the bytes to be written |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
550 | * @param size the length of one element |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
551 | * @param nitems the element count |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
552 | * @param buffer the CxBuffer to write to |
537
16219eba3a0a
fix doc error for cxBufferWrite
Mike Becker <universe@uap-core.de>
parents:
531
diff
changeset
|
553 | * @return the total count of elements written |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
554 | * @see cxBufferAppend() |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
555 | * @see cxBufferRead() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
556 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
557 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
558 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
559 | size_t cxBufferWrite( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
761
diff
changeset
|
560 | const void *ptr, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
561 | size_t size, |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
562 | size_t nitems, |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
563 | CxBuffer *buffer |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
564 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
565 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
566 | /** |
1030
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
567 | * Appends data to a CxBuffer. |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
568 | * |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
569 | * The data is always appended to current data within the buffer, |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
570 | * regardless of the current position. |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
571 | * This is especially useful when the buffer is primarily meant for reading |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
572 | * while additional data is added to the buffer occasionally. |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
573 | * Consequently, the position of the buffer is unchanged after this operation. |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
574 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
575 | * @note The signature is compatible with the fwrite() family of functions. |
1030
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
576 | * |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
577 | * @param ptr a pointer to the memory area containing the bytes to be written |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
578 | * @param size the length of one element |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
579 | * @param nitems the element count |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
580 | * @param buffer the CxBuffer to write to |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
581 | * @return the total count of elements written |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
582 | * @see cxBufferWrite() |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
583 | * @see cxBufferRead() |
1030
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
584 | */ |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
585 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
586 | cx_attr_export |
1030
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
587 | size_t cxBufferAppend( |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
588 | const void *ptr, |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
589 | size_t size, |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
590 | size_t nitems, |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
591 | CxBuffer *buffer |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
592 | ); |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
593 | |
06091e067bee
add cxBufferAppend() - fixes #534
Mike Becker <universe@uap-core.de>
parents:
1029
diff
changeset
|
594 | /** |
1110 | 595 | * Performs a single flush-run on the specified buffer. |
596 | * | |
597 | * Does nothing when the position in the buffer is zero. | |
598 | * Otherwise, the data until the current position minus | |
599 | * one is considered for flushing. | |
600 | * Note carefully that flushing will never exceed the | |
601 | * current @em position, even when the size of the | |
602 | * buffer is larger than the current position. | |
603 | * | |
604 | * One flush run will try to flush @c blkmax many | |
605 | * blocks of size @c blksize until either the @p buffer | |
606 | * has no more data to flush or the write function | |
607 | * used for flushing returns zero. | |
608 | * | |
609 | * The buffer is shifted left for that many bytes | |
610 | * the flush operation has successfully flushed. | |
611 | * | |
612 | * @par Example 1 | |
613 | * Assume you have a buffer with size 340 and you are | |
614 | * at position 200. The flush configuration is | |
615 | * @c blkmax=4 and @c blksize=64 . | |
616 | * Assume that the entire flush operation is successful. | |
617 | * All 200 bytes on the left hand-side from the current | |
618 | * position are written. | |
619 | * That means, the size of the buffer is now 140 and the | |
620 | * position is zero. | |
621 | * | |
622 | * @par Example 2 | |
623 | * Same as Example 1, but now the @c blkmax is 1. | |
624 | * The size of the buffer is now 276 and the position is 136. | |
625 | * | |
626 | * @par Example 3 | |
627 | * Same as Example 1, but now assume the flush target | |
628 | * only accepts 100 bytes before returning zero. | |
629 | * That means, the flush operations manages to flush | |
630 | * one complete block and one partial block, ending | |
631 | * up with a buffer with size 240 and position 100. | |
632 | * | |
633 | * @remark Just returns zero when flushing was not enabled with | |
634 | * cxBufferEnableFlushing(). | |
635 | * | |
636 | * @remark When the buffer uses copy-on-write, the memory | |
637 | * is copied first, before attempting any flush. | |
638 | * This is, however, considered an erroneous use of the | |
639 | * buffer, because it does not make much sense to put | |
640 | * readonly data into an UCX buffer for flushing, instead | |
641 | * of writing it directly to the target. | |
642 | * | |
643 | * @param buffer the buffer | |
644 | * @return the number of successfully flushed bytes | |
645 | * @see cxBufferEnableFlushing() | |
646 | */ | |
647 | cx_attr_nonnull | |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
648 | cx_attr_export |
1110 | 649 | size_t cxBufferFlush(CxBuffer *buffer); |
650 | ||
651 | /** | |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
652 | * Reads data from a CxBuffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
653 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
654 | * The position of the buffer is increased by the number of bytes read. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
655 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
656 | * @note The signature is compatible with the fread() family of functions. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
657 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
658 | * @param ptr a pointer to the memory area where to store the read data |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
659 | * @param size the length of one element |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
660 | * @param nitems the element count |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
661 | * @param buffer the CxBuffer to read from |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
662 | * @return the total number of elements read |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
663 | * @see cxBufferWrite() |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
664 | * @see cxBufferAppend() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
665 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
666 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
667 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
668 | size_t cxBufferRead( |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
669 | void *ptr, |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
670 | size_t size, |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
671 | size_t nitems, |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
672 | CxBuffer *buffer |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
673 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
674 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
675 | /** |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
676 | * Writes a character to a buffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
677 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
678 | * The least significant byte of the argument is written to the buffer. If the |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
679 | * end of the buffer is reached and #CX_BUFFER_AUTO_EXTEND feature is enabled, |
1005
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
680 | * the buffer capacity is extended by cxBufferMinimumCapacity(). If the feature |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
681 | * is disabled or buffer extension fails, @c EOF is returned. |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
682 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
683 | * On successful write, the position of the buffer is increased. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
684 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
685 | * If you just want to write a null-terminator at the current position, you |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
686 | * should use cxBufferTerminate() instead. |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
687 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
688 | * @param buffer the buffer to write to |
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
689 | * @param c the character to write |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
690 | * @return the byte that has been written or @c EOF when the end of the stream is |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
691 | * reached and automatic extension is not enabled or not possible |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
692 | * @see cxBufferTerminate() |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
693 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
694 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
695 | cx_attr_export |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
696 | int cxBufferPut( |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
697 | CxBuffer *buffer, |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
698 | int c |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
699 | ); |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
700 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
701 | /** |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
702 | * Writes a terminating zero to a buffer at the current position. |
1005
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
703 | * |
1284
b2103354baed
fix implementation of cxBufferTerminate() - fixes #631
Mike Becker <universe@uap-core.de>
parents:
1181
diff
changeset
|
704 | * If successful, sets the size to the current position and advances the position by one. |
1005
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
705 | * |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
706 | * The purpose of this function is to have the written data ready to be used as |
1284
b2103354baed
fix implementation of cxBufferTerminate() - fixes #631
Mike Becker <universe@uap-core.de>
parents:
1181
diff
changeset
|
707 | * a C string with the buffer's size being the length of that string. |
1005
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
708 | * |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
709 | * @param buffer the buffer to write to |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
710 | * @return zero, if the terminator could be written, non-zero otherwise |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
711 | */ |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
712 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
713 | cx_attr_export |
1005
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
714 | int cxBufferTerminate(CxBuffer *buffer); |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
715 | |
67fa386ce600
add cxBufferTerminate()
Mike Becker <universe@uap-core.de>
parents:
1004
diff
changeset
|
716 | /** |
529
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
717 | * Writes a string to a buffer. |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
718 | * |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
719 | * This is a convenience function for <code>cxBufferWrite(str, 1, strlen(str), buffer)</code>. |
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
720 | * |
529
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
721 | * @param buffer the buffer |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
722 | * @param str the zero-terminated string |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
723 | * @return the number of bytes written |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
724 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
725 | cx_attr_nonnull |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
726 | cx_attr_cstr_arg(2) |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
727 | cx_attr_export |
529
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
728 | size_t cxBufferPutString( |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
729 | CxBuffer *buffer, |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
730 | const char *str |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
731 | ); |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
732 | |
814d51173f20
#171 const qualifier and nonnull attributes
Mike Becker <universe@uap-core.de>
parents:
501
diff
changeset
|
733 | /** |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
734 | * Gets a character from a buffer. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
735 | * |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
736 | * The current position of the buffer is increased after a successful read. |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
737 | * |
485
6a86ad3d8c03
use same doxygen style in all files
Mike Becker <universe@uap-core.de>
parents:
484
diff
changeset
|
738 | * @param buffer the buffer to read from |
1090
4384fe041d6e
refine docs for buffer.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
1030
diff
changeset
|
739 | * @return the character or @c EOF, if the end of the buffer is reached |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
740 | */ |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
948
diff
changeset
|
741 | cx_attr_nonnull |
1180
4c3a69b9723a
add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents:
1135
diff
changeset
|
742 | cx_attr_export |
500
eb9e7bd40a8e
do not hide pointers behind typedefs
Mike Becker <universe@uap-core.de>
parents:
489
diff
changeset
|
743 | int cxBufferGet(CxBuffer *buffer); |
483
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
744 | |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
745 | #ifdef __cplusplus |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
746 | } |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
747 | #endif |
929016224c3c
add ported UCX buffer implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
748 | |
628
1e2be40f0cb5
use //-style single line comments everywhere
Mike Becker <universe@uap-core.de>
parents:
567
diff
changeset
|
749 | #endif // UCX_BUFFER_H |