]>
Commit | Line | Data |
---|---|---|
79f1cbe9 EJ |
1 | /* Copyright (c) 2012 Nicira, Inc. |
2 | * | |
3 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
4 | * you may not use this file except in compliance with the License. | |
5 | * You may obtain a copy of the License at: | |
6 | * | |
7 | * http://www.apache.org/licenses/LICENSE-2.0 | |
8 | * | |
9 | * Unless required by applicable law or agreed to in writing, software | |
10 | * distributed under the License is distributed on an "AS IS" BASIS, | |
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 | * See the License for the specific language governing permissions and | |
13 | * limitations under the License. */ | |
14 | ||
15 | #ifndef SMAP_H | |
16 | #define SMAP_H 1 | |
17 | ||
18 | #include "hmap.h" | |
19 | ||
cccc1356 BP |
20 | struct json; |
21 | ||
79f1cbe9 EJ |
22 | /* A map from string to string. */ |
23 | struct smap { | |
24 | struct hmap map; /* Contains "struct smap_node"s. */ | |
25 | }; | |
26 | ||
27 | struct smap_node { | |
28 | struct hmap_node node; /* In struct smap's 'map' hmap. */ | |
29 | char *key; | |
30 | char *value; | |
31 | }; | |
32 | ||
33 | #define SMAP_INITIALIZER(SMAP) { HMAP_INITIALIZER(&(SMAP)->map) } | |
34 | ||
35 | #define SMAP_FOR_EACH(SMAP_NODE, SMAP) \ | |
36 | HMAP_FOR_EACH (SMAP_NODE, node, &(SMAP)->map) | |
37 | ||
38 | #define SMAP_FOR_EACH_SAFE(SMAP_NODE, NEXT, SMAP) \ | |
39 | HMAP_FOR_EACH_SAFE (SMAP_NODE, NEXT, node, &(SMAP)->map) | |
40 | ||
41 | void smap_init(struct smap *); | |
42 | void smap_destroy(struct smap *); | |
43 | ||
44 | struct smap_node *smap_add(struct smap *, const char *, const char *); | |
45 | bool smap_add_once(struct smap *, const char *, const char *); | |
46 | void smap_add_format(struct smap *, const char *key, const char *, ...) | |
47 | PRINTF_FORMAT(3, 4); | |
48 | void smap_replace(struct smap *, const char *, const char *); | |
49 | ||
50 | void smap_remove(struct smap *, const char *); | |
51c82a49 | 51 | void smap_remove_node(struct smap *, struct smap_node *); |
57c8677b | 52 | void smap_steal(struct smap *, struct smap_node *, char **keyp, char **valuep); |
79f1cbe9 EJ |
53 | void smap_clear(struct smap *); |
54 | ||
55 | const char *smap_get(const struct smap *, const char *); | |
56 | struct smap_node *smap_get_node(const struct smap *, const char *); | |
57 | bool smap_get_bool(const struct smap *smap, const char *key, bool def); | |
58 | int smap_get_int(const struct smap *smap, const char *key, int def); | |
59 | ||
60 | bool smap_is_empty(const struct smap *); | |
61 | size_t smap_count(const struct smap *); | |
62 | ||
4512aaa7 | 63 | void smap_clone(struct smap *dst, const struct smap *src); |
79f1cbe9 EJ |
64 | const struct smap_node **smap_sort(const struct smap *); |
65 | ||
cccc1356 BP |
66 | void smap_from_json(struct smap *, const struct json *); |
67 | struct json *smap_to_json(const struct smap *); | |
68 | ||
79f1cbe9 | 69 | #endif /* smap.h */ |