guint nnodes;
gint ref_count;
guint version;
- guint lowest_version;
};
#define root(i) roots[i].root
tree->nnodes = 0;
tree->ref_count = 1;
tree->version = 0;
- tree->lowest_version = 0;
tree->roots[0].root = NULL;
tree->roots[0].version = 0;
g_tree_node_remove (tree, tree->root(NOW));
tree->roots[0].root = NULL;
- tree->roots[0].version = tree->version = tree->lowest_version = 0;
+ tree->roots[0].version = tree->version = 0;
tree->nnodes = 0;
}
g_tree_delete_versions (GTree *tree,
guint version)
{
- GTreeRootVersion *rv;
guint rm, i, l, keep, next;
g_return_if_fail (tree != NULL);
g_return_if_fail (version < tree->version);
- if (version < tree->lowest_version)
+ if (version < tree->roots[tree->nroots > 1 ? 1 : 0].version)
return;
- tree->lowest_version = version+1;
- rv = g_tree_root_find_version (tree, tree->lowest_version);
rm = 0;
-
- /* mark everything we want to keep with lower versions as belonging to
- the tree's lowest version */
- //g_tree_mark_version (rv->root, tree->lowest_version);
-
- /* delete older stuff */
i = tree->nroots > 1 ? 1 : 0;
next = next_version (i, tree->nroots);
- while (i < tree->nroots &&
- tree->roots[i].version < tree->lowest_version)
+ while (i < tree->nroots && tree->roots[i].version < version + 1)
{
guint nextv, v;
if (next == tree->nroots ||
- tree->roots[next].version > tree->lowest_version)
- nextv = tree->lowest_version;
+ tree->roots[next].version > version + 1)
+ nextv = version + 1;
else if (next < tree->nroots &&
tree->roots[next].root == tree->roots[i].root)
nextv = tree->roots[next].version;