00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef GWENHYWFAR_BUFFER_H
00030 #define GWENHYWFAR_BUFFER_H
00031
00032 #include <gwenhywfar/gwenhywfarapi.h>
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00041 typedef struct GWEN_BUFFER GWEN_BUFFER;
00042 #ifdef __cplusplus
00043 }
00044 #endif
00045
00046 #include <gwenhywfar/types.h>
00047 #include <gwenhywfar/bufferedio.h>
00048 #include <gwenhywfar/iolayer.h>
00049
00050
00051 #include <stdio.h>
00052
00053 #include <string.h>
00054
00055 #ifdef __cplusplus
00056 extern "C" {
00057 #endif
00058
00067
00068 #define GWEN_BUFFER_MAX_BOOKMARKS 32
00069
00070 #define GWEN_BUFFER_MODE_DYNAMIC 0x0001
00071 #define GWEN_BUFFER_MODE_ABORT_ON_MEMFULL 0x0002
00072 #define GWEN_BUFFER_MODE_USE_BIO 0x0004
00073 #define GWEN_BUFFER_MODE_USE_IO 0x0008
00074
00075 #define GWEN_BUFFER_MODE_DEFAULT \
00076 (\
00077 GWEN_BUFFER_MODE_DYNAMIC | \
00078 GWEN_BUFFER_MODE_ABORT_ON_MEMFULL\
00079 )
00080
00081
00105 GWENHYWFAR_API
00106 GWEN_BUFFER *GWEN_Buffer_new(char *buffer,
00107 uint32_t size,
00108 uint32_t used,
00109 int take_ownership);
00110
00117 GWENHYWFAR_API
00118 void GWEN_Buffer_free(GWEN_BUFFER *bf);
00119
00120
00122 GWENHYWFAR_API
00123 GWEN_BUFFER *GWEN_Buffer_dup(GWEN_BUFFER *bf);
00124
00125
00134 GWENHYWFAR_API
00135 int GWEN_Buffer_Relinquish(GWEN_BUFFER *bf);
00136
00141 GWENHYWFAR_API
00142 uint32_t GWEN_Buffer_GetMode(GWEN_BUFFER *bf);
00143
00148 GWENHYWFAR_API
00149 void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, uint32_t mode);
00150
00155 GWENHYWFAR_API
00156 void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode);
00157
00162 GWENHYWFAR_API
00163 void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode);
00164
00169 GWENHYWFAR_API
00170 uint32_t GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf);
00171
00176 GWENHYWFAR_API
00177 void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, uint32_t l);
00178
00179
00185 GWENHYWFAR_API
00186 uint32_t GWEN_Buffer_GetStep(GWEN_BUFFER *bf);
00187
00195 GWENHYWFAR_API
00196 void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, uint32_t step);
00197
00198
00207 GWENHYWFAR_API
00208 int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, uint32_t res);
00209
00210
00215 GWENHYWFAR_API
00216 char *GWEN_Buffer_GetStart(GWEN_BUFFER *bf);
00217
00218
00222 GWENHYWFAR_API
00223 uint32_t GWEN_Buffer_GetSize(GWEN_BUFFER *bf);
00224
00225
00230 GWENHYWFAR_API
00231 uint32_t GWEN_Buffer_GetPos(GWEN_BUFFER *bf);
00232
00236 GWENHYWFAR_API
00237 int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i);
00238
00241 GWENHYWFAR_API
00242 uint32_t GWEN_Buffer_GetUsedBytes(GWEN_BUFFER *bf);
00243
00244
00248 GWENHYWFAR_API
00249 uint32_t GWEN_Buffer_GetBookmark(GWEN_BUFFER *bf, unsigned int idx);
00250
00251
00256 GWENHYWFAR_API
00257 void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx,
00258 uint32_t v);
00259
00260
00264 GWENHYWFAR_API
00265 int GWEN_Buffer_SetUsedBytes(GWEN_BUFFER *bf, uint32_t i);
00266
00273 GWENHYWFAR_API
00274 int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf,
00275 const char *buffer,
00276 uint32_t size);
00277
00278 GWENHYWFAR_API
00279 int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf,
00280 unsigned char c,
00281 uint32_t size);
00282
00283 GWENHYWFAR_API
00284 int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf,
00285 unsigned char c,
00286 uint32_t size);
00287
00288
00294 GWENHYWFAR_API
00295 int GWEN_Buffer_AppendString(GWEN_BUFFER *bf,
00296 const char *buffer);
00297
00298
00305 GWENHYWFAR_API
00306 int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c);
00307
00317 GWENHYWFAR_API
00318 int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf,
00319 const char *buffer,
00320 uint32_t size);
00321
00332 GWENHYWFAR_API
00333 int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf,
00334 uint32_t size);
00335
00346 GWENHYWFAR_API
00347 int GWEN_Buffer_RemoveRoom(GWEN_BUFFER *bf, uint32_t size);
00348
00359 GWENHYWFAR_API
00360 int GWEN_Buffer_ReplaceBytes(GWEN_BUFFER *bf,
00361 uint32_t rsize,
00362 const char *buffer,
00363 uint32_t size);
00364
00365
00375 GWENHYWFAR_API
00376 int GWEN_Buffer_InsertString(GWEN_BUFFER *bf,
00377 const char *buffer);
00378
00391 GWENHYWFAR_API
00392 int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c);
00393
00399 GWENHYWFAR_API
00400 int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf);
00401
00402
00408 GWENHYWFAR_API
00409 int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf,
00410 char *buffer,
00411 uint32_t *size);
00412
00413
00420 GWENHYWFAR_API
00421 int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf);
00422
00423
00425 GWENHYWFAR_API
00426 int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i);
00427
00429 GWENHYWFAR_API
00430 int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, uint32_t i);
00431
00454 GWENHYWFAR_API
00455 int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf);
00456
00457
00463 GWENHYWFAR_API
00464 int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf,
00465 GWEN_BUFFER *sf);
00466
00471 GWENHYWFAR_API
00472 int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf,
00473 GWEN_BUFFER *sf);
00474
00475
00480 GWENHYWFAR_API
00481 uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf);
00482
00483
00487 GWENHYWFAR_API
00488 uint32_t GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf);
00489
00490
00494 GWENHYWFAR_API
00495 char *GWEN_Buffer_GetPosPointer(GWEN_BUFFER *bf);
00496
00497
00501 GWENHYWFAR_API
00502 void GWEN_Buffer_Reset(GWEN_BUFFER *bf);
00503
00507 GWENHYWFAR_API
00508 void GWEN_Buffer_Rewind(GWEN_BUFFER *bf);
00509
00510
00514 GWENHYWFAR_API
00515 int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size);
00516
00517
00518
00519 GWENHYWFAR_API
00520 int GWEN_Buffer_Crop(GWEN_BUFFER *bf,
00521 uint32_t pos,
00522 uint32_t l);
00523
00524
00532 GWENHYWFAR_API
00533 void GWEN_Buffer_SetSourceBIO(GWEN_BUFFER *bf,
00534 GWEN_BUFFEREDIO *bio,
00535 int take);
00536
00544 GWENHYWFAR_API
00545 void GWEN_Buffer_SetSourceIoLayer(GWEN_BUFFER *bf,
00546 GWEN_IO_LAYER *io,
00547 int take);
00548
00549
00551 GWENHYWFAR_API
00552 void GWEN_Buffer_Dump(GWEN_BUFFER *bf, FILE *f, unsigned int insert);
00553
00554
00557 #ifdef __cplusplus
00558 }
00559 #endif
00560
00561 #endif
00562
00563
00564
00565
00566
00567