00001
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _MDB_MIDL_H_
00027 #define _MDB_MIDL_H_
00028
00029 #include <stddef.h>
00030
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034
00045 typedef size_t MDB_ID;
00046
00053 typedef MDB_ID *MDB_IDL;
00054
00055
00056
00057
00058 #define MDB_IDL_LOGN 16
00059 #define MDB_IDL_DB_SIZE (1<<MDB_IDL_LOGN)
00060 #define MDB_IDL_UM_SIZE (1<<(MDB_IDL_LOGN+1))
00061
00062 #define MDB_IDL_DB_MAX (MDB_IDL_DB_SIZE-1)
00063 #define MDB_IDL_UM_MAX (MDB_IDL_UM_SIZE-1)
00064
00065 #define MDB_IDL_SIZEOF(ids) (((ids)[0]+1) * sizeof(MDB_ID))
00066 #define MDB_IDL_IS_ZERO(ids) ( (ids)[0] == 0 )
00067 #define MDB_IDL_CPY( dst, src ) (memcpy( dst, src, MDB_IDL_SIZEOF( src ) ))
00068 #define MDB_IDL_FIRST( ids ) ( (ids)[1] )
00069 #define MDB_IDL_LAST( ids ) ( (ids)[(ids)[0]] )
00070
00072 #define MDB_IDL_ALLOCLEN( ids ) ( (ids)[-1] )
00073
00075 #define mdb_midl_xappend(idl, id) do { \
00076 MDB_ID *xidl = (idl), xlen = ++(xidl[0]); \
00077 xidl[xlen] = (id); \
00078 } while (0)
00079
00085 unsigned mdb_midl_search( MDB_IDL ids, MDB_ID id );
00086
00091 MDB_IDL mdb_midl_alloc(int num);
00092
00096 void mdb_midl_free(MDB_IDL ids);
00097
00102 void mdb_midl_shrink(MDB_IDL *idp);
00103
00109 int mdb_midl_need(MDB_IDL *idp, unsigned num);
00110
00116 int mdb_midl_append( MDB_IDL *idp, MDB_ID id );
00117
00123 int mdb_midl_append_list( MDB_IDL *idp, MDB_IDL app );
00124
00131 int mdb_midl_append_range( MDB_IDL *idp, MDB_ID id, unsigned n );
00132
00137 void mdb_midl_xmerge( MDB_IDL idl, MDB_IDL merge );
00138
00142 void mdb_midl_sort( MDB_IDL ids );
00143
00146 typedef struct MDB_ID2 {
00147 MDB_ID mid;
00148 void *mptr;
00149 } MDB_ID2;
00150
00156 typedef MDB_ID2 *MDB_ID2L;
00157
00163 unsigned mdb_mid2l_search( MDB_ID2L ids, MDB_ID id );
00164
00165
00171 int mdb_mid2l_insert( MDB_ID2L ids, MDB_ID2 *id );
00172
00178 int mdb_mid2l_append( MDB_ID2L ids, MDB_ID2 *id );
00179
00182 #ifdef __cplusplus
00183 }
00184 #endif
00185 #endif