X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibmdb%2Fmidl.h;h=beafb097c0b2355f197e8cb0707475d4da512043;hb=c7fe1f466e8bfcac0c9169c741710c76807a11ba;hp=a08046308c6de8b6d46cd724b043d122852028e6;hpb=e91dae3ed52ea2ced5d747b3ab95534c957c8e6d;p=openldap diff --git a/libraries/libmdb/midl.h b/libraries/libmdb/midl.h index a08046308c..beafb097c0 100644 --- a/libraries/libmdb/midl.h +++ b/libraries/libmdb/midl.h @@ -11,7 +11,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2011 The OpenLDAP Foundation. + * Copyright 2000-2012 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,15 +26,19 @@ #ifndef _MDB_MIDL_H_ #define _MDB_MIDL_H_ +#include + /** @defgroup internal MDB Internals * @{ */ + /** @defgroup idls ID List Management * @{ */ - /** An ID should be the largest integer type supported on a machine. + /** A generic ID number. These were entryIDs in back-bdb. + * Preferably it should have the same size as a pointer. */ -#define ID unsigned long +typedef size_t ID; /** An IDL is an ID List, a sorted array of IDs. The first * element of the array is a counter for how many actual @@ -97,12 +101,51 @@ typedef ID *IDL; #define MDB_IDL_N( ids ) ( MDB_IDL_IS_RANGE(ids) \ ? ((ids)[2]-(ids)[1])+1 : (ids)[0] ) +#if 0 /* superseded by append/sort */ /** Insert an ID into an IDL. * @param[in,out] ids The IDL to insert into. * @param[in] id The ID to insert. * @return 0 on success, -1 if the ID was already present in the IDL. */ int mdb_midl_insert( IDL ids, ID id ); +#endif + + /** Allocate an IDL. + * Allocates memory for an IDL of a default size. + * @return IDL on success, NULL on failure. + */ +IDL mdb_midl_alloc(); + + /** Free an IDL. + * @param[in] ids The IDL to free. + */ +void mdb_midl_free(IDL ids); + + /** Shrink an IDL. + * Return the IDL to the default size if it has grown larger. + * @param[in,out] idp Address of the IDL to shrink. + * @return 0 on no change, non-zero if shrunk. + */ +int mdb_midl_shrink(IDL *idp); + + /** Append an ID onto an IDL. + * @param[in,out] idp Address of the IDL to append to. + * @param[in] id The ID to append. + * @return 0 on success, -1 if the IDL is too large. + */ +int mdb_midl_append( IDL *idp, ID id ); + + /** Append an IDL onto an IDL. + * @param[in,out] idp Address of the IDL to append to. + * @param[in] app The IDL to append. + * @return 0 on success, -1 if the IDL is too large. + */ +int mdb_midl_append_list( IDL *idp, IDL app ); + + /** Sort an IDL. + * @param[in,out] ids The IDL to sort. + */ +void mdb_midl_sort( IDL ids ); /** An ID2 is an ID/pointer pair. */ @@ -129,7 +172,7 @@ unsigned mdb_mid2l_search( ID2L ids, ID id ); /** Insert an ID2 into a ID2L. * @param[in,out] ids The ID2L to insert into. * @param[in] id The ID2 to insert. - * @return 0 on success, -1 if the ID was already present in the MIDL2. + * @return 0 on success, -1 if the ID was already present in the ID2L. */ int mdb_mid2l_insert( ID2L ids, ID2 *id );