From: Jeff Hostetler <git@jeffhostetler.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, peff@peff.net, jonathantanmy@google.com,
Jeff Hostetler <jeffhost@microsoft.com>
Subject: [PATCH v4 3/6] oidset: add iterator methods to oidset
Date: Thu, 16 Nov 2017 18:07:40 +0000 [thread overview]
Message-ID: <20171116180743.61353-4-git@jeffhostetler.com> (raw)
In-Reply-To: <20171116180743.61353-1-git@jeffhostetler.com>
From: Jeff Hostetler <jeffhost@microsoft.com>
Add the usual iterator methods to oidset.
Add oidset_remove().
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
---
oidset.c | 10 ++++++++++
oidset.h | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+)
diff --git a/oidset.c b/oidset.c
index f1f874a..454c54f 100644
--- a/oidset.c
+++ b/oidset.c
@@ -24,6 +24,16 @@ int oidset_insert(struct oidset *set, const struct object_id *oid)
return 0;
}
+int oidset_remove(struct oidset *set, const struct object_id *oid)
+{
+ struct oidmap_entry *entry;
+
+ entry = oidmap_remove(&set->map, oid);
+ free(entry);
+
+ return (entry != NULL);
+}
+
void oidset_clear(struct oidset *set)
{
oidmap_free(&set->map, 1);
diff --git a/oidset.h b/oidset.h
index f4c9e0f..783abce 100644
--- a/oidset.h
+++ b/oidset.h
@@ -24,6 +24,12 @@ struct oidset {
#define OIDSET_INIT { OIDMAP_INIT }
+
+static inline void oidset_init(struct oidset *set, size_t initial_size)
+{
+ return oidmap_init(&set->map, initial_size);
+}
+
/**
* Returns true iff `set` contains `oid`.
*/
@@ -39,9 +45,39 @@ int oidset_contains(const struct oidset *set, const struct object_id *oid);
int oidset_insert(struct oidset *set, const struct object_id *oid);
/**
+ * Remove the oid from the set.
+ *
+ * Returns 1 if the oid was present in the set, 0 otherwise.
+ */
+int oidset_remove(struct oidset *set, const struct object_id *oid);
+
+/**
* Remove all entries from the oidset, freeing any resources associated with
* it.
*/
void oidset_clear(struct oidset *set);
+struct oidset_iter {
+ struct oidmap_iter m_iter;
+};
+
+static inline void oidset_iter_init(struct oidset *set,
+ struct oidset_iter *iter)
+{
+ oidmap_iter_init(&set->map, &iter->m_iter);
+}
+
+static inline struct object_id *oidset_iter_next(struct oidset_iter *iter)
+{
+ struct oidmap_entry *e = oidmap_iter_next(&iter->m_iter);
+ return e ? &e->oid : NULL;
+}
+
+static inline struct object_id *oidset_iter_first(struct oidset *set,
+ struct oidset_iter *iter)
+{
+ oidset_iter_init(set, iter);
+ return oidset_iter_next(iter);
+}
+
#endif /* OIDSET_H */
--
2.9.3
next prev parent reply other threads:[~2017-11-16 18:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-16 18:07 [PATCH v4 0/6] Partial clone part 1: object filtering Jeff Hostetler
2017-11-16 18:07 ` [PATCH v4 1/6] dir: allow exclusions from blob in addition to file Jeff Hostetler
2017-11-16 18:07 ` [PATCH v4 2/6] oidmap: add oidmap iterator methods Jeff Hostetler
2017-11-16 18:07 ` Jeff Hostetler [this message]
2017-11-16 18:07 ` [PATCH v4 4/6] list-objects: filter objects in traverse_commit_list Jeff Hostetler
2017-11-16 20:21 ` Jonathan Tan
2017-11-16 21:49 ` Jeff Hostetler
2017-11-16 21:57 ` Jeff King
2017-11-17 2:14 ` Junio C Hamano
2017-11-17 15:42 ` Jeff Hostetler
2017-11-17 22:19 ` Jeff King
2017-11-16 18:07 ` [PATCH v4 5/6] rev-list: add list-objects filtering support Jeff Hostetler
2017-11-16 20:43 ` Jonathan Tan
2017-11-17 2:14 ` Junio C Hamano
2017-11-17 17:36 ` Jeff Hostetler
2017-11-16 18:07 ` [PATCH v4 6/6] pack-objects: add list-objects filtering Jeff Hostetler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171116180743.61353-4-git@jeffhostetler.com \
--to=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jeffhost@microsoft.com \
--cc=jonathantanmy@google.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.