mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-11 02:10:03 +00:00
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(...)
This commit is contained in:
parent
c7d4904c47
commit
6385fc5ff5
@ -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) {
|
||||
next_var = CVAR_LIST_NEXT(var);
|
||||
|
||||
@ -285,7 +286,7 @@ static int file_foreach(
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (regexp != NULL)
|
||||
|
34
src/strmap.c
Normal file
34
src/strmap.c
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
12
src/strmap.h
12
src/strmap.h
@ -17,6 +17,7 @@
|
||||
|
||||
__KHASH_TYPE(str, const char *, void *);
|
||||
typedef khash_t(str) git_strmap;
|
||||
typedef khiter_t git_strmap_iter;
|
||||
|
||||
#define GIT__USE_STRMAP \
|
||||
__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;
|
||||
#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_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_set_value_at(h, idx, v) kh_val(h, idx) = v
|
||||
#define git_strmap_delete_at(h, idx) kh_del(str, h, idx)
|
||||
@ -61,4 +64,13 @@ typedef khash_t(str) git_strmap;
|
||||
#define git_strmap_foreach kh_foreach
|
||||
#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
|
||||
|
Loading…
Reference in New Issue
Block a user