view src/dmgrowbuf.h @ 2576:812b16ee49db

I had been living under apparent false impression that "realfft.c" on which the FFT implementation in DMLIB was basically copied from was released in public domain at some point, but it could very well be that it never was. Correct license is (or seems to be) GNU GPL. Thus I removing the code from DMLIB, and profusely apologize to the author, Philip Van Baren. It was never my intention to distribute code based on his original work under a more liberal license than originally intended.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 11 Mar 2022 16:32:50 +0200
parents c6ee41fd98dd
children 9807ae37ad69
line wrap: on
line source

/*
 * DMLib
 * -- Growable buffer implementation
 * Programmed and designed by Matti 'ccr' Hamalainen
 * (C) Copyright 2018-2021 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 * dmGrowBufCopyOffsSize(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs, const size_t len, const size_t enlarge);

DMGrowBuf * dmGrowBufConstCopy(DMGrowBuf *dst, const DMGrowBuf *src);
DMGrowBuf * dmGrowBufConstCopyOffs(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs);
DMGrowBuf * dmGrowBufConstCopyOffsSize(DMGrowBuf *dst, const DMGrowBuf *src, const size_t offs, const size_t len);
DMGrowBuf * dmGrowBufConstCreateFrom(DMGrowBuf *buf, Uint8 *data, const 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