diff options
Diffstat (limited to '3rdparty/dict/dict.h')
-rw-r--r-- | 3rdparty/dict/dict.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/3rdparty/dict/dict.h b/3rdparty/dict/dict.h new file mode 100644 index 0000000..424bc28 --- /dev/null +++ b/3rdparty/dict/dict.h @@ -0,0 +1,98 @@ +/* ******************************************** */ +/* File Name: dict.h */ +/* Author: (C) 2008-2009 - Juan José Ponteprino */ +/* Description: Dictionary API Headers */ +/* License: This code is licenced as LGPL */ +/* ******************************************** */ + +#ifndef _DICT_H +#define _DICT_H + +/* --------------------------------------------------------------------------- */ + +// Hash 8 +#define DICT_HASH_MAX8 256 +#define DICT_HASH_MASK8 0xff +#define DICT_HASH_SHIFT8 1 + +// Hash 16 (default) +#define DICT_HASH_MAX16 65536 +#define DICT_HASH_MASK16 0xffff +#define DICT_HASH_SHIFT16 4 + +#ifdef USE_HASH8 +// Hash 8 +#define DICT_HASH_MAX DICT_HASH_MAX8 +#define DICT_HASH_MASK DICT_HASH_MASK8 +#define DICT_HASH_SHIFT DICT_HASH_SHIFT8 +#else +// Hash 16 (default) +#define DICT_HASH_MAX DICT_HASH_MAX16 +#define DICT_HASH_MASK DICT_HASH_MASK16 +#define DICT_HASH_SHIFT DICT_HASH_SHIFT16 +#endif + +/* --------------------------------------------------------------------------- */ + +#define DICT_ENTRY_FLAG_NORMAL 0x00000000 +#define DICT_ENTRY_FLAG_DONT_ALLOC 0x00000001 + +/* --------------------------------------------------------------------------- */ + +typedef struct DICT_ENTRY_T +{ + char * key; + + long len; + void * val; + + int flags; + + struct DICT_ENTRY_T * prev; + struct DICT_ENTRY_T * next; + + struct DICT_ENTRY_T * prev_hashed; + struct DICT_ENTRY_T * next_hashed; + +} DICT_ENTRY_T; + +typedef struct DICT_T +{ + char * id; + int hash; + + DICT_ENTRY_T * entries; + DICT_ENTRY_T * entries_hashed[DICT_HASH_MAX]; + + struct DICT_T * prev; + struct DICT_T * next; + + struct DICT_T * prev_hashed; + struct DICT_T * next_hashed; + +} DICT_T; + +/* --------------------------------------------------------------------------- */ + +extern void DICT_Init(); +extern void DICT_Exit(); + +extern DICT_T * DICT_Create( char * id ); +extern int DICT_Destroy( DICT_T * dict ); + +extern int DICT_AddEntry( DICT_T * dict, char * key, void * value, int len, int flags ); +extern void * DICT_GetEntry( DICT_T * dict, char * key, int * len ); +extern DICT_ENTRY_T * DICT_FindEntry( DICT_T * dict, char * key ); + +extern void DICT_DelEntry( DICT_T * dict, char * key ); +extern void DICT_DelAllEntries( DICT_T * dict ); +extern int DICT_Merge( DICT_T * target, DICT_T * source ); + +extern DICT_ENTRY_T * DICT_GetNextEntry( DICT_T * dict, DICT_ENTRY_T * current ); +extern DICT_ENTRY_T * DICT_GetPrevEntry( DICT_T * dict, DICT_ENTRY_T * current ); + +extern void DICT_ShowAllEntries( DICT_T * dict, FILE * fp ); + +/* --------------------------------------------------------------------------- */ + +#endif |