diff options
author | Terry Wilson <twilson@redhat.com> | 2016-07-12 16:37:34 -0500 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2016-07-22 17:09:17 -0700 |
commit | ee89ea7b477bb4fd05137de03b2e8443807ed9f4 (patch) | |
tree | c67229de600aa075cc7326419b50e76a8eecb032 /include/openvswitch/shash.h | |
parent | ab39371d68842b7e4000cc5d8718e6fc04e92795 (diff) | |
download | openvswitch-ee89ea7b477bb4fd05137de03b2e8443807ed9f4.tar.gz |
json: Move from lib to include/openvswitch.
To easily allow both in- and out-of-tree building of the Python
wrapper for the OVS JSON parser (e.g. w/ pip), move json.h to
include/openvswitch. This also requires moving lib/{hmap,shash}.h.
Both hmap.h and shash.h were #include-ing "util.h" even though the
headers themselves did not use anything from there, but rather from
include/openvswitch/util.h. Fixing that required including util.h
in several C files mostly due to OVS_NOT_REACHED and things like
xmalloc.
Signed-off-by: Terry Wilson <twilson@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'include/openvswitch/shash.h')
-rw-r--r-- | include/openvswitch/shash.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/include/openvswitch/shash.h b/include/openvswitch/shash.h new file mode 100644 index 000000000..afc482364 --- /dev/null +++ b/include/openvswitch/shash.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2009, 2010, 2011, 2016 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SHASH_H +#define SHASH_H 1 + +#include "openvswitch/hmap.h" +#include "openvswitch/util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct shash_node { + struct hmap_node node; + char *name; + void *data; +}; + +struct shash { + struct hmap map; +}; + +#define SHASH_INITIALIZER(SHASH) { HMAP_INITIALIZER(&(SHASH)->map) } + +#define SHASH_FOR_EACH(SHASH_NODE, SHASH) \ + HMAP_FOR_EACH_INIT (SHASH_NODE, node, &(SHASH)->map, \ + BUILD_ASSERT_TYPE(SHASH_NODE, struct shash_node *), \ + BUILD_ASSERT_TYPE(SHASH, struct shash *)) + +#define SHASH_FOR_EACH_SAFE(SHASH_NODE, NEXT, SHASH) \ + HMAP_FOR_EACH_SAFE_INIT ( \ + SHASH_NODE, NEXT, node, &(SHASH)->map, \ + BUILD_ASSERT_TYPE(SHASH_NODE, struct shash_node *), \ + BUILD_ASSERT_TYPE(NEXT, struct shash_node *), \ + BUILD_ASSERT_TYPE(SHASH, struct shash *)) + +void shash_init(struct shash *); +void shash_destroy(struct shash *); +void shash_destroy_free_data(struct shash *); +void shash_swap(struct shash *, struct shash *); +void shash_moved(struct shash *); +void shash_clear(struct shash *); +void shash_clear_free_data(struct shash *); +bool shash_is_empty(const struct shash *); +size_t shash_count(const struct shash *); +struct shash_node *shash_add(struct shash *, const char *, const void *); +struct shash_node *shash_add_nocopy(struct shash *, char *, const void *); +bool shash_add_once(struct shash *, const char *, const void *); +void shash_add_assert(struct shash *, const char *, const void *); +void *shash_replace(struct shash *, const char *, const void *data); +void shash_delete(struct shash *, struct shash_node *); +char *shash_steal(struct shash *, struct shash_node *); +struct shash_node *shash_find(const struct shash *, const char *); +struct shash_node *shash_find_len(const struct shash *, const char *, size_t); +void *shash_find_data(const struct shash *, const char *); +void *shash_find_and_delete(struct shash *, const char *); +void *shash_find_and_delete_assert(struct shash *, const char *); +struct shash_node *shash_first(const struct shash *); +const struct shash_node **shash_sort(const struct shash *); +bool shash_equal_keys(const struct shash *, const struct shash *); +struct shash_node *shash_random_node(struct shash *); + +#ifdef __cplusplus +} +#endif + +#endif /* shash.h */ |