2 #include "sha1-array.h"
3 #include "sha1-lookup.h"
5 void sha1_array_append(struct sha1_array
*array
, const unsigned char *sha1
)
7 ALLOC_GROW(array
->sha1
, array
->nr
+ 1, array
->alloc
);
8 hashcpy(array
->sha1
[array
->nr
++], sha1
);
12 static int void_hashcmp(const void *a
, const void *b
)
17 static void sha1_array_sort(struct sha1_array
*array
)
19 qsort(array
->sha1
, array
->nr
, sizeof(*array
->sha1
), void_hashcmp
);
23 static const unsigned char *sha1_access(size_t index
, void *table
)
25 unsigned char (*array
)[20] = table
;
29 int sha1_array_lookup(struct sha1_array
*array
, const unsigned char *sha1
)
32 sha1_array_sort(array
);
33 return sha1_pos(sha1
, array
->sha1
, array
->nr
, sha1_access
);
36 void sha1_array_clear(struct sha1_array
*array
)
45 int sha1_array_for_each_unique(struct sha1_array
*array
,
52 sha1_array_sort(array
);
54 for (i
= 0; i
< array
->nr
; i
++) {
56 if (i
> 0 && !hashcmp(array
->sha1
[i
], array
->sha1
[i
-1]))
58 ret
= fn(array
->sha1
[i
], data
);