git

Форк
0
/
oidmap.c 
62 строки · 1.5 Кб
1
#include "git-compat-util.h"
2
#include "hash.h"
3
#include "oidmap.h"
4

5
static int oidmap_neq(const void *hashmap_cmp_fn_data UNUSED,
6
		      const struct hashmap_entry *e1,
7
		      const struct hashmap_entry *e2,
8
		      const void *keydata)
9
{
10
	const struct oidmap_entry *a, *b;
11

12
	a = container_of(e1, const struct oidmap_entry, internal_entry);
13
	b = container_of(e2, const struct oidmap_entry, internal_entry);
14

15
	if (keydata)
16
		return !oideq(&a->oid, (const struct object_id *) keydata);
17
	return !oideq(&a->oid, &b->oid);
18
}
19

20
void oidmap_init(struct oidmap *map, size_t initial_size)
21
{
22
	hashmap_init(&map->map, oidmap_neq, NULL, initial_size);
23
}
24

25
void oidmap_free(struct oidmap *map, int free_entries)
26
{
27
	if (!map)
28
		return;
29

30
	/* TODO: make oidmap itself not depend on struct layouts */
31
	hashmap_clear_(&map->map, free_entries ? 0 : -1);
32
}
33

34
void *oidmap_get(const struct oidmap *map, const struct object_id *key)
35
{
36
	if (!map->map.cmpfn)
37
		return NULL;
38

39
	return hashmap_get_from_hash(&map->map, oidhash(key), key);
40
}
41

42
void *oidmap_remove(struct oidmap *map, const struct object_id *key)
43
{
44
	struct hashmap_entry entry;
45

46
	if (!map->map.cmpfn)
47
		oidmap_init(map, 0);
48

49
	hashmap_entry_init(&entry, oidhash(key));
50
	return hashmap_remove(&map->map, &entry, key);
51
}
52

53
void *oidmap_put(struct oidmap *map, void *entry)
54
{
55
	struct oidmap_entry *to_put = entry;
56

57
	if (!map->map.cmpfn)
58
		oidmap_init(map, 0);
59

60
	hashmap_entry_init(&to_put->internal_entry, oidhash(&to_put->oid));
61
	return hashmap_put(&map->map, &to_put->internal_entry);
62
}
63

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.