summaryrefslogtreecommitdiff
path: root/src/vector.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-02-28 16:51:17 +0200
committerVicent Marti <tanoku@gmail.com>2011-03-03 20:23:52 +0200
commit48c27f86bbe9678c7e01a90a2cec7a30327b0e90 (patch)
tree0156ea823de82477792ad4778378200eee28aee3 /src/vector.c
parent86d7e1ca6f54161a9e4d1ebe7a2f8e4802dc9639 (diff)
downloadlibgit2-48c27f86bbe9678c7e01a90a2cec7a30327b0e90.tar.gz
Implement reference counting for git_objects
All `git_object` instances looked up from the repository are reference counted. User is expected to use the new `git_object_close` when an object is no longer needed to force freeing it. Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/vector.c b/src/vector.c
index 126aec1bb..631364031 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -104,6 +104,10 @@ int git_vector_bsearch2(git_vector *v, git_vector_cmp key_lookup, const void *ke
assert(v && key && key_lookup);
+ /* need comparison function to sort the vector */
+ if (v->_cmp == NULL)
+ return GIT_ENOTFOUND;
+
git_vector_sort(v);
find = bsearch(key, v->contents, v->length, sizeof(void *), key_lookup);
@@ -127,12 +131,14 @@ int git_vector_search2(git_vector *v, git_vector_cmp key_lookup, const void *key
return GIT_ENOTFOUND;
}
-int git_vector_search(git_vector *v, const void *key)
+static int strict_comparison(const void *a, const void *b)
{
- if (v->_cmp == NULL)
- return GIT_ENOTFOUND;
+ return a - b;
+}
- return git_vector_search2(v, v->_cmp, key);
+int git_vector_search(git_vector *v, const void *entry)
+{
+ return git_vector_search2(v, v->_cmp ? v->_cmp : strict_comparison, entry);
}
int git_vector_bsearch(git_vector *v, const void *key)