180 lines
3.4 KiB
C

#ifndef DATA_H_INCLUDED
#define DATA_H_INCLUDED
#include "bool.h"
#include "int.h"
struct abyss_mutex;
/*********************************************************************
** Buffer
*********************************************************************/
typedef struct
{
void *data;
xmlrpc_uint32_t size;
xmlrpc_uint32_t staticid;
} TBuffer;
bool
BufferAlloc(TBuffer * const buf,
xmlrpc_uint32_t const memsize);
bool
BufferRealloc(TBuffer * const buf,
xmlrpc_uint32_t const memsize);
void
BufferFree(TBuffer * const buf);
/*********************************************************************
** String
*********************************************************************/
typedef struct
{
TBuffer buffer;
xmlrpc_uint32_t size;
} TString;
bool
StringAlloc(TString * const stringP);
bool
StringConcat(TString * const stringP,
const char * const string2);
bool
StringBlockConcat(TString * const stringP,
const char * const string2,
char ** const ref);
void
StringFree(TString * const stringP);
char *
StringData(TString * const stringP);
/*********************************************************************
** List
*********************************************************************/
typedef struct {
void **item;
uint16_t size;
uint16_t maxsize;
bool autofree;
} TList;
void
ListInit(TList * const listP);
void
ListInitAutoFree(TList * const listP);
void
ListFree(TList * const listP);
void
ListFreeItems(TList * const listP);
bool
ListAdd(TList * const listP,
void * const str);
void
ListRemove(TList * const listP);
bool
ListAddFromString(TList * const listP,
const char * const c);
bool
ListFindString(TList * const listP,
const char * const str,
uint16_t * const indexP);
typedef struct
{
char *name,*value;
uint16_t hash;
} TTableItem;
typedef struct
{
TTableItem *item;
uint16_t size,maxsize;
} TTable;
void
TableInit(TTable * const t);
void
TableFree(TTable * const t);
bool
TableAdd(TTable * const t,
const char * const name,
const char * const value);
bool
TableAddReplace(TTable * const t,
const char * const name,
const char * const value);
bool
TableFindIndex(TTable * const t,
const char * const name,
uint16_t * const index);
char *
TableFind(TTable * const t,
const char * const name);
/*********************************************************************
** Pool
*********************************************************************/
typedef struct _TPoolZone {
char * pos;
char * maxpos;
struct _TPoolZone * next;
struct _TPoolZone * prev;
/* char data[0]; Some compilers don't accept this */
char data[1];
} TPoolZone;
typedef struct {
TPoolZone * firstzone;
TPoolZone * currentzone;
uint32_t zonesize;
struct abyss_mutex * mutexP;
} TPool;
bool
PoolCreate(TPool * const poolP,
uint32_t const zonesize);
void
PoolFree(TPool * const poolP);
void *
PoolAlloc(TPool * const poolP,
uint32_t const size);
void
PoolReturn(TPool * const poolP,
void * const blockP);
const char *
PoolStrdup(TPool * const poolP,
const char * const origString);
#endif