diff options
| author | Vicent Marti <tanoku@gmail.com> | 2011-02-28 12:46:13 +0200 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2011-03-03 20:23:52 +0200 |
| commit | 86d7e1ca6f54161a9e4d1ebe7a2f8e4802dc9639 (patch) | |
| tree | 88d9d0fc4a7dbeec37f863b47200c0c55e8ffcf4 /src/tree.c | |
| parent | 5de079b86dcf8744f71fa3d0bb496a2cf9b20c0d (diff) | |
| download | libgit2-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.c | 9 |
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; |
