Freeciv-3.1: /fast/freeciv/nightly/S3_1/utility/genhash.h Source File

Freeciv-3.1

Loading...
Searching...
No Matches
genhash.h
Go to the documentation of this file.
1/**********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13#ifndef FC__GENHASH_H
14#define FC__GENHASH_H
15
16#ifdef __cplusplus
17extern "C" {
18#endif /* __cplusplus */
19
20/****************************************************************************
21 A general-purpose generic hash table implementation.
22 See comments in "genhash.c".
23****************************************************************************/
24
25/* utility */
26#include "iterator.h"
27#include "support.h" /* bool type */
28
29struct genhash; /* opaque */
30
31/* Hash value type. */
32 typedef unsigned int genhash_val_t;
33
34/* Function typedefs: */
35 typedef genhash_val_t (*genhash_val_fn_t) (const void *);
36 typedef bool (*genhash_comp_fn_t) (const void *, const void *);
37 typedef void * (*genhash_copy_fn_t) (const void *);
38 typedef void (*genhash_free_fn_t) (void *);
39
40
41/* Supplied functions (matching above typedefs) appropriate for
42 * keys being normal nul-terminated strings: */
43 genhash_val_t genhash_str_val_func(const char *vkey);
44bool genhash_str_comp_func(const char *vkey1, const char *vkey2);
45/* and malloc'ed strings: */
46char *genhash_str_copy_func(const char *vkey);
47void genhash_str_free_func(char *vkey);
48
49
50/* General functions: */
51struct genhash *genhash_new(genhash_val_fn_t key_val_func,
52 genhash_comp_fn_t key_comp_func)
53 fc__warn_unused_result;
54struct genhash *genhash_new_full(genhash_val_fn_t key_val_func,
55 genhash_comp_fn_t key_comp_func,
56 genhash_copy_fn_t key_copy_func,
57 genhash_free_fn_t key_free_func,
58 genhash_copy_fn_t data_copy_func,
59 genhash_free_fn_t data_free_func)
60 fc__warn_unused_result;
61struct genhash *genhash_new_nentries(genhash_val_fn_t key_val_func,
62 genhash_comp_fn_t key_comp_func,
63 size_t nentries)
64 fc__warn_unused_result;
65struct genhash *
66 genhash_new_nentries_full(genhash_val_fn_t key_val_func,
67 genhash_comp_fn_t key_comp_func,
68 genhash_copy_fn_t key_copy_func,
69 genhash_free_fn_t key_free_func,
70 genhash_copy_fn_t data_copy_func,
71 genhash_free_fn_t data_free_func,
72 size_t nentries)
73 fc__warn_unused_result;
74void genhash_destroy(struct genhash *pgenhash);
75
76bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink);
77size_t genhash_size(const struct genhash *pgenhash);
78size_t genhash_capacity(const struct genhash *pgenhash);
79
80struct genhash *genhash_copy(const struct genhash *pgenhash)
81 fc__warn_unused_result;
82void genhash_clear(struct genhash *pgenhash);
83
84bool genhash_insert(struct genhash *pgenhash, const void *key,
85 const void *data);
86bool genhash_replace(struct genhash *pgenhash, const void *key,
87 const void *data);
88bool genhash_replace_full(struct genhash *pgenhash, const void *key,
89 const void *data, void **old_pkey,
90 void **old_pdata);
91
92bool genhash_lookup(const struct genhash *pgenhash, const void *key,
93 void **pdata);
94
95bool genhash_remove(struct genhash *pgenhash, const void *key);
96bool genhash_remove_full(struct genhash *pgenhash, const void *key,
97 void **deleted_pkey, void **deleted_pdata);
98
99bool genhashes_are_equal(const struct genhash *pgenhash1,
100 const struct genhash *pgenhash2);
101bool genhashes_are_equal_full(const struct genhash *pgenhash1,
102 const struct genhash *pgenhash2,
103 genhash_comp_fn_t data_comp_func);
104
105
106/* Iteration. */
107struct genhash_iter;
108size_t genhash_iter_sizeof(void);
109
110struct iterator *genhash_key_iter_init(struct genhash_iter *iter,
111 const struct genhash *hash);
112#define genhash_keys_iterate(ARG_ht, NAME_key) \
113 generic_iterate(struct genhash_iter, const void *, NAME_key, \
114 genhash_iter_sizeof, genhash_key_iter_init, (ARG_ht))
115#define genhash_keys_iterate_end generic_iterate_end
116
117struct iterator *genhash_value_iter_init(struct genhash_iter *iter,
118 const struct genhash *hash);
119#define genhash_values_iterate(ARG_ht, NAME_value) \
120 generic_iterate(struct genhash_iter, void *, NAME_value, \
121 genhash_iter_sizeof, genhash_value_iter_init, (ARG_ht))
122#define genhash_values_iterate_end generic_iterate_end
123
124struct iterator *genhash_iter_init(struct genhash_iter *iter,
125 const struct genhash *hash);
126void *genhash_iter_key(const struct iterator *genhash_iter);
127void *genhash_iter_value(const struct iterator *genhash_iter);
128#define genhash_iterate(ARG_ht, NAME_iter) \
129 generic_iterate(struct genhash_iter, struct iterator *, NAME_iter, \
130 genhash_iter_sizeof, genhash_iter_init, (ARG_ht))
131#define genhash_iterate_end generic_iterate_end
132
133#ifdef __cplusplus
134}
135#endif /* __cplusplus */
136
137#endif /* FC__GENHASH_H */
genhash_val_fn_t
genhash_val_t(* genhash_val_fn_t)(const void *)
Definition genhash.h:35
genhash_new_nentries_full
struct genhash * genhash_new_nentries_full(genhash_val_fn_t key_val_func, genhash_comp_fn_t key_comp_func, genhash_copy_fn_t key_copy_func, genhash_free_fn_t key_free_func, genhash_copy_fn_t data_copy_func, genhash_free_fn_t data_free_func, size_t nentries) fc__warn_unused_result
Definition genhash.c:236
genhash_key_iter_init
struct iterator * genhash_key_iter_init(struct genhash_iter *iter, const struct genhash *hash)
Definition genhash.c:900
genhash_insert
bool genhash_insert(struct genhash *pgenhash, const void *key, const void *data)
Definition genhash.c:604
genhash_str_comp_func
bool genhash_str_comp_func(const char *vkey1, const char *vkey2)
Definition genhash.c:124
genhashes_are_equal
bool genhashes_are_equal(const struct genhash *pgenhash1, const struct genhash *pgenhash2)
Definition genhash.c:741
genhash_new_full
struct genhash * genhash_new_full(genhash_val_fn_t key_val_func, genhash_comp_fn_t key_comp_func, genhash_copy_fn_t key_copy_func, genhash_free_fn_t key_free_func, genhash_copy_fn_t data_copy_func, genhash_free_fn_t data_free_func) fc__warn_unused_result
Definition genhash.c:268
genhash_new
struct genhash * genhash_new(genhash_val_fn_t key_val_func, genhash_comp_fn_t key_comp_func) fc__warn_unused_result
Definition genhash.c:283
genhash_set_no_shrink
bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink)
Definition genhash.c:512
genhash_size
size_t genhash_size(const struct genhash *pgenhash)
Definition genhash.c:525
genhash_new_nentries
struct genhash * genhash_new_nentries(genhash_val_fn_t key_val_func, genhash_comp_fn_t key_comp_func, size_t nentries) fc__warn_unused_result
Definition genhash.c:253
genhash_copy
struct genhash * genhash_copy(const struct genhash *pgenhash) fc__warn_unused_result
Definition genhash.c:543
genhash_destroy
void genhash_destroy(struct genhash *pgenhash)
Definition genhash.c:293
genhash_capacity
size_t genhash_capacity(const struct genhash *pgenhash)
Definition genhash.c:534
genhash_clear
void genhash_clear(struct genhash *pgenhash)
Definition genhash.c:582
genhash_comp_fn_t
bool(* genhash_comp_fn_t)(const void *, const void *)
Definition genhash.h:36
genhash_free_fn_t
void(* genhash_free_fn_t)(void *)
Definition genhash.h:38
genhash_iter_sizeof
size_t genhash_iter_sizeof(void)
Definition genhash.c:795
genhash_copy_fn_t
void *(* genhash_copy_fn_t)(const void *)
Definition genhash.h:37
genhash_lookup
bool genhash_lookup(const struct genhash *pgenhash, const void *key, void **pdata)
Definition genhash.c:681
genhashes_are_equal_full
bool genhashes_are_equal_full(const struct genhash *pgenhash1, const struct genhash *pgenhash2, genhash_comp_fn_t data_comp_func)
Definition genhash.c:750
genhash_remove
bool genhash_remove(struct genhash *pgenhash, const void *key)
Definition genhash.c:702
genhash_replace_full
bool genhash_replace_full(struct genhash *pgenhash, const void *key, const void *data, void **old_pkey, void **old_pdata)
Definition genhash.c:647
genhash_iter_init
struct iterator * genhash_iter_init(struct genhash_iter *iter, const struct genhash *hash)
Definition genhash.c:891
genhash_iter_key
void * genhash_iter_key(const struct iterator *genhash_iter)
Definition genhash.c:803
genhash_value_iter_init
struct iterator * genhash_value_iter_init(struct genhash_iter *iter, const struct genhash *hash)
Definition genhash.c:909
genhash_str_free_func
void genhash_str_free_func(char *vkey)
Definition genhash.c:140
genhash_str_copy_func
char * genhash_str_copy_func(const char *vkey)
Definition genhash.c:132
genhash_replace
bool genhash_replace(struct genhash *pgenhash, const void *key, const void *data)
Definition genhash.c:632
genhash_str_val_func
genhash_val_t genhash_str_val_func(const char *vkey)
Definition genhash.c:109
genhash_val_t
unsigned int genhash_val_t
Definition genhash.h:32
genhash_remove_full
bool genhash_remove_full(struct genhash *pgenhash, const void *key, void **deleted_pkey, void **deleted_pdata)
Definition genhash.c:714
genhash_iter_value
void * genhash_iter_value(const struct iterator *genhash_iter)
Definition genhash.c:812
hash
static GHashTable * hash
Definition wldlg.c:320
iterator.h
genhash_iter
Definition genhash.c:96
genhash
Definition genhash.c:83
genhash::key_comp_func
genhash_comp_fn_t key_comp_func
Definition genhash.c:86
genhash::key_val_func
genhash_val_fn_t key_val_func
Definition genhash.c:85
genhash::key_free_func
genhash_free_fn_t key_free_func
Definition genhash.c:88
genhash::no_shrink
bool no_shrink
Definition genhash.c:93
genhash::data_copy_func
genhash_copy_fn_t data_copy_func
Definition genhash.c:89
genhash::data_free_func
genhash_free_fn_t data_free_func
Definition genhash.c:90
genhash::key_copy_func
genhash_copy_fn_t key_copy_func
Definition genhash.c:87
iterator
Definition iterator.h:31
support.h
fc__warn_unused_result
#define fc__warn_unused_result
Definition support.h:99
bool
#define bool
Definition support.h:61