/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * 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
* @{
*/
/** A generic ID number. These were entryIDs in back-bdb.
- * It should be the largest integer type supported on a machine.
- * It should be equal to the size of a pointer.
+ * Preferably it should have the same size as a pointer.
*/
typedef size_t ID;
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.
/** 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 );