From 68f2ee0e7691d2011daf188abe993a1011199d70 Mon Sep 17 00:00:00 2001
From: "Sven M. Hallberg" <pesco@khjk.org>
Date: Fri, 21 Feb 2020 19:35:10 +0100
Subject: [PATCH] add h_stringmap_equal

---
 src/cfgrammar.c | 14 ++++++++++++++
 src/cfgrammar.h |  1 +
 2 files changed, 15 insertions(+)

diff --git a/src/cfgrammar.c b/src/cfgrammar.c
index 369e49b8..47a27f13 100644
--- a/src/cfgrammar.c
+++ b/src/cfgrammar.c
@@ -379,6 +379,20 @@ bool h_stringmap_empty(const HStringMap *m)
           && h_hashtable_empty(m->char_branches));
 }
 
+static bool eq_stringmap(const void *a, const void *b)
+{
+  return h_stringmap_equal(a, b);
+}
+
+bool h_stringmap_equal(const HStringMap *a, const HStringMap *b)
+{
+  if (a->epsilon_branch != b->epsilon_branch)
+    return false;
+  if (a->end_branch != b->end_branch)
+    return false;
+  return h_hashtable_equal(a->char_branches, b->char_branches, eq_stringmap);
+}
+
 static const HStringMap *
 h_first_seq_work(size_t k, HCFGrammar *g, HHashTable **pws, HCFChoice **s);
 
diff --git a/src/cfgrammar.h b/src/cfgrammar.h
index fb96e09a..8945ecb9 100644
--- a/src/cfgrammar.h
+++ b/src/cfgrammar.h
@@ -53,6 +53,7 @@ void *h_stringmap_get_lookahead(const HStringMap *m, HInputStream lookahead);
 bool h_stringmap_present(const HStringMap *m, const uint8_t *str, size_t n, bool end);
 bool h_stringmap_present_epsilon(const HStringMap *m);
 bool h_stringmap_empty(const HStringMap *m);
+bool h_stringmap_equal(const HStringMap *a, const HStringMap *b);
 
 static inline HStringMap *h_stringmap_get_char(const HStringMap *m, const uint8_t c)
  { return h_hashtable_get(m->char_branches, (void *)char_key(c)); }
-- 
GitLab