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
00049
00050 #include <stdio.h>
00051
00052 #include <string.h>
00053
00054 #ifdef __cplusplus
00055 extern "C" {
00056 #endif
00057
00066
00067 #define GWEN_BUFFER_MAX_BOOKMARKS 4
00068
00069 #define GWEN_BUFFER_MODE_DYNAMIC 0x0001
00070 #define GWEN_BUFFER_MODE_ABORT_ON_MEMFULL 0x0002
00071 #define GWEN_BUFFER_MODE_USE_BIO 0x0004
00072
00073 #define GWEN_BUFFER_MODE_DEFAULT \
00074 (\
00075 GWEN_BUFFER_MODE_DYNAMIC | \
00076 GWEN_BUFFER_MODE_ABORT_ON_MEMFULL\
00077 )
00078
00079
00103 GWENHYWFAR_API
00104 GWEN_BUFFER *GWEN_Buffer_new(char *buffer,
00105 GWEN_TYPE_UINT32 size,
00106 GWEN_TYPE_UINT32 used,
00107 int take_ownership);
00108
00115 GWENHYWFAR_API
00116 void GWEN_Buffer_free(GWEN_BUFFER *bf);
00117
00118
00120 GWENHYWFAR_API
00121 GWEN_BUFFER *GWEN_Buffer_dup(GWEN_BUFFER *bf);
00122
00123
00128 GWENHYWFAR_API
00129 GWEN_TYPE_UINT32 GWEN_Buffer_GetMode(GWEN_BUFFER *bf);
00130
00135 GWENHYWFAR_API
00136 void GWEN_Buffer_SetMode(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 mode);
00137
00142 GWENHYWFAR_API
00143 void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 mode);
00144
00149 GWENHYWFAR_API
00150 void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 mode);
00151
00156 GWENHYWFAR_API
00157 GWEN_TYPE_UINT32 GWEN_Buffer_GetHardLimit(GWEN_BUFFER *bf);
00158
00163 GWENHYWFAR_API
00164 void GWEN_Buffer_SetHardLimit(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 l);
00165
00166
00172 GWENHYWFAR_API
00173 GWEN_TYPE_UINT32 GWEN_Buffer_GetStep(GWEN_BUFFER *bf);
00174
00182 GWENHYWFAR_API
00183 void GWEN_Buffer_SetStep(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 step);
00184
00185
00194 GWENHYWFAR_API
00195 int GWEN_Buffer_ReserveBytes(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 res);
00196
00197
00202 GWENHYWFAR_API
00203 char *GWEN_Buffer_GetStart(GWEN_BUFFER *bf);
00204
00205
00209 GWENHYWFAR_API
00210 GWEN_TYPE_UINT32 GWEN_Buffer_GetSize(GWEN_BUFFER *bf);
00211
00212
00217 GWENHYWFAR_API
00218 GWEN_TYPE_UINT32 GWEN_Buffer_GetPos(GWEN_BUFFER *bf);
00219
00223 GWENHYWFAR_API
00224 int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 i);
00225
00228 GWENHYWFAR_API
00229 GWEN_TYPE_UINT32 GWEN_Buffer_GetUsedBytes(GWEN_BUFFER *bf);
00230
00231
00235 GWENHYWFAR_API
00236 GWEN_TYPE_UINT32 GWEN_Buffer_GetBookmark(GWEN_BUFFER *bf, unsigned int idx);
00237
00238
00243 GWENHYWFAR_API
00244 void GWEN_Buffer_SetBookmark(GWEN_BUFFER *bf, unsigned int idx,
00245 GWEN_TYPE_UINT32 v);
00246
00247
00251 GWENHYWFAR_API
00252 int GWEN_Buffer_SetUsedBytes(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 i);
00253
00260 GWENHYWFAR_API
00261 int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf,
00262 const char *buffer,
00263 GWEN_TYPE_UINT32 size);
00264
00265 GWENHYWFAR_API
00266 int GWEN_Buffer_FillWithBytes(GWEN_BUFFER *bf,
00267 unsigned char c,
00268 GWEN_TYPE_UINT32 size);
00269
00270 GWENHYWFAR_API
00271 int GWEN_Buffer_FillLeftWithBytes(GWEN_BUFFER *bf,
00272 unsigned char c,
00273 GWEN_TYPE_UINT32 size);
00274
00275
00281 GWENHYWFAR_API
00282 int GWEN_Buffer_AppendString(GWEN_BUFFER *bf,
00283 const char *buffer);
00284
00285
00292 GWENHYWFAR_API
00293 int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c);
00294
00304 GWENHYWFAR_API
00305 int GWEN_Buffer_InsertBytes(GWEN_BUFFER *bf,
00306 const char *buffer,
00307 GWEN_TYPE_UINT32 size);
00308
00318 GWENHYWFAR_API
00319 int GWEN_Buffer_InsertRoom(GWEN_BUFFER *bf,
00320 GWEN_TYPE_UINT32 size);
00321
00322
00331 GWENHYWFAR_API
00332 int GWEN_Buffer_InsertString(GWEN_BUFFER *bf,
00333 const char *buffer);
00334
00346 GWENHYWFAR_API
00347 int GWEN_Buffer_InsertByte(GWEN_BUFFER *bf, char c);
00348
00354 GWENHYWFAR_API
00355 int GWEN_Buffer_ReadByte(GWEN_BUFFER *bf);
00356
00357
00363 GWENHYWFAR_API
00364 int GWEN_Buffer_ReadBytes(GWEN_BUFFER *bf,
00365 char *buffer,
00366 GWEN_TYPE_UINT32 *size);
00367
00368
00375 GWENHYWFAR_API
00376 int GWEN_Buffer_PeekByte(GWEN_BUFFER *bf);
00377
00378
00380 GWENHYWFAR_API
00381 int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 i);
00382
00384 GWENHYWFAR_API
00385 int GWEN_Buffer_DecrementPos(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 i);
00386
00387 GWENHYWFAR_API
00388 int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf);
00389
00390
00396 GWENHYWFAR_API
00397 int GWEN_Buffer_InsertBuffer(GWEN_BUFFER *bf,
00398 GWEN_BUFFER *sf);
00399
00404 GWENHYWFAR_API
00405 int GWEN_Buffer_AppendBuffer(GWEN_BUFFER *bf,
00406 GWEN_BUFFER *sf);
00407
00408
00413 GWENHYWFAR_API
00414 GWEN_TYPE_UINT32 GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf);
00415
00416
00420 GWENHYWFAR_API
00421 GWEN_TYPE_UINT32 GWEN_Buffer_GetBytesLeft(GWEN_BUFFER *bf);
00422
00423
00427 GWENHYWFAR_API
00428 char *GWEN_Buffer_GetPosPointer(GWEN_BUFFER *bf);
00429
00430
00434 GWENHYWFAR_API
00435 void GWEN_Buffer_Reset(GWEN_BUFFER *bf);
00436
00440 GWENHYWFAR_API
00441 void GWEN_Buffer_Rewind(GWEN_BUFFER *bf);
00442
00443
00447 GWENHYWFAR_API
00448 int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, GWEN_TYPE_UINT32 size);
00449
00450
00451
00452 GWENHYWFAR_API
00453 int GWEN_Buffer_Crop(GWEN_BUFFER *bf,
00454 GWEN_TYPE_UINT32 pos,
00455 GWEN_TYPE_UINT32 l);
00456
00457
00465 GWENHYWFAR_API
00466 void GWEN_Buffer_SetSourceBIO(GWEN_BUFFER *bf,
00467 GWEN_BUFFEREDIO *bio,
00468 int take);
00469
00471 GWENHYWFAR_API
00472 void GWEN_Buffer_Dump(GWEN_BUFFER *bf, FILE *f, unsigned int insert);
00473
00474
00477 #ifdef __cplusplus
00478 }
00479 #endif
00480
00481 #endif
00482
00483
00484
00485
00486
00487