Turn the next/previous_version() functions into macros, and shorten their names to...
authorDana Jansens <danakj@orodu.net>
Thu, 12 Nov 2009 21:11:27 +0000 (16:11 -0500)
committerDana Jansens <danakj@orodu.net>
Thu, 12 Nov 2009 22:21:09 +0000 (17:21 -0500)
glib/gtree.c

index 4cfe121c427340ce675a77646f4ce8750b12e28d..46e97ef843248865f29cb014050f1c4a2a6dc02e 100644 (file)
@@ -551,27 +551,23 @@ g_tree_next_version (GTree *tree)
   return ++tree->version;
 }
 
-static inline guint
-next_version(guint i, guint n)
-{
-  if (i == 0)
-    return n; /* it was the last version so return something larger */
-  else if (i == n-1)
-    return 0; /* it was the last in the array */
-  else
-    return i+1; /* it was someone else in the array */
-}
-
-static inline guint
-previous_version(guint i, guint n)
-{
-  if (i == 0)
-    return n-1; /* it was the last version */
-  else if (i == 1)
-    return n; /* it was the first so return something larger */
-  else
-    return i-1; /* it was someone else in the array */
-}
+/* Given the length of the array of versions, return the index of the
+   first (oldest) version, or @n if there is none. */
+#define first_v(n) ((n) > 1 ? 1 : 0)
+
+/* Given a current index, and the length of the array of versions, return
+   the index of the next (newer) version, or @n if there is none. */
+#define next_v(i, n) \
+  ((i) == 0 ? (n) : /* it was the last version, return something invalid */ \
+   ((i) == (n)-1 ? 0 : /* it was the second last, return the last */        \
+    (i)+1)) /* it was somewhere else in the array, return the next */
+
+/* Given a current index, and the length of the array of versions, return
+   the index of the previous (older) version, or @n if there is none. */
+#define prev_v(i, n) \
+  ((i) == 0 ? (n)-1 : /* it was the last version, return the second last */ \
+   ((i) == 1 ? (n) : /* it was the first, return something invalid */       \
+    (i)-1)); /* it was somewhere else in the array, return the previous */
 
 static guint
 g_tree_node_delete_versions (GTree     *tree,
@@ -588,9 +584,9 @@ g_tree_node_delete_versions (GTree     *tree,
 
   ret = 0;
   rm = 0;
-  for (i = nv > 1 ? 1 : 0; i < nv && node->v[i].version <= version; i = next)
+  for (i = first_v (nv); i < nv && node->v[i].version <= version; i = next)
     {
-      next = next_version (i, nv);
+      next = next_v (i, nv);
 
       if (next < nv)
         nextv = node->v[next].version - 1;
@@ -655,7 +651,7 @@ g_tree_node_delete_versions (GTree     *tree,
   */
   if (!ret && node && pnext)
     {
-      g_assert (node->v[node->nv > 1 ? 1 : 0].version == pnext);
+      g_assert (node->v[first_v (node->nv)].version == pnext);
       ret = pnext;
     }
 
@@ -688,12 +684,12 @@ g_tree_delete_versions (GTree *tree,
   g_return_if_fail (tree != NULL);
   g_return_if_fail (version < tree->version);
 
-  if (version < tree->r[tree->nr > 1 ? 1 : 0].version)
+  if (version < tree->r[first_v (tree->nr)].version)
     return;
 
   rm = 0;
-  i = tree->nr > 1 ? 1 : 0;
-  next = next_version (i, tree->nr);
+  i = first_v (tree->nr);
+  next = next_v (i, tree->nr);
   while (i < tree->nr && tree->r[i].version < version + 1)
     {
       guint nextv, v;
@@ -722,16 +718,16 @@ g_tree_delete_versions (GTree *tree,
         }
 
       i = next;
-      next = next_version (i, tree->nr);
+      next = next_v (i, tree->nr);
     }
 
   if (rm)
     {
       guint j;
-      for (j = tree->nr - rm > 1 ? 1 : 0;
+      for (j = first_v (tree->nr - rm);
            j < tree->nr - rm;
-           j = next_version (j, tree->nr - rm),
-             keep = next_version (keep, tree->nr))
+           j = next_v (j, tree->nr - rm),
+             keep = next_v (keep, tree->nr))
         {
           tree->r[j] = tree->r[keep];
         }
@@ -1244,7 +1240,7 @@ g_tree_remove_internal (GTree         *tree,
           /* rotate the right child up */
           if (!parent)
             {
-              g_tree_root_next_version(tree);
+              g_tree_root_next_version (tree);
               parent = tree->r[0].root =
                 g_tree_node_rotate_left (tree, node);
             }
@@ -1265,7 +1261,7 @@ g_tree_remove_internal (GTree         *tree,
           /* rotate the left child up */
           if (!parent)
             {
-              g_tree_root_next_version(tree);
+              g_tree_root_next_version (tree);
               parent = tree->r[0].root =
                 g_tree_node_rotate_right (tree, node);
             }
@@ -1355,7 +1351,7 @@ g_tree_lookup (GTree         *tree,
  *   one of %G_TREE_SEARCH_EXACT, %G_TREE_SEARCH_SUCCESSOR, and
  *   %G_TREE_SEARCH_PREDECESSOR.
  * @version: the version of the tree within which to search.  If
- *   g_tree_next_version has not been used, then this is 0.
+ *   g_tree_next_version() has not been used, then this is 0.
  *
  * Gets a value corresponding to the given key.
  *
@@ -1825,7 +1821,7 @@ g_tree_node_rotate_right (GTree     *tree,
 
   if (left->right(NOW))
     {
-      node->v[0].left = g_tree_node_next_version(tree, left->right(NOW));
+      node->v[0].left = g_tree_node_next_version (tree, left->right(NOW));
       node->v[0].left->v[0].parent = node;
     }
   else