Mon, 24 Mar 2025 20:16:36 +0100
add documentation for the shift functions
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 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
114 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
115 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
116 | </warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
117 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
118 | ## Random Access |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
119 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
120 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
121 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
122 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
123 | 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
|
124 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
125 | |
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
|
126 | 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
|
127 | 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
|
128 | 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
|
129 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
130 | 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
|
131 | 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
|
132 | |
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 | > 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
|
134 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
135 | ## Shift Contents |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
136 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
137 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
138 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
139 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
140 | int cxBufferShift(CxBuffer *buffer, off_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
141 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
142 | int cxBufferShiftRight(CxBuffer *buffer, size_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
143 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
144 | int cxBufferShiftLeft(CxBuffer *buffer, size_t shift); |
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 | |
1260
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
147 | 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
|
148 | 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
|
149 | 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
|
150 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
151 | 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
|
152 | 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
|
153 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
154 | 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
|
155 | 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
|
156 | 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
|
157 | (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
|
158 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
159 | 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
|
160 | 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
|
161 | 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
|
162 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
163 | ## Flushing |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
164 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
165 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
166 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
167 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
168 | typedef struct cx_buffer_flush_config_s { |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
169 | size_t threshold; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
170 | size_t blksize; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
171 | size_t blkmax; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
172 | void *target; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
173 | cx_write_func wfunc; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
174 | } CxBufferFlushConfig; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
175 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
176 | int cxBufferEnableFlushing(CxBuffer *buffer, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
177 | CxBufferFlushConfig config); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
178 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
179 | size_t cxBufferFlush(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
180 | ``` |
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 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
183 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
184 | </warning> |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
185 | |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
186 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
187 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
188 | <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
|
189 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
190 | </seealso> |