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_midl_xappend(idl, id) do { \
00073 MDB_ID *xidl = (idl), xlen = ++(xidl[0]); \
00074 xidl[xlen] = (id); \
00075 } while (0)
00076
00082 unsigned mdb_midl_search( MDB_IDL ids, MDB_ID id );
00083
00088 MDB_IDL mdb_midl_alloc(int num);
00089
00093 void mdb_midl_free(MDB_IDL ids);
00094
00100 int mdb_midl_shrink(MDB_IDL *idp);
00101
00107 int mdb_midl_need(MDB_IDL *idp, unsigned num);
00108
00114 int mdb_midl_append( MDB_IDL *idp, MDB_ID id );
00115
00121 int mdb_midl_append_list( MDB_IDL *idp, MDB_IDL app );
00122
00129 int mdb_midl_append_range( MDB_IDL *idp, MDB_ID id, unsigned n );
00130
00134 void mdb_midl_sort( MDB_IDL ids );
00135
00138 typedef struct MDB_ID2 {
00139 MDB_ID mid;
00140 void *mptr;
00141 } MDB_ID2;
00142
00148 typedef MDB_ID2 *MDB_ID2L;
00149
00155 unsigned mdb_mid2l_search( MDB_ID2L ids, MDB_ID id );
00156
00157
00163 int mdb_mid2l_insert( MDB_ID2L ids, MDB_ID2 *id );
00164
00170 int mdb_mid2l_append( MDB_ID2L ids, MDB_ID2 *id );
00171
00174 #ifdef __cplusplus
00175 }
00176 #endif
00177 #endif