view src/dmgrowbuf.h @ 1531:260bf529a8f2

Implement current len/offs push/pop for growbuf.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 12 May 2018 03:23:32 +0300
parents e8fe529f4341
children 907160399b24
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, *adata;
    size_t len, size, mingrow, offs;
    BOOL allocated;
    int nstack;
    struct { size_t offs, len; } stack[32];
} 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);
int    dmGrowBufResize(DMGrowBuf *buf);

BOOL   dmGrowBufPutU8(DMGrowBuf *buf, const Uint8 value);
BOOL   dmGrowBufPut(DMGrowBuf *buf, const void *str, const size_t len);

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);

void    dmGrowBufPush(DMGrowBuf *buf);
void    dmGrowBufPop(DMGrowBuf *buf);


#ifdef __cplusplus
}
#endif

#endif // DMGROWBUF_H