util/rb_tree: Reverse the order of comparison functions
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 19 Sep 2019 20:17:24 +0000 (15:17 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Fri, 20 Sep 2019 17:37:25 +0000 (17:37 +0000)
The new order matches that of the comparison functions accepted by the C
standard library qsort() functions.  Being consistent with qsort will
hopefully help avoid developer confusion.

The only current user of the red-black tree is aub_mem.c which is pretty
easy to fix up.

Reviewed-by: Lionel Landwerlin <lionel.g.lndwerlin@intel.com>
src/intel/tools/aub_mem.c
src/util/rb_tree.h
src/util/rb_tree_test.c

index f436627..2f70afc 100644 (file)
@@ -87,9 +87,9 @@ static inline int
 cmp_uint64(uint64_t a, uint64_t b)
 {
    if (a < b)
-      return -1;
-   if (a > b)
       return 1;
+   if (a > b)
+      return -1;
    return 0;
 }
 
index 1e8aeb4..efdfb04 100644 (file)
@@ -127,7 +127,7 @@ rb_tree_insert(struct rb_tree *T, struct rb_node *node,
     bool left = false;
     while (x != NULL) {
         y = x;
-        left = cmp(node, x) < 0;
+        left = cmp(x, node) < 0;
         if (left)
             x = x->left;
         else
@@ -167,9 +167,9 @@ rb_tree_search(struct rb_tree *T, const void *key,
     while (x != NULL) {
         int c = cmp(x, key);
         if (c < 0)
-            x = x->right;
-        else if (c > 0)
             x = x->left;
+        else if (c > 0)
+            x = x->right;
         else
             return x;
     }
@@ -205,9 +205,9 @@ rb_tree_search_sloppy(struct rb_tree *T, const void *key,
         y = x;
         int c = cmp(x, key);
         if (c < 0)
-            x = x->right;
-        else if (c > 0)
             x = x->left;
+        else if (c > 0)
+            x = x->right;
         else
             return x;
     }
index c56a90e..a5952b3 100644 (file)
@@ -56,7 +56,7 @@ static int
 rb_test_node_cmp_void(const struct rb_node *n, const void *v)
 {
     struct rb_test_node *tn = rb_node_data(struct rb_test_node, n, node);
-    return tn->key - *(int *)v;
+    return *(int *)v - tn->key;
 }
 
 static int
@@ -65,7 +65,7 @@ rb_test_node_cmp(const struct rb_node *a, const struct rb_node *b)
     struct rb_test_node *ta = rb_node_data(struct rb_test_node, a, node);
     struct rb_test_node *tb = rb_node_data(struct rb_test_node, b, node);
 
-    return ta->key - tb->key;
+    return tb->key - ta->key;
 }
 
 static void