mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
oidset: introduce oidset_equal()
Introduce a new function that allows the caller to verify whether two oidsets contain the exact same object IDs. Note that this change requires us to change `oidset_iter_init()` to accept a `const struct oidset`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
b67b2d9fb7
commit
5d795b34dc
16
oidset.c
16
oidset.c
@@ -16,6 +16,22 @@ int oidset_contains(const struct oidset *set, const struct object_id *oid)
|
|||||||
return pos != kh_end(&set->set);
|
return pos != kh_end(&set->set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool oidset_equal(const struct oidset *a, const struct oidset *b)
|
||||||
|
{
|
||||||
|
struct oidset_iter iter;
|
||||||
|
struct object_id *a_oid;
|
||||||
|
|
||||||
|
if (oidset_size(a) != oidset_size(b))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
oidset_iter_init(a, &iter);
|
||||||
|
while ((a_oid = oidset_iter_next(&iter)))
|
||||||
|
if (!oidset_contains(b, a_oid))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int oidset_insert(struct oidset *set, const struct object_id *oid)
|
int oidset_insert(struct oidset *set, const struct object_id *oid)
|
||||||
{
|
{
|
||||||
int added;
|
int added;
|
||||||
|
|||||||
9
oidset.h
9
oidset.h
@@ -38,6 +38,11 @@ void oidset_init(struct oidset *set, size_t initial_size);
|
|||||||
*/
|
*/
|
||||||
int oidset_contains(const struct oidset *set, const struct object_id *oid);
|
int oidset_contains(const struct oidset *set, const struct object_id *oid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true iff `a` and `b` contain the exact same OIDs.
|
||||||
|
*/
|
||||||
|
bool oidset_equal(const struct oidset *a, const struct oidset *b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the oid into the set; a copy is made, so "oid" does not need
|
* Insert the oid into the set; a copy is made, so "oid" does not need
|
||||||
* to persist after this function is called.
|
* to persist after this function is called.
|
||||||
@@ -94,11 +99,11 @@ void oidset_parse_file_carefully(struct oidset *set, const char *path,
|
|||||||
oidset_parse_tweak_fn fn, void *cbdata);
|
oidset_parse_tweak_fn fn, void *cbdata);
|
||||||
|
|
||||||
struct oidset_iter {
|
struct oidset_iter {
|
||||||
kh_oid_set_t *set;
|
const kh_oid_set_t *set;
|
||||||
khiter_t iter;
|
khiter_t iter;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void oidset_iter_init(struct oidset *set,
|
static inline void oidset_iter_init(const struct oidset *set,
|
||||||
struct oidset_iter *iter)
|
struct oidset_iter *iter)
|
||||||
{
|
{
|
||||||
iter->set = &set->set;
|
iter->set = &set->set;
|
||||||
|
|||||||
Reference in New Issue
Block a user