source src/strmap.c
| Line | Flow | Count | Block(s) | Source |
|---|---|---|---|---|
| 1 | - | /* | ||
| 2 | - | * Copyright (C) the libgit2 contributors. All rights reserved. | ||
| 3 | - | * | ||
| 4 | - | * This file is part of libgit2, distributed under the GNU GPL v2 with | ||
| 5 | - | * a Linking Exception. For full terms see the included COPYING file. | ||
| 6 | - | */ | ||
| 7 | - | |||
| 8 | - | #include "strmap.h" | ||
| 9 | - | |||
| 10 | - | #define kmalloc git__malloc | ||
| 11 | - | #define kcalloc git__calloc | ||
| 12 | - | #define krealloc git__realloc | ||
| 13 | - | #define kreallocarray git__reallocarray | ||
| 14 | - | #define kfree git__free | ||
| 15 | - | #include "khash.h" | ||
| 16 | - | |||
| 17 | - | __KHASH_TYPE(str, const char *, void *) | ||
| 18 | - | |||
| 19 | 1233779 | 2,2,2,2,2,2,2 | __KHASH_IMPL(str, static kh_inline, const char *, void *, 1, kh_str_hash_func, kh_str_hash_equal) | |
| 20 | - | |||
| 21 | 130492 | 2 | int git_strmap_new(git_strmap **out) | |
| 22 | - | { | ||
| 23 | 130492 | 2 | *out = kh_init(str); | |
| 24 | 130486 | 3,4 | GIT_ERROR_CHECK_ALLOC(*out); | |
| 25 | - | |||
| 26 | 130486 | 5 | return 0; | |
| 27 | - | } | ||
| 28 | - | |||
| 29 | 130521 | 2 | void git_strmap_free(git_strmap *map) | |
| 30 | - | { | ||
| 31 | 130521 | 2 | kh_destroy(str, map); | |
| 32 | 130527 | 3 | } | |
| 33 | - | |||
| 34 | 17227 | 2 | void git_strmap_clear(git_strmap *map) | |
| 35 | - | { | ||
| 36 | 17227 | 2 | kh_clear(str, map); | |
| 37 | 17227 | 3 | } | |
| 38 | - | |||
| 39 | 1121 | 2 | size_t git_strmap_size(git_strmap *map) | |
| 40 | - | { | ||
| 41 | 1121 | 2 | return kh_size(map); | |
| 42 | - | } | ||
| 43 | - | |||
| 44 | - | 2 | suppressed: function cannot be solved git_strmap_get (automatic due to inconsistent arc counts in .gcda files)void *git_strmap_get(git_strmap *map, const char *key) | |
| 45 | - | { | ||
| 46 | - | 2 | suppressed: function cannot be solved git_strmap_get (automatic due to inconsistent arc counts in .gcda files) size_t idx = kh_get(str, map, key); | |
| 47 | - | 3,4 | suppressed: function cannot be solved git_strmap_get (automatic due to inconsistent arc counts in .gcda files) if (idx == kh_end(map) || !kh_exist(map, idx)) | |
| 48 | - | 5 | suppressed: function cannot be solved git_strmap_get (automatic due to inconsistent arc counts in .gcda files) return NULL; | |
| 49 | - | 6 | suppressed: function cannot be solved git_strmap_get (automatic due to inconsistent arc counts in .gcda files) return kh_val(map, idx); | |
| 50 | - | } | ||
| 51 | - | |||
| 52 | 453032 | 2 | int git_strmap_set(git_strmap *map, const char *key, void *value) | |
| 53 | - | { | ||
| 54 | - | size_t idx; | ||
| 55 | - | int rval; | ||
| 56 | - | |||
| 57 | 453032 | 2 | idx = kh_put(str, map, key, &rval); | |
| 58 | 453325 | 3 | if (rval < 0) | |
| 59 | 32 | 4 | return -1; | |
| 60 | - | |||
| 61 | 453293 | 5 | if (rval == 0) | |
| 62 | 488 | 6 | kh_key(map, idx) = key; | |
| 63 | - | |||
| 64 | 453293 | 7 | kh_val(map, idx) = value; | |
| 65 | - | |||
| 66 | 453293 | 7 | return 0; | |
| 67 | - | } | ||
| 68 | - | |||
| 69 | 2565 | 2 | int git_strmap_delete(git_strmap *map, const char *key) | |
| 70 | - | { | ||
| 71 | 2565 | 2 | khiter_t idx = kh_get(str, map, key); | |
| 72 | 2565 | 3 | if (idx == kh_end(map)) | |
| 73 | 18 | 4 | return GIT_ENOTFOUND; | |
| 74 | 2547 | 5 | kh_del(str, map, idx); | |
| 75 | 2547 | 6 | return 0; | |
| 76 | - | } | ||
| 77 | - | |||
| 78 | 9289 | 2 | int git_strmap_exists(git_strmap *map, const char *key) | |
| 79 | - | { | ||
| 80 | 9289 | 2 | return kh_get(str, map, key) != kh_end(map); | |
| 81 | - | } | ||
| 82 | - | |||
| 83 | ![]() |
33855 | 2 | int git_strmap_iterate(void **value, git_strmap *map, size_t *iter, const char **key) |
| 84 | - | { | ||
| 85 | 33855 | 2 | size_t i = *iter; | |
| 86 | - | |||
| 87 | 59543 | 2,4,5 | while (i < map->n_buckets && !kh_exist(map, i)) | |
| 88 | 25688 | 3 | i++; | |
| 89 | - | |||
| 90 | 33855 | 6 | if (i >= map->n_buckets) | |
| 91 | 6295 | 7 | return GIT_ITEROVER; | |
| 92 | - | |||
| 93 | 27560 | 8 | if (key) | |
| 94 | 1085 | 9 | *key = kh_key(map, i); | |
| 95 | 27560 | 10 | if (value) | |
| 96 | 27560 | 11 | *value = kh_val(map, i); | |
| 97 | 27560 | 12 | *iter = ++i; | |
| 98 | - | |||
| 99 | 27560 | 12 | return 0; | |
| 100 | - | } |