gwenhywfar  5.1.2
buffer.h
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Fri Sep 12 2003
3  copyright : (C) 2020 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * *
8  * This library is free software; you can redistribute it and/or *
9  * modify it under the terms of the GNU Lesser General Public *
10  * License as published by the Free Software Foundation; either *
11  * version 2.1 of the License, or (at your option) any later version. *
12  * *
13  * This library is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16  * Lesser General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU Lesser General Public *
19  * License along with this library; if not, write to the Free Software *
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21  * MA 02111-1307 USA *
22  * *
23  ***************************************************************************/
24 
25 
26 #ifndef GWENHYWFAR_BUFFER_H
27 #define GWENHYWFAR_BUFFER_H
28 
29 #include <gwenhywfar/gwenhywfarapi.h>
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
38 typedef struct GWEN_BUFFER GWEN_BUFFER;
39 #ifdef __cplusplus
40 }
41 #endif
42 
43 #include <gwenhywfar/types.h>
44 //#include <gwenhywfar/syncio.h>
45 
46 
47 #include <stdio.h>
48 /* This is needed for PalmOS, because it define some functions needed */
49 #include <string.h>
50 
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54 
63 
64 #define GWEN_BUFFER_MAX_BOOKMARKS 64
65 
66 #define GWEN_BUFFER_MODE_DYNAMIC 0x0001
67 #define GWEN_BUFFER_MODE_ABORT_ON_MEMFULL 0x0002
68 #define GWEN_BUFFER_MODE_READONLY 0x0020
69 
70 #define GWEN_BUFFER_MODE_DEFAULT \
71  (\
72  GWEN_BUFFER_MODE_DYNAMIC | \
73  GWEN_BUFFER_MODE_ABORT_ON_MEMFULL\
74  )
75 
76 
101 GWEN_BUFFER *GWEN_Buffer_new(char *buffer,
102  uint32_t size,
103  uint32_t used,
104  int take_ownership);
105 
112 
113 
121 void GWEN_Buffer_free(GWEN_BUFFER *bf);
122 
123 
127 
128 
139 
145 uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf);
146 
152 void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode);
153 
159 void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode);
160 
166 void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode);
167 
174 
180 void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l);
181 
182 
189 uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf);
190 
199 void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step);
200 
201 
211 int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res);
212 
213 
219 char *GWEN_Buffer_GetStart(const GWEN_BUFFER *bf);
220 
221 
226 uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf);
227 
228 
234 uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf);
235 
240 int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i);
241 
245 uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf);
246 
247 
252 uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx);
253 
254 
260 void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx,
261  uint32_t v);
262 
263 
272  const char *buffer,
273  uint32_t size);
274 
277  unsigned char c,
278  uint32_t size);
279 
282  unsigned char c,
283  uint32_t size);
284 
285 
293  const char *buffer);
294 
295 
303 int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c);
304 
316  const char *buffer,
317  uint32_t size);
318 
331  uint32_t size);
332 
344 int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size);
345 
358  uint32_t rsize,
359  const char *buffer,
360  uint32_t size);
361 
362 
374  const char *buffer);
375 
389 int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c);
390 
398 
399 
407  char *buffer,
408  uint32_t *size);
409 
410 
419 
420 
423 int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i);
424 
427 int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i);
428 
453 
454 
462  GWEN_BUFFER *sf);
463 
470  GWEN_BUFFER *sf);
471 
472 
479 
480 
486 
487 
492 char *GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf);
493 
494 
500 
506 
507 
512 int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size);
513 
514 
515 /* crops the buffer to the specified bytes */
518  uint32_t pos,
519  uint32_t l);
520 
521 /* Overwrite complete buffer with a given value.
522  * This does not only overwrite the used bytes but all the memory held
523  * by this object.
524  */
527 
528 
531 void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert);
532 
533 
539 
545 
546 
549 #ifdef __cplusplus
550 }
551 #endif
552 
553 #endif
554 
555 
556 
557 
558 
559 
GWENHYWFAR_API uint32_t GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf)
Definition: buffer.c:533
GWENHYWFAR_API int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size)
Definition: buffer.c:1037
GWENHYWFAR_API char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:231
GWENHYWFAR_API int GWEN_Buffer_InsertString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:995
GWENHYWFAR_API int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size)
Definition: buffer.c:281
GWENHYWFAR_API uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf)
Definition: buffer.c:524
GWENHYWFAR_API uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:273
GWENHYWFAR_API void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l)
Definition: buffer.c:222
GWENHYWFAR_API void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step)
Definition: buffer.c:709
GWENHYWFAR_API int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
Definition: buffer.c:465
GWENHYWFAR_API uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
Definition: buffer.c:249
GWENHYWFAR_API int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf, unsigned char c, uint32_t size)
Definition: buffer.c:1005
GWENHYWFAR_API int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res)
Definition: buffer.c:153
GWENHYWFAR_API GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take_ownership)
Definition: buffer.c:38
GWENHYWFAR_API int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size)
Definition: buffer.c:794
GWENHYWFAR_API void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
Definition: buffer.c:582
GWENHYWFAR_API char * GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf)
Definition: buffer.c:545
GWENHYWFAR_API void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:646
GWENHYWFAR_API int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Free(void *ptr)
Definition: buffer.c:1072
GWENHYWFAR_API int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
Definition: buffer.c:448
GWENHYWFAR_API void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx, uint32_t v)
Definition: buffer.c:572
GWENHYWFAR_API int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf)
Definition: buffer.c:422
GWENHYWFAR_API uint32_t GWEN_Buffer_GetBookmark(const GWEN_BUFFER *bf, unsigned int idx)
Definition: buffer.c:563
GWENHYWFAR_API void GWEN_Buffer_Attach(GWEN_BUFFER *bf)
Definition: buffer.c:77
GWENHYWFAR_API uint32_t GWEN_Buffer_GetSize(const GWEN_BUFFER *bf)
Definition: buffer.c:239
GWENHYWFAR_API void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode)
Definition: buffer.c:206
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
GWENHYWFAR_API int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
Definition: buffer.c:503
GWENHYWFAR_API int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c)
Definition: buffer.c:907
GWENHYWFAR_API int GWENHYWFAR_CB GWEN_Buffer_CacheFn_Attach(void *ptr)
Definition: buffer.c:1064
GWENHYWFAR_API void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode)
Definition: buffer.c:199
GWENHYWFAR_API int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
Definition: buffer.c:390
GWENHYWFAR_API int GWEN_Buffer_Relinquish(GWEN_BUFFER *bf)
Definition: buffer.c:139
GWENHYWFAR_API GWEN_BUFFER * GWEN_Buffer_dup(GWEN_BUFFER *bf)
Definition: buffer.c:101
GWENHYWFAR_API int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i)
Definition: buffer.c:487
GWENHYWFAR_API void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:85
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
#define GWENHYWFAR_API
Definition: gwenhywfarapi.h:67
GWENHYWFAR_API int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
Definition: buffer.c:943
GWENHYWFAR_API void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode)
Definition: buffer.c:192
GWENHYWFAR_API uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf)
Definition: buffer.c:701
GWENHYWFAR_API int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i)
Definition: buffer.c:257
GWENHYWFAR_API int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf, GWEN_BUFFER *sf)
Definition: buffer.c:932
GWENHYWFAR_API uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf)
Definition: buffer.c:184
GWENHYWFAR_API int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf)
Definition: buffer.c:435
GWENHYWFAR_API int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
Definition: buffer.c:357
GWENHYWFAR_API void GWEN_Buffer_Rewind(GWEN_BUFFER *bf)
Definition: buffer.c:656
GWENHYWFAR_API int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf, uint32_t size)
Definition: buffer.c:732
GWENHYWFAR_API int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
Definition: buffer.c:879
GWENHYWFAR_API uint32_t GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf)
Definition: buffer.c:214
GWENHYWFAR_API int GWEN_Buffer_ReplaceBytes(GWEN_BUFFER *bf, uint32_t rsize, const char *buffer, uint32_t size)
Definition: buffer.c:837
GWENHYWFAR_API int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf, char *buffer, uint32_t *size)
Definition: buffer.c:664
GWENHYWFAR_API int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:985
GWENHYWFAR_API void GWEN_Buffer_OverwriteContent(GWEN_BUFFER *bf, int c)
Definition: buffer.c:553