From 55f79e75f34ccf740d3f1c92ab35c604b067b01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 15 Dec 2016 20:21:27 +0100 Subject: map: add map_leaf utility function Tests whether the given prefix can be extended to exactly one map element i.e. true iff the prefix map contains exactly one element. --- map.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'map.c') diff --git a/map.c b/map.c index 7994f34..94e941c 100644 --- a/map.c +++ b/map.c @@ -78,6 +78,19 @@ bool map_contains(const Map *map, const char *prefix) return !map_empty(map_prefix(map, prefix)); } +static bool leaf(const char *key, void *value, void *data) +{ + int *nodes = data; + return (*nodes)++ < 1; +} + +bool map_leaf(const Map *map, const char *prefix) +{ + int nodes = 0; + map_iterate(map_prefix(map, prefix), leaf, &nodes); + return nodes == 1; +} + bool map_put(Map *map, const char *k, const void *value) { size_t len = strlen(k); -- cgit v1.2.3