sha1-array: provide oid_array_filter

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stefan Beller 2018-11-28 16:27:48 -08:00 committed by Junio C Hamano
parent 965798d1f2
commit 161b1cf3bd
3 changed files with 25 additions and 0 deletions

View File

@ -48,6 +48,11 @@ Functions
is not sorted, this function has the side effect of sorting is not sorted, this function has the side effect of sorting
it. it.
`oid_array_filter`::
Apply the callback function `want` to each entry in the array,
retaining only the entries for which the function returns true.
Preserve the order of the entries that are retained.
Examples Examples
-------- --------

View File

@ -77,3 +77,20 @@ int oid_array_for_each_unique(struct oid_array *array,
} }
return 0; return 0;
} }
void oid_array_filter(struct oid_array *array,
for_each_oid_fn want,
void *cb_data)
{
unsigned nr = array->nr, src, dst;
struct object_id *oids = array->oid;
for (src = dst = 0; src < nr; src++) {
if (want(&oids[src], cb_data)) {
if (src != dst)
oidcpy(&oids[dst], &oids[src]);
dst++;
}
}
array->nr = dst;
}

View File

@ -22,5 +22,8 @@ int oid_array_for_each(struct oid_array *array,
int oid_array_for_each_unique(struct oid_array *array, int oid_array_for_each_unique(struct oid_array *array,
for_each_oid_fn fn, for_each_oid_fn fn,
void *data); void *data);
void oid_array_filter(struct oid_array *array,
for_each_oid_fn want,
void *cbdata);
#endif /* SHA1_ARRAY_H */ #endif /* SHA1_ARRAY_H */