Mercurial > hg > dmlib
view src/dmgrowbuf.h @ 1697:1036b0dcccb5
Refactor DMGrowBuf so that there can be buffers that grow "backwards".
This also removes some support functions like the buffer state push/pop.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 05 Jun 2018 12:55:17 +0300 |
parents | e568535e1a96 |
children | f71cd6691e05 |
line wrap: on
line source
/* * DMLib * -- Growable buffer implementation * Programmed and designed by Matti 'ccr' Hamalainen * (C) Copyright 2018 Tecnic Software productions (TNSP) */ #ifndef DMGROWBUF_H #define DMGROWBUF_H #include "dmlib.h" #ifdef __cplusplus extern "C" { #endif typedef struct { Uint8 *data; // Actually allocated data pointer size_t offs, // Current offset min_offs, max_offs, size, // Actual allocated size len, // Size requested mingrow; // Minimum amount of bytes the allocation size grows by BOOL allocated, // TRUE if this structure itself has been allocated and can be freed, FALSE if static backwards, // TRUE if the buffer grows backwards (e.g. "offs" moves backwards) literal; // TRUE if dmGrowBufPut*() functions stores data "literally" in backwards mode } DMGrowBuf; int dmGrowBufInit(DMGrowBuf *buf); int dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow); int dmGrowBufNew(DMGrowBuf **pbuf, const size_t initial, const size_t mingrow); void dmGrowBufFree(DMGrowBuf *buf); BOOL dmGrowBufGrow(DMGrowBuf *buf, const size_t amount); BOOL dmGrowBufCheckGrow(DMGrowBuf *buf, const size_t nsize); BOOL dmGrowBufPut(DMGrowBuf *buf, const Uint8 *data, const size_t len); BOOL dmGrowBufPutU8(DMGrowBuf *buf, const Uint8 value); BOOL dmGrowBufPutU16BE(DMGrowBuf *buf, const Uint16 val); BOOL dmGrowBufPutU16LE(DMGrowBuf *buf, const Uint16 val); BOOL dmGrowBufPutU32BE(DMGrowBuf *buf, const Uint32 val); BOOL dmGrowBufPutU32LE(DMGrowBuf *buf, const Uint32 val); #ifdef __cplusplus } #endif #endif // DMGROWBUF_H