From 66e7f0377d554a5a317f65a849e9fdc299232986 Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Fri, 7 Jan 2022 22:09:02 +0100 Subject: [PATCH 1/4] less loop --- inc/cleri/rule.h | 2 +- src/rule.c | 33 ++++++++++++-------- test/test_thingsdb_lang/test_thingsdb_lang.c | 1 + 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/inc/cleri/rule.h b/inc/cleri/rule.h index 44be78c..74f61e4 100644 --- a/inc/cleri/rule.h +++ b/inc/cleri/rule.h @@ -38,7 +38,7 @@ struct cleri_rule_tested_s { const char * str; cleri_node_t * node; - cleri_rule_tested_t * prev; + cleri_rule_tested_t * next; }; struct cleri_rule_store_s diff --git a/src/rule.c b/src/rule.c index 7c45e3f..8823d1e 100644 --- a/src/rule.c +++ b/src/rule.c @@ -72,15 +72,22 @@ cleri_rule_test_t cleri__rule_init( return CLERI_RULE_TRUE; } - do + if ((*target)->str == str) + { + return CLERI_RULE_FALSE; + } + + (*target) = (*target)->next; + + while ((*target) != NULL && str <= (*target)->str) { if ((*target)->str == str) { return CLERI_RULE_FALSE; } - (*target) = (*target)->prev; + tested = (*target); + (*target) = (*target)->next; } - while ((*target) != NULL); *target = cleri__malloc(cleri_rule_tested_t); @@ -91,8 +98,8 @@ cleri_rule_test_t cleri__rule_init( (*target)->str = str; (*target)->node = NULL; - (*target)->prev = tested->prev; - tested->prev = *target; + (*target)->next = tested->next; + tested->next = *target; return CLERI_RULE_TRUE; } @@ -121,7 +128,7 @@ static cleri_node_t * rule__parse( nrule.depth = 0; nrule.tested.str = NULL; nrule.tested.node = NULL; - nrule.tested.prev = NULL; + nrule.tested.next = NULL; nrule.root_obj = cl_obj->via.rule->cl_obj; node = cleri__parse_walk( @@ -151,7 +158,7 @@ static cleri_node_t * rule__parse( nrule.depth = 0; nrule.tested.str = NULL; nrule.tested.node = NULL; - nrule.tested.prev = NULL; + nrule.tested.next = NULL; nrule.root_obj = cl_obj->via.rule->cl_obj; rnode = cleri__parse_walk( @@ -183,14 +190,14 @@ static cleri_node_t * rule__parse( */ static void rule__tested_free(cleri_rule_tested_t * tested) { - cleri_rule_tested_t * prev = tested->prev; + cleri_rule_tested_t * next = tested->next; cleri__node_free(tested->node); - while (prev != NULL) + while (next != NULL) { - tested = prev->prev; - cleri__node_free(prev->node); - free(prev); - prev = tested; + tested = next->next; + cleri__node_free(next->node); + free(next); + next = tested; } } diff --git a/test/test_thingsdb_lang/test_thingsdb_lang.c b/test/test_thingsdb_lang/test_thingsdb_lang.c index f496457..f55a0b0 100644 --- a/test/test_thingsdb_lang/test_thingsdb_lang.c +++ b/test/test_thingsdb_lang/test_thingsdb_lang.c @@ -421,6 +421,7 @@ static int test_thingsdb_lang(void) _assert_is_valid (grammar, "x = 1"); _assert_is_valid (grammar, "||1?2:3"); _assert_is_valid (grammar, "||nil"); + _assert_is_valid (grammar, "4 + 5;"); _assert_is_not_valid (grammar, "||1?2"); flags = ( From 0d9af74d3f01d5b7fefba35f216b4f5071473483 Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Fri, 7 Jan 2022 22:26:41 +0100 Subject: [PATCH 2/4] . --- src/rule.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/rule.c b/src/rule.c index 8823d1e..6da8dbe 100644 --- a/src/rule.c +++ b/src/rule.c @@ -13,6 +13,8 @@ static cleri_node_t * rule__parse( cleri_rule_store_t * rule); static void rule__tested_free(cleri_rule_tested_t * tested); +static int c_loop = 0; + /* * Returns NULL in case an error has occurred. */ @@ -74,6 +76,7 @@ cleri_rule_test_t cleri__rule_init( if ((*target)->str == str) { + printf("loopcount: %d\n", c_loop); return CLERI_RULE_FALSE; } @@ -83,8 +86,10 @@ cleri_rule_test_t cleri__rule_init( { if ((*target)->str == str) { + printf("loopcount: %d\n", c_loop); return CLERI_RULE_FALSE; } + c_loop++; tested = (*target); (*target) = (*target)->next; } @@ -93,6 +98,7 @@ cleri_rule_test_t cleri__rule_init( if (*target == NULL) { + printf("loopcount: %d\n", c_loop); return CLERI_RULE_ERROR; } @@ -100,7 +106,7 @@ cleri_rule_test_t cleri__rule_init( (*target)->node = NULL; (*target)->next = tested->next; tested->next = *target; - + printf("loopcount: %d\n", c_loop); return CLERI_RULE_TRUE; } From 50e879e51c42c745929e0d8a3d026727ad39f303 Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Fri, 7 Jan 2022 22:31:21 +0100 Subject: [PATCH 3/4] . --- src/rule.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rule.c b/src/rule.c index 6da8dbe..7e7336a 100644 --- a/src/rule.c +++ b/src/rule.c @@ -13,7 +13,7 @@ static cleri_node_t * rule__parse( cleri_rule_store_t * rule); static void rule__tested_free(cleri_rule_tested_t * tested); -static int c_loop = 0; +static int c_loop = 0, c_new = 0; /* * Returns NULL in case an error has occurred. @@ -106,7 +106,8 @@ cleri_rule_test_t cleri__rule_init( (*target)->node = NULL; (*target)->next = tested->next; tested->next = *target; - printf("loopcount: %d\n", c_loop); + c_new++; + printf("loopcount: %d cnew: %d\n", c_loop, c_new); return CLERI_RULE_TRUE; } From 99b93eb9ebe8726862fb17cee994b757cac4348d Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Fri, 7 Jan 2022 22:36:20 +0100 Subject: [PATCH 4/4] less loop --- src/rule.c | 13 +------------ test/test_thingsdb_lang/test_thingsdb_lang.c | 2 +- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/rule.c b/src/rule.c index 7e7336a..0f390d6 100644 --- a/src/rule.c +++ b/src/rule.c @@ -13,8 +13,6 @@ static cleri_node_t * rule__parse( cleri_rule_store_t * rule); static void rule__tested_free(cleri_rule_tested_t * tested); -static int c_loop = 0, c_new = 0; - /* * Returns NULL in case an error has occurred. */ @@ -76,29 +74,22 @@ cleri_rule_test_t cleri__rule_init( if ((*target)->str == str) { - printf("loopcount: %d\n", c_loop); return CLERI_RULE_FALSE; } - (*target) = (*target)->next; - - while ((*target) != NULL && str <= (*target)->str) + while (((*target) = (*target)->next) != NULL && str <= (*target)->str) { if ((*target)->str == str) { - printf("loopcount: %d\n", c_loop); return CLERI_RULE_FALSE; } - c_loop++; tested = (*target); - (*target) = (*target)->next; } *target = cleri__malloc(cleri_rule_tested_t); if (*target == NULL) { - printf("loopcount: %d\n", c_loop); return CLERI_RULE_ERROR; } @@ -106,8 +97,6 @@ cleri_rule_test_t cleri__rule_init( (*target)->node = NULL; (*target)->next = tested->next; tested->next = *target; - c_new++; - printf("loopcount: %d cnew: %d\n", c_loop, c_new); return CLERI_RULE_TRUE; } diff --git a/test/test_thingsdb_lang/test_thingsdb_lang.c b/test/test_thingsdb_lang/test_thingsdb_lang.c index f55a0b0..025d83b 100644 --- a/test/test_thingsdb_lang/test_thingsdb_lang.c +++ b/test/test_thingsdb_lang/test_thingsdb_lang.c @@ -411,7 +411,7 @@ static int test_thingsdb_lang(void) char buf[262144]; char * str = buf; size_t query_len = strlen(query); - for (i = 0; i < 200; i++) + for (i = 0; i < 20; i++) // max 200 { memcpy(str, query, query_len); str += query_len;