From e8829191ec507712d93a04595fb2f3325f364433 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 12 Nov 2009 16:11:27 -0500 Subject: [PATCH] Turn the next/previous_version() functions into macros, and shorten their names to next_v() and prev_v(). Add a first_v() that gives the index of the first version in the array. --- glib/gtree.c | 66 ++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/glib/gtree.c b/glib/gtree.c index 4cfe121c..46e97ef8 100644 --- a/glib/gtree.c +++ b/glib/gtree.c @@ -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 -- 2.34.1