summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/data.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-10-09 08:38:55 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-10-09 08:38:55 +0000
commit6c86e7fa91602e4863c95622934d45e383890156 (patch)
tree6f8e65171ecf5084e9a9b9c54fbcab60b29b3e2f /src/runtime/c/pgf/data.c
parent84b257e85ca15b36e897df8701f66c57064fde97 (diff)
replace the hash maps in the abstract syntax with binary search tables
Diffstat (limited to 'src/runtime/c/pgf/data.c')
-rw-r--r--src/runtime/c/pgf/data.c40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/runtime/c/pgf/data.c b/src/runtime/c/pgf/data.c
index 79cd3e8a2..54df81a57 100644
--- a/src/runtime/c/pgf/data.c
+++ b/src/runtime/c/pgf/data.c
@@ -34,13 +34,19 @@ GU_DEFINE_TYPE(PgfCncCat, abstract);
GU_DEFINE_TYPE(PgfDummyVariant, GuVariant);
-GU_DEFINE_TYPE(PgfFlags, GuStringMap, gu_type(PgfDummyVariant), &gu_null_variant);
+static int
+pgf_flag_cmp_fn(GuOrder* self, const void* p1, const void* p2)
+{
+ (void) self;
+ return strcmp((GuString) p1, ((PgfFlag*) p2)->name);
+}
+
+GuOrder pgf_flag_order[1] = { { pgf_flag_cmp_fn } };
+
GU_DEFINE_TYPE(PgfProductionSeq, abstract);
GU_DEFINE_TYPE(PgfProductionBuf, abstract);
-GU_DEFINE_TYPE(PgfAbsFun, abstract);
-
static prob_t inf_prob = INFINITY;
GU_DEFINE_TYPE(prob_t, GuFloating, _);
@@ -51,9 +57,35 @@ GU_DEFINE_TYPE(PgfMetaChildMap, GuMap,
GU_DEFINE_TYPE(PgfAbsCat, abstract);
+static int
+pgf_abscat_cmp_fn(GuOrder* self, const void* p1, const void* p2)
+{
+ (void) self;
+ return strcmp((GuString) p1, ((PgfAbsCat*) p2)->name);
+}
+
+GuOrder pgf_abscat_order[1] = { { pgf_abscat_cmp_fn } };
+
+static int
+pgf_absfun_cmp_fn(GuOrder* self, const void* p1, const void* p2)
+{
+ (void) self;
+ return strcmp((GuString) p1, ((PgfAbsFun*) p2)->name);
+}
+
+GuOrder pgf_absfun_order[1] = { { pgf_absfun_cmp_fn } };
+
+
static GuString empty_string = "";
GU_DEFINE_TYPE(
PgfPrintNames, PgfCIdMap, gu_type(GuString), &empty_string);
-GU_DEFINE_TYPE(PgfConcr, abstract);
+static int
+pgf_concr_cmp_fn(GuOrder* self, const void* p1, const void* p2)
+{
+ (void) self;
+ return strcmp((GuString) p1, ((PgfConcr*) p2)->name);
+}
+
+GuOrder pgf_concr_order[1] = { { pgf_concr_cmp_fn } };