diff options
| author | Russell Belfer <arrbee@arrbee.com> | 2012-02-29 12:04:59 -0800 |
|---|---|---|
| committer | Russell Belfer <arrbee@arrbee.com> | 2012-03-02 15:51:55 -0800 |
| commit | 854eccbb2d86c2910f9d98dc52f9ebd0e37c262a (patch) | |
| tree | b22048a02480598477cde9c41fc16d3967226d6b /src/hashtable.h | |
| parent | 74fa4bfae37e9d7c9e35550c881b114d7a83c4fa (diff) | |
| download | libgit2-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.h | 28 |
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--;\ |
