view src/dmgrowbuf.h @ 2208:90ec1ec89c56

Revamp the palette handling in lib64gfx somewhat, add helper functions to lib64util for handling external palette file options and add support for specifying one of the "internal" palettes or external (.act) palette file to gfxconv and 64vw.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 14 Jun 2019 05:01:12 +0300
parents 3d4bb20f6739
children 732fa926a5ef
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
        size,       // Actual allocated size
        len,        // Size requested
        mingrow;    // Minimum amount of bytes the allocation size grows by

    BOOL
        backwards,  // TRUE if the buffer grows backwards (e.g. "offs" moves backwards)
        literal,    // TRUE if dmGrowBufPut*() functions stores data "literally" in backwards mode
        is_const;   // TRUE will cause any reallocs etc. modifications to fail
} DMGrowBuf;


int    dmGrowBufInit(DMGrowBuf *buf);
int    dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow);
void   dmGrowBufFree(DMGrowBuf *buf);

DMGrowBuf * dmGrowBufCopy(DMGrowBuf *dst, const DMGrowBuf *src, const size_t enlarge);
DMGrowBuf * dmGrowBufCopyOffs(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs, const size_t enlarge);
DMGrowBuf * dmGrowBufConstCopy(DMGrowBuf *dst, const DMGrowBuf *src);
DMGrowBuf * dmGrowBufConstCopyOffs(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs);
DMGrowBuf * dmGrowBufConstCreateFrom(DMGrowBuf *buf, Uint8 *data, size_t len);


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

BOOL   dmGrowBufGetU8(DMGrowBuf *buf, Uint8 *value);


#ifdef __cplusplus
}
#endif

#endif // DMGROWBUF_H