summaryrefslogtreecommitdiff
path: root/src/hashtable.h
diff options
context:
space:
mode:
authorRussell Belfer <arrbee@arrbee.com>2012-02-29 12:04:59 -0800
committerRussell Belfer <arrbee@arrbee.com>2012-03-02 15:51:55 -0800
commit854eccbb2d86c2910f9d98dc52f9ebd0e37c262a (patch)
treeb22048a02480598477cde9c41fc16d3967226d6b /src/hashtable.h
parent74fa4bfae37e9d7c9e35550c881b114d7a83c4fa (diff)
downloadlibgit2-854eccbb2d86c2910f9d98dc52f9ebd0e37c262a.tar.gz
Clean up GIT_UNUSED macros on all platforms
It turns out that commit 31e9cfc4cbcaf1b38cdd3dbe3282a8f57e5366a5 did not fix the GIT_USUSED behavior on all platforms. This commit walks through and really cleans things up more thoroughly, getting rid of the unnecessary stuff. To remove the use of some GIT_UNUSED, I ended up adding a couple of new iterators for hashtables that allow you to iterator just over keys or just over values. In making this change, I found a bug in the clar tests (where we were doing *count++ but meant to do (*count)++ to increment the value). I fixed that but then found the test failing because it was not really using an empty repo. So, I took some of the code that I wrote for iterator testing and moved it to clar_helpers.c, then made use of that to make it easier to open fixtures on a per test basis even within a single test file.
Diffstat (limited to 'src/hashtable.h')
-rw-r--r--src/hashtable.h28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/hashtable.h b/src/hashtable.h
index f6fbb8585..e09965965 100644
--- a/src/hashtable.h
+++ b/src/hashtable.h
@@ -65,20 +65,20 @@ GIT_INLINE(int) git_hashtable_insert(git_hashtable *h, const void *key, void *va
#define git_hashtable_node_at(nodes, pos) ((git_hashtable_node *)(&nodes[pos]))
-#define GIT_HASHTABLE_FOREACH(self, pkey, pvalue, code) {\
- git_hashtable *_self = (self);\
- git_hashtable_node *_nodes = _self->nodes;\
- unsigned int _i, _size = _self->size;\
- for (_i = 0; _i < _size; _i ++) {\
- git_hashtable_node *_node = git_hashtable_node_at(_nodes, _i);\
- if (_node->key)\
- {\
- pkey = _node->key;\
- pvalue = _node->value;\
- code;\
- }\
- }\
-}
+#define GIT_HASHTABLE__FOREACH(self,block) { \
+ unsigned int _c; \
+ git_hashtable_node *_n = (self)->nodes; \
+ for (_c = (self)->size; _c > 0; _c--, _n++) { \
+ if (!_n->key) continue; block } }
+
+#define GIT_HASHTABLE_FOREACH(self, pkey, pvalue, code)\
+ GIT_HASHTABLE__FOREACH(self,{(pkey)=_n->key;(pvalue)=_n->value;code;})
+
+#define GIT_HASHTABLE_FOREACH_KEY(self, pkey, code)\
+ GIT_HASHTABLE__FOREACH(self,{(pkey)=_n->key;code;})
+
+#define GIT_HASHTABLE_FOREACH_VALUE(self, pvalue, code)\
+ GIT_HASHTABLE__FOREACH(self,{(pvalue)=_n->value;code;})
#define GIT_HASHTABLE_FOREACH_DELETE() {\
_node->key = NULL; _node->value = NULL; _self->key_count--;\