docs/Writerside/topics/buffer.h.md

Mon, 24 Mar 2025 20:16:36 +0100

author
Mike Becker <universe@uap-core.de>
date
Mon, 24 Mar 2025 20:16:36 +0100
changeset 1260
56a019cdb055
parent 1259
7bc999fe285d
child 1261
6bbc308b7a20
permissions
-rw-r--r--

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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 More features for convenient use of the buffer can be enabled, like automatic memory management and automatic
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 resizing of the buffer space.
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 Since UCX 3.0, the buffer also supports automatic flushing of contents to another stream (or buffer) as an alternative
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 to automatically resizing the buffer space.
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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>

mercurial