Tue, 25 Mar 2025 22:11:06 +0100
add documentation for reset and clear
relates to #451
1143
0559812df10c
assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents:
1142
diff
changeset
|
1 | # Buffer |
1141 | 2 | |
1146
151c057faf7c
add marker to every incomplete page
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
3 | <warning> |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
4 | Outdated Section - will be updated soon! |
1146
151c057faf7c
add marker to every incomplete page
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
5 | </warning> |
151c057faf7c
add marker to every incomplete page
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
6 | |
1141 | 7 | Instances of this buffer implementation can be used to read from or write to memory like you would do with a stream. |
1146
151c057faf7c
add marker to every incomplete page
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
8 | This allows the use of `cx_stream_copy()` (see [](streams.h.md)) to copy contents from one buffer to another, |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
9 | or from a file or network streams to the buffer and vice versa. |
1141 | 10 | |
11 | More features for convenient use of the buffer can be enabled, like automatic memory management and automatic | |
12 | resizing of the buffer space. | |
13 | ||
14 | Since UCX 3.0, the buffer also supports automatic flushing of contents to another stream (or buffer) as an alternative | |
15 | to automatically resizing the buffer space. | |
16 | Please refer to the API doc for the fields prefixed with `flush_` to learn more. | |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
17 | |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
18 | ## Example |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
19 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
20 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
21 | TODO: add example |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
22 | </warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
23 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
24 | ## Create |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
25 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
26 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
27 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
28 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
29 | int cxBufferInit(CxBuffer *buffer, void *space, size_t capacity, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
30 | const CxAllocator *allocator, int flags); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
31 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
32 | CxBuffer *cxBufferCreate(void *space,size_t capacity, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
33 | const CxAllocator *allocator, int flags); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
34 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
35 | // available flags: |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
36 | #define CX_BUFFER_DEFAULT |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
37 | #define CX_BUFFER_FREE_CONTENTS |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
38 | #define CX_BUFFER_AUTO_EXTEND |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
39 | #define CX_BUFFER_COPY_ON_WRITE |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
40 | #define CX_BUFFER_COPY_ON_EXTEND |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
41 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
42 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
43 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
44 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
45 | </warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
46 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
47 | ## Destroy |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
48 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
49 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
50 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
51 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
52 | void cxBufferDestroy(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
53 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
54 | void cxBufferFree(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
55 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
56 | |
1259
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
57 | The above functions destroy the buffer and deallocate the buffer's memory when the `CX_BUFFER_FREE_CONTENTS` flag is set. |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
58 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
59 | The function `cxBufferDestroy()` is to be used when the buffer was initialized with `cxBufferInit()`, |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
60 | and the function `cxBufferFree()` is to be used when the buffer was created with `cxBufferCreate()`. |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
61 | The only difference is, that `cxBufferFree()` additionally deallocates the memory of the `CxBuffer` structure. |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
62 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
63 | ## Write |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
64 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
65 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
66 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
67 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
68 | size_t cxBufferWrite(const void *ptr, size_t size, size_t nitems, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
69 | CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
70 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
71 | size_t cxBufferAppend(const void *ptr, size_t size, size_t nitems, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
72 | CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
73 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
74 | int cxBufferPut(CxBuffer *buffer, int c); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
75 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
76 | size_t cxBufferPutString(CxBuffer *buffer, const char *str); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
77 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
78 | int cxBufferTerminate(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
79 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
80 | int cxBufferMinimumCapacity(CxBuffer *buffer, size_t capacity); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
81 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
82 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
83 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
84 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
85 | </warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
86 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
87 | ## Read |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
88 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
89 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
90 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
91 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
92 | size_t cxBufferRead(void *ptr, size_t size, size_t nitems, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
93 | CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
94 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
95 | int cxBufferGet(CxBuffer *buffer); |
1259
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
96 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
97 | bool cxBufferEof(const CxBuffer *buffer); |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
98 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
99 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
100 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
101 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
102 | </warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
103 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
104 | ## Reset and Clear |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
105 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
106 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
107 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
108 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
109 | void cxBufferReset(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
110 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
111 | void cxBufferClear(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
112 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
113 | |
1261
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
114 | The function `cxBufferReset()` sets both size and position of the buffer to zero, |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
115 | and `cxBufferClear()` additionally uses `memset()` to set every byte in the buffer to zero. |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
116 | |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
117 | > When clearing the buffer, only the "live" data, i.e. bytes with indices `[0..size)`, are cleared. |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
118 | > If you which to clear the entire buffer's memory, you would need to set the size to the capacity, first. |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
119 | |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
120 | > If the `CX_BUFFER_COPY_ON_WRITE` flag is set, `cxBufferClear()` behaves exactly like `cxBufferReset()`, |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
121 | > because writing to the contents is disallowed. |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
122 | >{style="note"} |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
123 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
124 | ## Random Access |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
125 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
126 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
127 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
128 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
129 | int cxBufferSeek(CxBuffer *buffer, off_t offset, int whence); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
130 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
131 | |
1259
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
132 | The function `cxBufferSeek()` is a `fseek()`-like function that sets the current position in the buffer |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
133 | relative to the start (when `whence` is `SEEK_SET`), the current position (when `whence` is `SEEK_CUR`), |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
134 | or end (when `whence` is `SEEK_END`) of the buffer. |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
135 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
136 | If the resulting position is negative, or larger than the size (i.e. the first unused byte), |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
137 | this function returns non-zero and sets `errno` to `EOVERFLOW`. |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
138 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
139 | > Note that the error behavior of `cxBufferSeek()` is not exactly the same as for POSIX `fseek()`. |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
140 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
141 | ## Shift Contents |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
142 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
143 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
144 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
145 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
146 | int cxBufferShift(CxBuffer *buffer, off_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
147 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
148 | int cxBufferShiftRight(CxBuffer *buffer, size_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
149 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
150 | int cxBufferShiftLeft(CxBuffer *buffer, size_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
151 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
152 | |
1260
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
153 | The function `cxBufferShift()` moves the contents within the buffer by the specified `shift` offset, |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
154 | where a negative offset means a shift to the left, and a positive offset means a shift to the right. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
155 | It also adjusts the current position within the buffer, and in case of a right shift also the size, by the same offset. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
156 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
157 | Data that is shift to the left, is always discarded when the new position of a byte would be smaller than zero. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
158 | If the new position would be smaller than zero, it is set exactly to zero. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
159 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
160 | When data is shift to the right, the behavior depends on the `CX_BUFFER_AUTO_EXTEND` flag. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
161 | If set, the function extends the buffer's capacity before moving the data. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
162 | Otherwise, the function discards all data that would exceed the buffer's capacity, and both the size and the position are equal to the capacity |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
163 | (which means, `cxBufferEof()` returns `true` after the operation). |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
164 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
165 | The functions `cxBufferShiftRight()` and `cxBufferShiftLeft()` accept a larger (but in both cases positive) shift offset, |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
166 | which usually does not make much sense on a 64-bit platform where `off_t` is already large enough to represent any reasonable offset. |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
167 | You may, however, still use those function to express more explicitly in your code in which direction you want the contents to be shifted. |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
168 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
169 | ## Flushing |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
170 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
171 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
172 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
173 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
174 | typedef struct cx_buffer_flush_config_s { |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
175 | size_t threshold; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
176 | size_t blksize; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
177 | size_t blkmax; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
178 | void *target; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
179 | cx_write_func wfunc; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
180 | } CxBufferFlushConfig; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
181 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
182 | int cxBufferEnableFlushing(CxBuffer *buffer, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
183 | CxBufferFlushConfig config); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
184 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
185 | size_t cxBufferFlush(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
186 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
187 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
188 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
189 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
190 | </warning> |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
191 | |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
192 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
193 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
194 | <a href="https://ucx.sourceforge.io/api/buffer_8h.html">buffer.h</a> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
195 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
196 | </seealso> |