]>
git.ipfire.org Git - thirdparty/git.git/blob - sha1-array.c
2 #include "sha1-array.h"
3 #include "sha1-lookup.h"
5 void oid_array_append(struct oid_array
*array
, const struct object_id
*oid
)
7 ALLOC_GROW(array
->oid
, array
->nr
+ 1, array
->alloc
);
8 oidcpy(&array
->oid
[array
->nr
++], oid
);
12 static int void_hashcmp(const void *a
, const void *b
)
17 static void oid_array_sort(struct oid_array
*array
)
19 QSORT(array
->oid
, array
->nr
, void_hashcmp
);
23 static const unsigned char *sha1_access(size_t index
, void *table
)
25 struct object_id
*array
= table
;
26 return array
[index
].hash
;
29 int oid_array_lookup(struct oid_array
*array
, const struct object_id
*oid
)
32 oid_array_sort(array
);
33 return sha1_pos(oid
->hash
, array
->oid
, array
->nr
, sha1_access
);
36 void oid_array_clear(struct oid_array
*array
)
38 FREE_AND_NULL(array
->oid
);
45 int oid_array_for_each(struct oid_array
*array
,
51 /* No oid_array_sort() here! See the api-oid-array.txt docs! */
53 for (i
= 0; i
< array
->nr
; i
++) {
54 int ret
= fn(array
->oid
+ i
, data
);
61 int oid_array_for_each_unique(struct oid_array
*array
,
68 oid_array_sort(array
);
70 for (i
= 0; i
< array
->nr
; i
++) {
72 if (i
> 0 && oideq(array
->oid
+ i
, array
->oid
+ i
- 1))
74 ret
= fn(array
->oid
+ i
, data
);
81 void oid_array_filter(struct oid_array
*array
,
85 unsigned nr
= array
->nr
, src
, dst
;
86 struct object_id
*oids
= array
->oid
;
88 for (src
= dst
= 0; src
< nr
; src
++) {
89 if (want(&oids
[src
], cb_data
)) {
91 oidcpy(&oids
[dst
], &oids
[src
]);