Make the new git_tree_lookup_related() function take an argument "version", which...
authorDana Jansens <danakj@orodu.net>
Fri, 30 Oct 2009 22:54:08 +0000 (18:54 -0400)
committerDana Jansens <danakj@orodu.net>
Thu, 12 Nov 2009 21:54:05 +0000 (16:54 -0500)
glib/gtree.c
glib/gtree.h
tests/tree-test.c

index d466eb6ec86f483d9b8f8cf1b80f8677b756a469..258a1cc67bfad8636e1cf5e37bb46d9b12f7d548 100644 (file)
@@ -1055,7 +1055,7 @@ gpointer
 g_tree_lookup (GTree         *tree,
               gconstpointer  key)
 {
-  return g_tree_lookup_related (tree, key, G_TREE_SEARCH_EXACT);
+  return g_tree_lookup_related (tree, key, G_TREE_SEARCH_EXACT, tree->version);
 }
 
 /**
@@ -1065,6 +1065,8 @@ g_tree_lookup (GTree         *tree,
  * @search_type: the search behavior if the @key is not present in the #GTree,
  *   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.
  *
  * Gets a value corresponding to the given key.
  *
@@ -1088,13 +1090,15 @@ g_tree_lookup (GTree         *tree,
 gpointer
 g_tree_lookup_related  (GTree          *tree,
                         gconstpointer   key,
-                        GTreeSearchType search_type)
+                        GTreeSearchType search_type,
+                        guint           version)
 {
   GTreeNode *node;
 
   g_return_val_if_fail (tree != NULL, NULL);
+  g_return_val_if_fail (version <= tree->version, NULL);
 
-  node = g_tree_find_node (tree, key, search_type, tree->version);
+  node = g_tree_find_node (tree, key, search_type, version);
   
   return node ? node->data->value : NULL;
 }
index 921bc57704053c7f4ba963ef1566c6730bb00e69..9665d70bd8f2dcc587a889271f5ba1a2d7d56ee0 100644 (file)
@@ -81,7 +81,8 @@ gboolean g_tree_lookup_extended (GTree            *tree,
                                  gpointer         *value);
 gpointer g_tree_lookup_related  (GTree            *tree,
                                  gconstpointer     key,
-                                 GTreeSearchType   search_type);
+                                 GTreeSearchType   search_type,
+                                 guint             version);
 void     g_tree_foreach         (GTree            *tree,
                                  GTraverseFunc    func,
                                  gpointer         user_data);
index 709b5044841b06f44144932fbacc0aab0cd29b14..3c4457a59f1c87ca632a4f89ce3928888140bd0a 100644 (file)
@@ -162,16 +162,16 @@ main (int   argc,
     gchar *r;
 
     r = g_tree_lookup_related (tree, &chars[i],
-                               G_TREE_SEARCH_SUCCESSOR);
+                               G_TREE_SEARCH_SUCCESSOR, 0);
     g_assert((i == n-1 && r == NULL) || (r && *r == chars[i+1]));
 
     g_tree_insert (tree, &chars[i], &chars[i]);
 
     r = g_tree_lookup_related (tree, &chars[i],
-                               G_TREE_SEARCH_PREDECESSOR);
+                               G_TREE_SEARCH_PREDECESSOR, 0);
     g_assert(r && *r == chars[i]);
     r = g_tree_lookup_related (tree, &chars[i],
-                               G_TREE_SEARCH_SUCCESSOR);
+                               G_TREE_SEARCH_SUCCESSOR, 0);
     g_assert(r && *r == chars[i]);
   }
   g_assert(n == g_tree_nnodes(tree));
@@ -183,16 +183,16 @@ main (int   argc,
     gchar *r;
 
     r = g_tree_lookup_related (tree, &chars[i],
-                               G_TREE_SEARCH_PREDECESSOR);
+                               G_TREE_SEARCH_PREDECESSOR, 0);
     g_assert((i == 0 && r == NULL) || (r && *r == chars[i-1]));
 
     g_tree_insert (tree, &chars[i], &chars[i]);
 
     r = g_tree_lookup_related (tree, &chars[i],
-                               G_TREE_SEARCH_PREDECESSOR);
+                               G_TREE_SEARCH_PREDECESSOR, 0);
     g_assert(r && *r == chars[i]);
     r = g_tree_lookup_related (tree, &chars[i],
-                               G_TREE_SEARCH_SUCCESSOR);
+                               G_TREE_SEARCH_SUCCESSOR, 0);
     g_assert(r && *r == chars[i]);
   }
   g_assert(i == g_tree_nnodes(tree));