diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2013-03-02 19:31:03 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2013-05-11 11:20:37 +0200 |
commit | 4def7035cac133607256fd91352ce54ac4548a7c (patch) | |
tree | 6956733c0ef644f9f2a6bea1e603e3fcb72fd954 /include/git2/sys/refdb_backend.h | |
parent | b641c00eebb3c60e8719c0dfc55dde91ca30a5d2 (diff) | |
download | libgit2-4def7035cac133607256fd91352ce54ac4548a7c.tar.gz |
refs: introduce an iterator
This allows us to get a list of reference names in a loop instead of callbacks.
Diffstat (limited to 'include/git2/sys/refdb_backend.h')
-rw-r--r-- | include/git2/sys/refdb_backend.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/include/git2/sys/refdb_backend.h b/include/git2/sys/refdb_backend.h index d5f599fec..4c882b5cd 100644 --- a/include/git2/sys/refdb_backend.h +++ b/include/git2/sys/refdb_backend.h @@ -20,6 +20,22 @@ */ GIT_BEGIN_DECL + +/** + * Every backend's iterator must have a pointer to itself as the first + * element, so the API can talk to it. You'd define your iterator as + * + * struct my_iterator { + * git_reference_iterator parent; + * ... + * } + * + * and assing `iter->parent.backend` to your `git_refdb_backend`. + */ +struct git_reference_iterator { + git_refdb_backend *backend; +}; + /** An instance for a custom backend */ struct git_refdb_backend { unsigned int version; @@ -66,6 +82,25 @@ struct git_refdb_backend { void *payload); /** + * Allocate an iterator object for the backend + */ + int (*iterator)( + git_reference_iterator **iter, + struct git_refdb_backend *backend); + + /** + * Return the current value and advance the iterator. + */ + int (*next)( + const char **name, + git_reference_iterator *iter); + + /** + * Free the iterator + */ + void (*iterator_free)( + git_reference_iterator *iter); + /* * Writes the given reference to the refdb. A refdb implementation * must provide this function. */ |