summaryrefslogtreecommitdiff
path: root/src/tree.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-02-28 12:46:13 +0200
committerVicent Marti <tanoku@gmail.com>2011-03-03 20:23:52 +0200
commit86d7e1ca6f54161a9e4d1ebe7a2f8e4802dc9639 (patch)
tree88d9d0fc4a7dbeec37f863b47200c0c55e8ffcf4 /src/tree.c
parent5de079b86dcf8744f71fa3d0bb496a2cf9b20c0d (diff)
downloadlibgit2-86d7e1ca6f54161a9e4d1ebe7a2f8e4802dc9639.tar.gz
Fix searching in git_vector
We now store only one sorting callback that does entry comparison. This is used when sorting the entries using a quicksort, and when looking for a specific entry with the new search methods. The following search methods now exist: git_vector_search(vector, entry) git_vector_search2(vector, custom_search_callback, key) git_vector_bsearch(vector, entry) git_vector_bsearch2(vector, custom_search_callback, key) The sorting state of the vector is now stored internally. Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/tree.c b/src/tree.c
index 656798c63..5ea062286 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -83,10 +83,7 @@ git_tree *git_tree__new(void)
memset(tree, 0x0, sizeof(struct git_tree));
- if (git_vector_init(&tree->entries,
- DEFAULT_TREE_SIZE,
- entry_sort_cmp,
- entry_search_cmp) < GIT_SUCCESS) {
+ if (git_vector_init(&tree->entries, DEFAULT_TREE_SIZE, entry_sort_cmp) < GIT_SUCCESS) {
free(tree);
return NULL;
}
@@ -173,7 +170,7 @@ git_tree_entry *git_tree_entry_byname(git_tree *tree, const char *filename)
if (!tree->sorted)
sort_entries(tree);
- idx = git_vector_search(&tree->entries, filename);
+ idx = git_vector_bsearch2(&tree->entries, entry_search_cmp, filename);
if (idx == GIT_ENOTFOUND)
return NULL;
@@ -253,7 +250,7 @@ int git_tree_remove_entry_byname(git_tree *tree, const char *filename)
if (!tree->sorted)
sort_entries(tree);
- idx = git_vector_search(&tree->entries, filename);
+ idx = git_vector_bsearch2(&tree->entries, entry_search_cmp, filename);
if (idx == GIT_ENOTFOUND)
return GIT_ENOTFOUND;