STRING_MAP_FOR_EACH_VALUE (value, node, map)
string_set_insert (values, value);
}
+
+/* Returns true if A and B have the same content, false otherwise. */
+bool
+string_map_equals (const struct string_map *a, const struct string_map *b)
+{
+ if (string_map_count (a) != string_map_count (b))
+ return false;
+
+ const struct string_map_node *a_node;
+ STRING_MAP_FOR_EACH_NODE (a_node, a)
+ {
+ const struct string_map_node *b_node = string_map_find_node_with_hash (
+ b, a_node->key, strlen (a_node->key), a_node->hmap_node.hash);
+ if (!b_node || strcmp (a_node->value, b_node->value))
+ return false;
+ }
+
+ return true;
+}
\f
static struct string_map_node *
string_map_find_node_with_hash (const struct string_map *map, const char *key,
void string_map_get_keys (const struct string_map *, struct string_set *);
void string_map_get_values (const struct string_map *, struct string_set *);
+bool string_map_equals (const struct string_map *, const struct string_map *);
+
static inline struct string_map_node *string_map_first (
const struct string_map *);
static inline struct string_map_node *string_map_next (