]> git.sur5r.net Git - openldap/blobdiff - libraries/liblmdb/midl.c
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
[openldap] / libraries / liblmdb / midl.c
index b39d463c56db78fa154e20d3be53fd98996d122e..88a3aff10cb9f6e0cccee9b5238d0b923b720576 100644 (file)
@@ -22,7 +22,7 @@
 #include <sys/types.h>
 #include "midl.h"
 
-/** @defgroup internal MDB Internals
+/** @defgroup internal LMDB Internals
  *     @{
  */
 /** @defgroup idls     ID List Management
@@ -199,6 +199,20 @@ int mdb_midl_append_range( MDB_IDL *idp, MDB_ID id, unsigned n )
        return 0;
 }
 
+void mdb_midl_xmerge( MDB_IDL idl, MDB_IDL merge )
+{
+       MDB_ID old_id, merge_id, i = merge[0], j = idl[0], k = i+j, total = k;
+       idl[0] = (MDB_ID)-1;            /* delimiter for idl scan below */
+       old_id = idl[j];
+       while (i) {
+               merge_id = merge[i--];
+               for (; old_id < merge_id; old_id = idl[--j])
+                       idl[k--] = old_id;
+               idl[k--] = merge_id;
+       }
+       idl[0] = total;
+}
+
 /* Quicksort + Insertion sort for small arrays */
 
 #define SMALL  8