git.droids-corp.org
/
protos
/
libecoli.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
save
[protos/libecoli.git]
/
lib
/
ecoli_node_many.c
diff --git
a/lib/ecoli_node_many.c
b/lib/ecoli_node_many.c
index
7e1582c
..
b40b3bd
100644
(file)
--- a/
lib/ecoli_node_many.c
+++ b/
lib/ecoli_node_many.c
@@
-43,6
+43,8
@@
#include <ecoli_node_option.h>
#include <ecoli_node_many.h>
#include <ecoli_node_option.h>
#include <ecoli_node_many.h>
+EC_LOG_TYPE_REGISTER(node_many);
+
struct ec_node_many {
struct ec_node gen;
unsigned int min;
struct ec_node_many {
struct ec_node gen;
unsigned int min;
@@
-100,29
+102,24
@@
fail:
return ret;
}
return ret;
}
-static
struct ec_completed *
+static
int
__ec_node_many_complete(struct ec_node_many *node, unsigned int max,
__ec_node_many_complete(struct ec_node_many *node, unsigned int max,
- struct ec_parsed *state, const struct ec_strvec *strvec)
+ struct ec_completed *completed,
+ struct ec_parsed *parsed,
+ const struct ec_strvec *strvec)
{
{
- struct ec_completed *completed, *child_completed;
struct ec_strvec *childvec = NULL;
unsigned int i;
int ret;
struct ec_strvec *childvec = NULL;
unsigned int i;
int ret;
- completed = ec_completed();
- if (completed == NULL)
- return NULL;
-
/* first, try to complete with the child node */
/* first, try to complete with the child node */
-
child_completed = ec_node_complete_child(node->child, state
, strvec);
- if (
child_completed == NULL
)
+
ret = ec_node_complete_child(node->child, completed, parsed
, strvec);
+ if (
ret < 0
)
goto fail;
goto fail;
- ec_completed_merge(completed, child_completed);
- child_completed = NULL;
/* we're done, we reached the max number of nodes */
if (max == 1)
/* we're done, we reached the max number of nodes */
if (max == 1)
- return
completed
;
+ return
0
;
/* if there is a maximum, decrease it before recursion */
if (max != 0)
/* if there is a maximum, decrease it before recursion */
if (max != 0)
@@
-135,7
+132,7
@@
__ec_node_many_complete(struct ec_node_many *node, unsigned int max,
if (childvec == NULL)
goto fail;
if (childvec == NULL)
goto fail;
- ret = ec_node_parse_child(node->child,
state
, childvec);
+ ret = ec_node_parse_child(node->child,
parsed
, childvec);
if (ret < 0 && ret != EC_PARSED_NOMATCH)
goto fail;
if (ret < 0 && ret != EC_PARSED_NOMATCH)
goto fail;
@@
-144,46
+141,43
@@
__ec_node_many_complete(struct ec_node_many *node, unsigned int max,
if ((unsigned int)ret != i) {
if (ret != EC_PARSED_NOMATCH)
if ((unsigned int)ret != i) {
if (ret != EC_PARSED_NOMATCH)
- ec_parsed_del_last_child(
state
);
+ ec_parsed_del_last_child(
parsed
);
continue;
}
childvec = ec_strvec_ndup(strvec, i, ec_strvec_len(strvec) - i);
if (childvec == NULL) {
continue;
}
childvec = ec_strvec_ndup(strvec, i, ec_strvec_len(strvec) - i);
if (childvec == NULL) {
- ec_parsed_del_last_child(
state
);
+ ec_parsed_del_last_child(
parsed
);
goto fail;
}
goto fail;
}
-
child_completed = __ec_node_many_complete(node, max
,
-
state
, childvec);
- ec_parsed_del_last_child(
state
);
+
ret = __ec_node_many_complete(node, max, completed
,
+
parsed
, childvec);
+ ec_parsed_del_last_child(
parsed
);
ec_strvec_free(childvec);
childvec = NULL;
ec_strvec_free(childvec);
childvec = NULL;
- if (
child_completed == NULL
)
+ if (
ret < 0
)
goto fail;
goto fail;
-
- ec_completed_merge(completed, child_completed);
- child_completed = NULL;
}
}
- return
completed
;
+ return
0
;
fail:
ec_strvec_free(childvec);
fail:
ec_strvec_free(childvec);
- ec_completed_free(child_completed);
- ec_completed_free(completed);
- return NULL;
+ return -1;
}
}
-static
struct ec_completed *
+static
int
ec_node_many_complete(const struct ec_node *gen_node,
ec_node_many_complete(const struct ec_node *gen_node,
- struct ec_parsed *state,
+ struct ec_completed *completed,
+ struct ec_parsed *parsed,
const struct ec_strvec *strvec)
{
struct ec_node_many *node = (struct ec_node_many *)gen_node;
const struct ec_strvec *strvec)
{
struct ec_node_many *node = (struct ec_node_many *)gen_node;
- return __ec_node_many_complete(node, node->max, state, strvec);
+ return __ec_node_many_complete(node, node->max, completed,
+ parsed, strvec);
}
static void ec_node_many_free_priv(struct ec_node *gen_node)
}
static void ec_node_many_free_priv(struct ec_node *gen_node)
@@
-232,7
+226,7
@@
static int ec_node_many_testcase(void)
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 0, 0);
if (node == NULL) {
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 0, 0);
if (node == NULL) {
-
ec_log
(EC_LOG_ERR, "cannot create node\n");
+
EC_LOG
(EC_LOG_ERR, "cannot create node\n");
return -1;
}
ret |= EC_TEST_CHECK_PARSE(node, 0);
return -1;
}
ret |= EC_TEST_CHECK_PARSE(node, 0);
@@
-244,7
+238,7
@@
static int ec_node_many_testcase(void)
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 1, 0);
if (node == NULL) {
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 1, 0);
if (node == NULL) {
-
ec_log
(EC_LOG_ERR, "cannot create node\n");
+
EC_LOG
(EC_LOG_ERR, "cannot create node\n");
return -1;
}
ret |= EC_TEST_CHECK_PARSE(node, -1, "bar");
return -1;
}
ret |= EC_TEST_CHECK_PARSE(node, -1, "bar");
@@
-255,7
+249,7
@@
static int ec_node_many_testcase(void)
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 1, 2);
if (node == NULL) {
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 1, 2);
if (node == NULL) {
-
ec_log
(EC_LOG_ERR, "cannot create node\n");
+
EC_LOG
(EC_LOG_ERR, "cannot create node\n");
return -1;
}
ret |= EC_TEST_CHECK_PARSE(node, -1, "bar");
return -1;
}
ret |= EC_TEST_CHECK_PARSE(node, -1, "bar");
@@
-268,37
+262,30
@@
static int ec_node_many_testcase(void)
/* test completion */
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 2, 4);
if (node == NULL) {
/* test completion */
node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 2, 4);
if (node == NULL) {
-
ec_log
(EC_LOG_ERR, "cannot create node\n");
+
EC_LOG
(EC_LOG_ERR, "cannot create node\n");
return -1;
}
ret |= EC_TEST_CHECK_COMPLETE(node,
"", EC_NODE_ENDLIST,
return -1;
}
ret |= EC_TEST_CHECK_COMPLETE(node,
"", EC_NODE_ENDLIST,
- "foo", EC_NODE_ENDLIST,
- "foo");
+ "foo", EC_NODE_ENDLIST);
ret |= EC_TEST_CHECK_COMPLETE(node,
"f", EC_NODE_ENDLIST,
ret |= EC_TEST_CHECK_COMPLETE(node,
"f", EC_NODE_ENDLIST,
- "oo", EC_NODE_ENDLIST,
- "oo");
+ "foo", EC_NODE_ENDLIST);
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", EC_NODE_ENDLIST,
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", EC_NODE_ENDLIST,
- "", EC_NODE_ENDLIST,
- "");
+ "foo", EC_NODE_ENDLIST);
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "", EC_NODE_ENDLIST,
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "", EC_NODE_ENDLIST,
- "foo", EC_NODE_ENDLIST,
- "foo");
+ "foo", EC_NODE_ENDLIST);
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "", EC_NODE_ENDLIST,
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "", EC_NODE_ENDLIST,
- "foo", EC_NODE_ENDLIST,
- "foo");
+ "foo", EC_NODE_ENDLIST);
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "foo", "", EC_NODE_ENDLIST,
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "foo", "", EC_NODE_ENDLIST,
- "foo", EC_NODE_ENDLIST,
- "foo");
+ "foo", EC_NODE_ENDLIST);
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "foo", "foo", "", EC_NODE_ENDLIST,
ret |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "foo", "foo", "", EC_NODE_ENDLIST,
- EC_NODE_ENDLIST,
- "");
+ EC_NODE_ENDLIST);
ec_node_free(node);
return ret;
ec_node_free(node);
return ret;