X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibmdb%2Fmidl.h;h=beafb097c0b2355f197e8cb0707475d4da512043;hb=c7fe1f466e8bfcac0c9169c741710c76807a11ba;hp=8e4a6e3c1baef06395c9ffeeb72390bd7cdd3dd9;hpb=2cde97ae94d67405cec056839c766388ba0bc1f4;p=openldap diff --git a/libraries/libmdb/midl.h b/libraries/libmdb/midl.h index 8e4a6e3c1b..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,19 +26,19 @@ #ifndef _MDB_MIDL_H_ #define _MDB_MIDL_H_ +#include + /** @defgroup internal MDB Internals * @{ */ - /** ULONG should be the largest integer type supported on a machine. - * It should be equal to the size of a pointer. - */ -#define ULONG unsigned long + /** @defgroup idls ID List Management * @{ */ /** A generic ID number. These were entryIDs in back-bdb. + * Preferably it should have the same size as a pointer. */ -typedef ULONG ID; +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 @@ -101,19 +101,46 @@ 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] ids The IDL to append to. + * @param[in,out] idp Address of the IDL to append to. * @param[in] id The ID to append. - * @return 0 on success, -2 if the IDL is too large. + * @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( IDL ids, ID id ); +int mdb_midl_append_list( IDL *idp, IDL app ); /** Sort an IDL. * @param[in,out] ids The IDL to sort. @@ -145,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 );