Commit 6385fc5f by Nico von Geyso Committed by Carlos Martín Nieto

added new type and several functions to git_strmap

This step is needed to easily add iterators to git_config_backend
As well use these new git_strmap functions to implement foreach

* git_strmap_iter
* git_strmap_has_data(...)
* git_strmap_begin(...)
* git_strmap_end(...)
* git_strmap_next(...)
parent c7d4904c
...@@ -270,7 +270,8 @@ static int file_foreach( ...@@ -270,7 +270,8 @@ static int file_foreach(
} }
} }
git_strmap_foreach(b->values, key, var, git_strmap_iter iter = git_strmap_begin(b->values);
while (!(git_strmap_next(&key, (void**) &var, &iter, b->values) < 0)) {
for (; var != NULL; var = next_var) { for (; var != NULL; var = next_var) {
next_var = CVAR_LIST_NEXT(var); next_var = CVAR_LIST_NEXT(var);
...@@ -285,7 +286,7 @@ static int file_foreach( ...@@ -285,7 +286,7 @@ static int file_foreach(
goto cleanup; goto cleanup;
} }
} }
); }
cleanup: cleanup:
if (regexp != NULL) if (regexp != NULL)
......
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#include "strmap.h"
int git_strmap_next(
const char **key,
void **data,
git_strmap_iter* iter,
git_strmap *map)
{
if (!map)
return GIT_ERROR;
while (*iter != git_strmap_end(map)) {
if (!(git_strmap_has_data(map, *iter))) {
++(*iter);
continue;
}
*key = git_strmap_key(map, *iter);
*data = git_strmap_value_at(map, *iter);
++(*iter);
return GIT_OK;
}
return GIT_ITEROVER;
}
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
__KHASH_TYPE(str, const char *, void *); __KHASH_TYPE(str, const char *, void *);
typedef khash_t(str) git_strmap; typedef khash_t(str) git_strmap;
typedef khiter_t git_strmap_iter;
#define GIT__USE_STRMAP \ #define GIT__USE_STRMAP \
__KHASH_IMPL(str, static kh_inline, const char *, void *, 1, kh_str_hash_func, kh_str_hash_equal) __KHASH_IMPL(str, static kh_inline, const char *, void *, 1, kh_str_hash_func, kh_str_hash_equal)
...@@ -31,7 +32,9 @@ typedef khash_t(str) git_strmap; ...@@ -31,7 +32,9 @@ typedef khash_t(str) git_strmap;
#define git_strmap_valid_index(h, idx) (idx != kh_end(h)) #define git_strmap_valid_index(h, idx) (idx != kh_end(h))
#define git_strmap_exists(h, k) (kh_get(str, h, k) != kh_end(h)) #define git_strmap_exists(h, k) (kh_get(str, h, k) != kh_end(h))
#define git_strmap_has_data(h, idx) kh_exist(h, idx)
#define git_strmap_key(h, idx) kh_key(h, idx)
#define git_strmap_value_at(h, idx) kh_val(h, idx) #define git_strmap_value_at(h, idx) kh_val(h, idx)
#define git_strmap_set_value_at(h, idx, v) kh_val(h, idx) = v #define git_strmap_set_value_at(h, idx, v) kh_val(h, idx) = v
#define git_strmap_delete_at(h, idx) kh_del(str, h, idx) #define git_strmap_delete_at(h, idx) kh_del(str, h, idx)
...@@ -61,4 +64,13 @@ typedef khash_t(str) git_strmap; ...@@ -61,4 +64,13 @@ typedef khash_t(str) git_strmap;
#define git_strmap_foreach kh_foreach #define git_strmap_foreach kh_foreach
#define git_strmap_foreach_value kh_foreach_value #define git_strmap_foreach_value kh_foreach_value
#define git_strmap_begin kh_begin
#define git_strmap_end kh_end
int git_strmap_next(
const char **key,
void **data,
git_strmap_iter* iter,
git_strmap *map);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment