Message ID | 20180925194755.105578-2-sbeller@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fetch: make sure submodule oids are fetched | expand |
Stefan Beller <sbeller@google.com> writes: > Helped-by: Junio C Hamano <gitster@pobox.com> > Signed-off-by: Stefan Beller <sbeller@google.com> > --- > Documentation/technical/api-oid-array.txt | 5 +++++ > sha1-array.c | 17 +++++++++++++++++ > sha1-array.h | 3 +++ > 3 files changed, 25 insertions(+) Perfect ;-) > > diff --git a/Documentation/technical/api-oid-array.txt b/Documentation/technical/api-oid-array.txt > index 9febfb1d528..c97428c2c34 100644 > --- a/Documentation/technical/api-oid-array.txt > +++ b/Documentation/technical/api-oid-array.txt > @@ -48,6 +48,11 @@ Functions > is not sorted, this function has the side effect of sorting > 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 > -------- > > diff --git a/sha1-array.c b/sha1-array.c > index b94e0ec0f5e..d922e94e3fc 100644 > --- a/sha1-array.c > +++ b/sha1-array.c > @@ -77,3 +77,20 @@ int oid_array_for_each_unique(struct oid_array *array, > } > 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; > +} > diff --git a/sha1-array.h b/sha1-array.h > index 232bf950172..55d016c4bf7 100644 > --- a/sha1-array.h > +++ b/sha1-array.h > @@ -22,5 +22,8 @@ int oid_array_for_each(struct oid_array *array, > int oid_array_for_each_unique(struct oid_array *array, > for_each_oid_fn fn, > void *data); > +void oid_array_filter(struct oid_array *array, > + for_each_oid_fn want, > + void *cbdata); > > #endif /* SHA1_ARRAY_H */
diff --git a/Documentation/technical/api-oid-array.txt b/Documentation/technical/api-oid-array.txt index 9febfb1d528..c97428c2c34 100644 --- a/Documentation/technical/api-oid-array.txt +++ b/Documentation/technical/api-oid-array.txt @@ -48,6 +48,11 @@ Functions is not sorted, this function has the side effect of sorting 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 -------- diff --git a/sha1-array.c b/sha1-array.c index b94e0ec0f5e..d922e94e3fc 100644 --- a/sha1-array.c +++ b/sha1-array.c @@ -77,3 +77,20 @@ int oid_array_for_each_unique(struct oid_array *array, } 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; +} diff --git a/sha1-array.h b/sha1-array.h index 232bf950172..55d016c4bf7 100644 --- a/sha1-array.h +++ b/sha1-array.h @@ -22,5 +22,8 @@ int oid_array_for_each(struct oid_array *array, int oid_array_for_each_unique(struct oid_array *array, for_each_oid_fn fn, void *data); +void oid_array_filter(struct oid_array *array, + for_each_oid_fn want, + void *cbdata); #endif /* SHA1_ARRAY_H */
Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Stefan Beller <sbeller@google.com> --- Documentation/technical/api-oid-array.txt | 5 +++++ sha1-array.c | 17 +++++++++++++++++ sha1-array.h | 3 +++ 3 files changed, 25 insertions(+)