This covers more code than simply doing an ordered delete/insert.
+static bool add_one(trbt_tree_t *rb, bool exist, unsigned int i)
+{
+ int *p = trbt_insert32(rb, i, talloc_memdup(rb, &i, sizeof(i)));
+ if (p) {
+ if (!exist)
+ return false;
+ if (*p != i)
+ return false;
+ } else
+ if (exist)
+ return false;
+ return true;
+}
+
static bool insert_all(trbt_tree_t *rb, bool exist)
{
unsigned int i;
for (i = 0; i < NUM_ELEMS; i++) {
static bool insert_all(trbt_tree_t *rb, bool exist)
{
unsigned int i;
for (i = 0; i < NUM_ELEMS; i++) {
- int *p = trbt_insert32(rb, i, talloc_memdup(rb, &i, sizeof(i)));
- if (p) {
- if (!exist)
- return false;
- if (*p != i)
- return false;
- } else
- if (exist)
- return false;
+ if (!add_one(rb, exist, i))
+ return false;
- for (i = 0; i < NUM_ELEMS; i++) {
+ /* Don't delete them in the obvious order. */
+ for (i = 0; i < NUM_ELEMS / 2; i++) {
+ trbt_delete32(rb, i);
+ }
+
+ for (i = NUM_ELEMS-1; i >= NUM_ELEMS / 2; i--) {
trbt_delete32(rb, i);
}
}
trbt_delete32(rb, i);
}
}