C Standard Library Extensions 1.2.4
cxmap.h
1/*
2 * This file is part of the ESO C Extension Library
3 * Copyright (C) 2001-2017 European Southern Observatory
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#ifndef CX_MAP_H
21#define CX_MAP_H
22
23#include <cxmemory.h>
24#include <cxtree.h>
25
26CX_BEGIN_DECLS
27
38typedef cx_tree cx_map;
39
49typedef cx_tree_iterator cx_map_iterator;
50
61typedef cx_tree_const_iterator cx_map_const_iterator;
62
78
79/*
80 * Create, copy and destroy operations
81 */
82
83
84cx_map *cx_map_new(cx_compare_func, cx_free_func, cx_free_func);
85void cx_map_delete(cx_map *);
86
87/*
88 * Nonmodifying operations
89 */
90
91cxsize cx_map_size(const cx_map *);
92cxbool cx_map_empty(const cx_map *);
93cxsize cx_map_max_size(const cx_map *);
95
96/*
97 * Special search operations
98 */
99
100cxsize cx_map_count(const cx_map *, cxcptr);
101cx_map_iterator cx_map_find(const cx_map *, cxcptr);
104void cx_map_equal_range(const cx_map *, cxcptr, cx_map_iterator *,
106
107/*
108 * Assignment operations
109 */
110
111void cx_map_swap(cx_map *, cx_map *);
112cxptr cx_map_assign(cx_map *, cx_map_iterator, cxcptr);
113cxptr cx_map_put(cx_map *, cxcptr, cxcptr);
114
115/*
116 * Element access
117 */
118
121cxptr cx_map_get(cx_map *, cxcptr);
122
123/*
124 * Iterator functions
125 */
126
131
132
133/*
134 * Inserting and removing elements
135 */
136
137cx_map_iterator cx_map_insert(cx_map *, cxcptr, cxcptr);
140cxsize cx_map_erase(cx_map *, cxcptr);
141void cx_map_clear(cx_map *);
142
143CX_END_DECLS
144
145#endif /* CX_MAP_H */
cx_map_iterator cx_map_next(const cx_map *, cx_map_const_iterator)
Get an iterator for the next pair in the map.
Definition: cxmap.c:110
cxsize cx_map_count(const cx_map *, cxcptr)
Get the number of elements matching a key.
Definition: cxmap.c:623
cx_map_iterator cx_map_begin(const cx_map *)
Get an iterator to the first pair in a map.
Definition: cxmap.c:61
void cx_map_erase_range(cx_map *, cx_map_iterator, cx_map_iterator)
Erase a range of elements from a map.
Definition: cxmap.c:698
cxsize cx_map_size(const cx_map *)
Get the actual number of pairs in the map.
Definition: cxmap.c:267
void cx_map_erase_position(cx_map *, cx_map_iterator)
Erase an element from a map.
Definition: cxmap.c:672
cx_map_compare_func cx_map_key_comp(const cx_map *)
Retrieve a map's key comparison function.
Definition: cxmap.c:312
void cx_map_equal_range(const cx_map *, cxcptr, cx_map_iterator *, cx_map_iterator *)
Find a subsequence matching a given key.
Definition: cxmap.c:600
cxptr cx_map_get(cx_map *, cxcptr)
Get the data for a given key.
Definition: cxmap.c:473
cx_map_iterator cx_map_previous(const cx_map *, cx_map_const_iterator)
Get an iterator for the previous pair in the map.
Definition: cxmap.c:135
cx_map_iterator cx_map_lower_bound(const cx_map *, cxcptr)
Find the beginning of a subsequence matching a given key.
Definition: cxmap.c:535
cx_tree cx_map
The map datatype.
Definition: cxmap.h:38
cxptr cx_map_assign(cx_map *, cx_map_iterator, cxcptr)
Assign data to an iterator position.
Definition: cxmap.c:360
cxsize cx_map_max_size(const cx_map *)
Get the maximum number of pairs possible.
Definition: cxmap.c:288
void cx_map_delete(cx_map *)
Destroy a map and all its elements.
Definition: cxmap.c:246
cx_tree_const_iterator cx_map_const_iterator
The map constant iterator datatype.
Definition: cxmap.h:61
cx_tree_compare_func cx_map_compare_func
The map's key comparison operator function.
Definition: cxmap.h:77
cx_map_iterator cx_map_upper_bound(const cx_map *, cxcptr)
Find the end of a subsequence matching a given key.
Definition: cxmap.c:571
cxptr cx_map_get_key(const cx_map *, cx_map_const_iterator)
Get the key from a given iterator position.
Definition: cxmap.c:426
cx_map_iterator cx_map_find(const cx_map *, cxcptr)
Locate an element in the map.
Definition: cxmap.c:505
cx_map_iterator cx_map_insert(cx_map *, cxcptr, cxcptr)
Attempt to insert data into a map.
Definition: cxmap.c:648
cx_map * cx_map_new(cx_map_compare_func compare, cx_free_func key_destroy, cx_free_func value_destroy)
Create a new map without any elements.
Definition: cxmap.c:218
void cx_map_swap(cx_map *, cx_map *)
Swap the contents of two maps.
Definition: cxmap.c:336
cx_tree_iterator cx_map_iterator
The map iterator datatype.
Definition: cxmap.h:49
cxbool cx_map_empty(const cx_map *)
Check whether a map is empty.
Definition: cxmap.c:183
cxptr cx_map_get_value(const cx_map *, cx_map_const_iterator)
Get the data from a given iterator position.
Definition: cxmap.c:448
cx_map_iterator cx_map_end(const cx_map *)
Get an iterator for the position after the last pair in the map.
Definition: cxmap.c:85
cxsize cx_map_erase(cx_map *, cxcptr)
Erase an element from a map according to the provided key.
Definition: cxmap.c:728
cxptr cx_map_put(cx_map *, cxcptr, cxcptr)
Set the value of a pair matching the given key.
Definition: cxmap.c:386
void cx_map_clear(cx_map *)
Remove all pairs from a map.
Definition: cxmap.c:157
cxbool(* cx_tree_compare_func)(cxcptr, cxcptr)
The tree's key comparison operator function.
Definition: cxtree.h:72