1#include "cache.h"
2#include "sha1-array.h"
3#include "sha1-lookup.h"
45
void sha1_array_append(struct sha1_array *array, const unsigned char *sha1)
6{
7ALLOC_GROW(array->sha1, array->nr + 1, array->alloc);
8hashcpy(array->sha1[array->nr++], sha1);
9array->sorted = 0;
10}
1112
static int void_hashcmp(const void *a, const void *b)
13{
14return hashcmp(a, b);
15}
1617
void sha1_array_sort(struct sha1_array *array)
18{
19qsort(array->sha1, array->nr, sizeof(*array->sha1), void_hashcmp);
20array->sorted = 1;
21}
2223
static const unsigned char *sha1_access(size_t index, void *table)
24{
25unsigned char (*array)[20] = table;
26return array[index];
27}
2829
int sha1_array_lookup(struct sha1_array *array, const unsigned char *sha1)
30{
31if (!array->sorted)
32sha1_array_sort(array);
33return sha1_pos(sha1, array->sha1, array->nr, sha1_access);
34}
3536
void sha1_array_clear(struct sha1_array *array)
37{
38free(array->sha1);
39array->sha1 = NULL;
40array->nr = 0;
41array->alloc = 0;
42array->sorted = 0;
43}