summaryrefslogtreecommitdiff
path: root/src/revobject.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2010-05-23 17:12:28 +0200
committerAndreas Ericsson <ae@op5.se>2010-06-02 10:32:07 +0200
commit9bdb75947178f72df30314d66bc9bcc90df643d7 (patch)
tree0c51be2c8e9c40f947c9527b1c633c78c3d56e0b /src/revobject.c
parent655d381a1948783d7d26ff9ec5ef54ed6bbefb29 (diff)
downloadlibgit2-9bdb75947178f72df30314d66bc9bcc90df643d7.tar.gz
Properly reset all commit properties when doing a gitrp_reset().
Add git_revpool_table_free() method. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
Diffstat (limited to 'src/revobject.c')
-rw-r--r--src/revobject.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/revobject.c b/src/revobject.c
index c6736542f..45fb97389 100644
--- a/src/revobject.c
+++ b/src/revobject.c
@@ -177,5 +177,48 @@ void git_revpool_table_resize(git_revpool_table *table)
void git_revpool_table_free(git_revpool_table *table)
{
+ int index;
+ for (index = 0; index <= table->size_mask; ++index)
+ {
+ git_revpool_node *node, *next_node;
+
+ node = table->nodes[index];
+ while (node != NULL)
+ {
+ next_node = node->next;
+ free(node);
+ node = next_node;
+ }
+ }
+
+ free(table);
+}
+
+void git_revpool_tableit_init(git_revpool_table *table, git_revpool_tableit *it)
+{
+ memset(it, 0x0, sizeof(git_revpool_tableit));
+
+ it->nodes = table->nodes;
+ it->current_node = NULL;
+ it->current_pos = 0;
+ it->size = table->size_mask + 1;
+}
+
+git_revpool_object *git_revpool_tableit_next(git_revpool_tableit *it)
+{
+ git_revpool_node *next = NULL;
+
+ while (it->current_node == NULL)
+ {
+ if (it->current_pos >= it->size)
+ return NULL;
+
+ it->current_node = it->nodes[it->current_pos++];
+ }
+
+ next = it->current_node;
+ it->current_node = it->current_node->next;
+
+ return next->object;
}