]> git.proxmox.com Git - libgit2.git/blame - src/idxmap.h
Bump debhelper compatibility level to 13
[libgit2.git] / src / idxmap.h
CommitLineData
ac02a694
CMN
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#ifndef INCLUDE_idxmap_h__
8#define INCLUDE_idxmap_h__
9
ac02a694 10#include "common.h"
eae0bfdc 11
ac02a694
CMN
12#include "git2/index.h"
13
0c9c969a 14/** A map with `git_index_entry`s as key. */
ac3d33df 15typedef struct kh_idx_s git_idxmap;
0c9c969a 16/** A map with case-insensitive `git_index_entry`s as key */
ac3d33df 17typedef struct kh_idxicase_s git_idxmap_icase;
ac02a694 18
0c9c969a
UG
19/**
20 * Allocate a new index entry map.
21 *
22 * @param out Pointer to the map that shall be allocated.
23 * @return 0 on success, an error code if allocation has failed.
24 */
25int git_idxmap_new(git_idxmap **out);
cee9ca66 26
0c9c969a
UG
27/**
28 * Allocate a new case-insensitive index entry map.
29 *
30 * @param out Pointer to the map that shall be allocated.
31 * @return 0 on success, an error code if allocation has failed.
32 */
33int git_idxmap_icase_new(git_idxmap_icase **out);
cee9ca66 34
0c9c969a
UG
35/**
36 * Free memory associated with the map.
37 *
38 * Note that this function will _not_ free values added to this
39 * map.
40 *
41 * @param map Pointer to the map that is to be free'd. May be
42 * `NULL`.
43 */
94af9155 44void git_idxmap_free(git_idxmap *map);
0c9c969a
UG
45
46/**
47 * Free memory associated with the map.
48 *
49 * Note that this function will _not_ free values added to this
50 * map.
51 *
52 * @param map Pointer to the map that is to be free'd. May be
53 * `NULL`.
54 */
ac3d33df 55void git_idxmap_icase_free(git_idxmap_icase *map);
0c9c969a
UG
56
57/**
58 * Clear all entries from the map.
59 *
60 * This function will remove all entries from the associated map.
61 * Memory associated with it will not be released, though.
62 *
63 * @param map Pointer to the map that shall be cleared. May be
64 * `NULL`.
65 */
cee9ca66 66void git_idxmap_clear(git_idxmap *map);
0c9c969a
UG
67
68/**
69 * Clear all entries from the map.
70 *
71 * This function will remove all entries from the associated map.
72 * Memory associated with it will not be released, though.
73 *
74 * @param map Pointer to the map that shall be cleared. May be
75 * `NULL`.
76 */
ac3d33df 77void git_idxmap_icase_clear(git_idxmap_icase *map);
cee9ca66 78
0c9c969a
UG
79/**
80 * Resize the map by allocating more memory.
81 *
82 * @param map map that shall be resized
83 * @param size count of entries that the map shall hold
84 * @return `0` if the map was successfully resized, a negative
85 * error code otherwise
86 */
87int git_idxmap_resize(git_idxmap *map, size_t size);
cee9ca66 88
0c9c969a
UG
89/**
90 * Resize the map by allocating more memory.
91 *
92 * @param map map that shall be resized
93 * @param size count of entries that the map shall hold
94 * @return `0` if the map was successfully resized, a negative
95 * error code otherwise
96 */
97int git_idxmap_icase_resize(git_idxmap_icase *map, size_t size);
98
99/**
100 * Return value associated with the given key.
101 *
102 * @param map map to search key in
103 * @param key key to search for; the index entry will be searched
104 * for by its case-sensitive path
105 * @return value associated with the given key or NULL if the key was not found
106 */
107void *git_idxmap_get(git_idxmap *map, const git_index_entry *key);
108
109/**
110 * Return value associated with the given key.
111 *
112 * @param map map to search key in
113 * @param key key to search for; the index entry will be searched
114 * for by its case-insensitive path
115 * @return value associated with the given key or NULL if the key was not found
116 */
117void *git_idxmap_icase_get(git_idxmap_icase *map, const git_index_entry *key);
118
119/**
120 * Set the entry for key to value.
121 *
122 * If the map has no corresponding entry for the given key, a new
123 * entry will be created with the given value. If an entry exists
124 * already, its value will be updated to match the given value.
125 *
126 * @param map map to create new entry in
127 * @param key key to set
128 * @param value value to associate the key with; may be NULL
129 * @return zero if the key was successfully set, a negative error
130 * code otherwise
131 */
132int git_idxmap_set(git_idxmap *map, const git_index_entry *key, void *value);
133
134/**
135 * Set the entry for key to value.
136 *
137 * If the map has no corresponding entry for the given key, a new
138 * entry will be created with the given value. If an entry exists
139 * already, its value will be updated to match the given value.
140 *
141 * @param map map to create new entry in
142 * @param key key to set
143 * @param value value to associate the key with; may be NULL
144 * @return zero if the key was successfully set, a negative error
145 * code otherwise
146 */
147int git_idxmap_icase_set(git_idxmap_icase *map, const git_index_entry *key, void *value);
148
149/**
150 * Delete an entry from the map.
151 *
152 * Delete the given key and its value from the map. If no such
153 * key exists, this will do nothing.
154 *
155 * @param map map to delete key in
156 * @param key key to delete
157 * @return `0` if the key has been deleted, GIT_ENOTFOUND if no
158 * such key was found, a negative code in case of an
159 * error
160 */
161int git_idxmap_delete(git_idxmap *map, const git_index_entry *key);
162
163/**
164 * Delete an entry from the map.
165 *
166 * Delete the given key and its value from the map. If no such
167 * key exists, this will do nothing.
168 *
169 * @param map map to delete key in
170 * @param key key to delete
171 * @return `0` if the key has been deleted, GIT_ENOTFOUND if no
172 * such key was found, a negative code in case of an
173 * error
174 */
175int git_idxmap_icase_delete(git_idxmap_icase *map, const git_index_entry *key);
ac02a694 176
ac02a694 177#endif