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,
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;
*/
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;
}
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;
}
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];
}
/* 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);
}
/* 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);
}
* 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.
*
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