Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

60 lines (50 sloc) 1.262 kb
#include "cache.h"
#include "sha1-array.h"
#include "sha1-lookup.h"
void sha1_array_append(struct sha1_array *array, const unsigned char *sha1)
{
ALLOC_GROW(array->sha1, array->nr + 1, array->alloc);
hashcpy(array->sha1[array->nr++], sha1);
array->sorted = 0;
}
static int void_hashcmp(const void *a, const void *b)
{
return hashcmp(a, b);
}
static void sha1_array_sort(struct sha1_array *array)
{
qsort(array->sha1, array->nr, sizeof(*array->sha1), void_hashcmp);
array->sorted = 1;
}
static const unsigned char *sha1_access(size_t index, void *table)
{
unsigned char (*array)[20] = table;
return array[index];
}
int sha1_array_lookup(struct sha1_array *array, const unsigned char *sha1)
{
if (!array->sorted)
sha1_array_sort(array);
return sha1_pos(sha1, array->sha1, array->nr, sha1_access);
}
void sha1_array_clear(struct sha1_array *array)
{
free(array->sha1);
array->sha1 = NULL;
array->nr = 0;
array->alloc = 0;
array->sorted = 0;
}
void sha1_array_for_each_unique(struct sha1_array *array,
for_each_sha1_fn fn,
void *data)
{
int i;
if (!array->sorted)
sha1_array_sort(array);
for (i = 0; i < array->nr; i++) {
if (i > 0 && !hashcmp(array->sha1[i], array->sha1[i-1]))
continue;
fn(array->sha1[i], data);
}
}
Jump to Line
Something went wrong with that request. Please try again.