libgit2/src/vector.h
Vicent Marti 86d7e1ca6f 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>
2011-03-03 20:23:52 +02:00

37 lines
1010 B
C

#ifndef INCLUDE_vector_h__
#define INCLUDE_vector_h__
#include "git2/common.h"
typedef int (*git_vector_cmp)(const void *, const void *);
typedef struct git_vector {
unsigned int _alloc_size;
git_vector_cmp _cmp;
void **contents;
unsigned int length;
int sorted;
} git_vector;
int git_vector_init(git_vector *v, unsigned int initial_size, git_vector_cmp cmp);
void git_vector_free(git_vector *v);
void git_vector_clear(git_vector *v);
int git_vector_search(git_vector *v, const void *entry);
int git_vector_search2(git_vector *v, git_vector_cmp cmp, const void *key);
int git_vector_bsearch(git_vector *v, const void *entry);
int git_vector_bsearch2(git_vector *v, git_vector_cmp cmp, const void *key);
void git_vector_sort(git_vector *v);
GIT_INLINE(void *) git_vector_get(git_vector *v, unsigned int position)
{
return (position < v->length) ? v->contents[position] : NULL;
}
int git_vector_insert(git_vector *v, void *element);
int git_vector_remove(git_vector *v, unsigned int idx);
#endif