Wed, 26 Mar 2025 12:26:20 +0100
document buffer read operations
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 | |
1262
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
3 | 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
|
4 | |
151c057faf7c
add marker to every incomplete page
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
5 | 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
|
6 | or from a file or network streams to the buffer and vice versa. |
1141 | 7 | |
1262
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
8 | More features for convenient use of the buffer can be enabled, like automatic memory management, |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
9 | automatic resizing of the buffer space, or automatic flushing of contents. |
1141 | 10 | |
1262
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
11 | The functions `cxBufferRead()` and `cxBufferWrite()` are `cx_read_func` and `cx_write_func` compatible, |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
12 | which in turn have a compatible signature to `fread()` and `fwrite()`. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
13 | However, due to the different pointer type, the function pointers do not type check out of the box. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
14 | For convenience, the macros `cxBufferReadFunc` and `cxBufferWriteFunc` are defined, which perform the necessary cast. |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
15 | |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
16 | ## Example |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
17 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
18 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
19 | TODO: add example |
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 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
22 | ## Create |
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 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
25 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
26 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
27 | 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
|
28 | const CxAllocator *allocator, int flags); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
29 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
30 | CxBuffer *cxBufferCreate(void *space,size_t capacity, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
31 | const CxAllocator *allocator, int flags); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
32 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
33 | // available flags: |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
34 | #define CX_BUFFER_DEFAULT |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
35 | #define CX_BUFFER_FREE_CONTENTS |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
36 | #define CX_BUFFER_AUTO_EXTEND |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
37 | #define CX_BUFFER_COPY_ON_WRITE |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
38 | #define CX_BUFFER_COPY_ON_EXTEND |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
39 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
40 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
41 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
42 | TODO: document |
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 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
45 | ## Destroy |
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 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
48 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
49 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
50 | void cxBufferDestroy(CxBuffer *buffer); |
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 cxBufferFree(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 | |
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
|
55 | 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
|
56 | |
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 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
|
58 | 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
|
59 | 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
|
60 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
61 | ## Write |
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 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
64 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
65 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
66 | 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
|
67 | CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
68 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
69 | 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
|
70 | CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
71 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
72 | int cxBufferPut(CxBuffer *buffer, int c); |
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 | 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
|
75 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
76 | int cxBufferTerminate(CxBuffer *buffer); |
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 cxBufferMinimumCapacity(CxBuffer *buffer, size_t capacity); |
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 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
81 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
82 | TODO: document |
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 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
85 | ## Read |
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 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
88 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
89 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
90 | 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
|
91 | CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
92 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
93 | 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
|
94 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
95 | bool cxBufferEof(const CxBuffer *buffer); |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
96 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
97 | |
1262
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
98 | The function `cxBufferRead()` reads `nitems` number of items of `size` bytes each from the `buffer` |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
99 | and stores them into the memory pointed to by `ptr`, which must be sufficiently large to hold the contents. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
100 | The function returns the actual bytes read, which might be lower, if the desired number of items is not available. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
101 | |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
102 | The function `cxBufferGet()` is a `fgetc()`-like function which returns the next byte in the buffer converted to an `int`. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
103 | Similar to `fgetc()` it returns `EOF` when there are no more bytes in the buffer. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
104 | |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
105 | When all bytes from the buffer have been read, the function `cxBufferEof()` returns true. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
106 | |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
107 | All read functions advance the position in the buffer by the number of read bytes. |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
108 | |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
109 | > When you want to read from a buffer that you previously used for writing, do not forget to set the position |
7cc81244b28a
document buffer read operations
Mike Becker <universe@uap-core.de>
parents:
1261
diff
changeset
|
110 | > in the buffer to zero, e.g. by calling `cxBufferSeek()`. |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
111 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
112 | ## Reset and Clear |
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 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
115 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
116 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
117 | void cxBufferReset(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
118 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
119 | void cxBufferClear(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
120 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
121 | |
1261
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
122 | 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
|
123 | 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
|
124 | |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
125 | > 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
|
126 | > 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
|
127 | |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
128 | > 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
|
129 | > because writing to the contents is disallowed. |
6bbc308b7a20
add documentation for reset and clear
Mike Becker <universe@uap-core.de>
parents:
1260
diff
changeset
|
130 | >{style="note"} |
1256
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
131 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
132 | ## Random Access |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
133 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
134 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
135 | #include <cx/buffer.h> |
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 | 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
|
138 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
139 | |
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
|
140 | 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
|
141 | 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
|
142 | 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
|
143 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
144 | 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
|
145 | 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
|
146 | |
7bc999fe285d
more documentation for buffer.h + set errno in cxBufferSeek() on invalid whence argument
Mike Becker <universe@uap-core.de>
parents:
1256
diff
changeset
|
147 | > 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
|
148 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
149 | ## Shift Contents |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
150 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
151 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
152 | #include <cx/buffer.h> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
153 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
154 | int cxBufferShift(CxBuffer *buffer, off_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
155 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
156 | int cxBufferShiftRight(CxBuffer *buffer, size_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
157 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
158 | int cxBufferShiftLeft(CxBuffer *buffer, size_t shift); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
159 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
160 | |
1260
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
161 | 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
|
162 | 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
|
163 | 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
|
164 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
165 | 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
|
166 | 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
|
167 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
168 | 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
|
169 | 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
|
170 | 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
|
171 | (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
|
172 | |
56a019cdb055
add documentation for the shift functions
Mike Becker <universe@uap-core.de>
parents:
1259
diff
changeset
|
173 | 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
|
174 | 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
|
175 | 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
|
176 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
177 | ## Flushing |
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 | ```C |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
180 | #include <cx/buffer.h> |
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 | typedef struct cx_buffer_flush_config_s { |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
183 | size_t threshold; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
184 | size_t blksize; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
185 | size_t blkmax; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
186 | void *target; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
187 | cx_write_func wfunc; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
188 | } CxBufferFlushConfig; |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
189 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
190 | int cxBufferEnableFlushing(CxBuffer *buffer, |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
191 | CxBufferFlushConfig config); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
192 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
193 | size_t cxBufferFlush(CxBuffer *buffer); |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
194 | ``` |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
195 | |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
196 | <warning> |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
197 | TODO: document |
b9a940779877
define structure for buffer.h doc
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
198 | </warning> |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
199 | |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
200 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
201 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
202 | <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
|
203 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
204 | </seealso> |