145#define EC_PARSE_NOMATCH INT_MAX
212#define EC_PNODE_GET_ROOT(parse) \
214 const struct ec_pnode *p_ = parse; \
215 struct ec_pnode *pnode_ = (struct ec_pnode *)parse; \
216 __typeof__(parse) res_; \
218 res_ = ec_pnode_get_root(pnode_); \
286#define EC_PNODE_FOREACH_CHILD(child, pnode) \
287 for (child = ec_pnode_get_first_child(pnode); child != NULL; child = ec_pnode_next(child))
401__ec_pnode_iter_next(
const struct ec_pnode *root,
struct ec_pnode *pnode,
bool iter_children);
415#define EC_PNODE_ITER_NEXT(root, parse, iter_children) \
417 const struct ec_pnode *p_ = parse; \
418 struct ec_pnode *pnode_ = (struct ec_pnode *)parse; \
419 __typeof__(parse) res_; \
421 res_ = __ec_pnode_iter_next(root, pnode_, iter_children); \
433#define EC_PNODE_FOREACH(iter, root) \
434 for ((iter) = (root); (iter) != NULL; (iter) = EC_PNODE_ITER_NEXT((root), (iter), true))
struct ec_dict * ec_dict(void)
struct ec_node * ec_node(const char *typename, const char *id)
int ec_parse_child(const struct ec_node *node, struct ec_pnode *pstate, const struct ec_strvec *strvec)
bool ec_pnode_matches(const struct ec_pnode *pnode)
struct ec_pnode * ec_pnode_next(const struct ec_pnode *pnode)
struct ec_pnode * ec_pnode_get_parent(const struct ec_pnode *pnode)
struct ec_dict * ec_pnode_get_attrs(const struct ec_pnode *pnode)
struct ec_pnode * ec_parse(const struct ec_node *node, const char *str)
void ec_pnode_del_last_child(struct ec_pnode *pnode)
void ec_pnode_link_child(struct ec_pnode *pnode, struct ec_pnode *child)
struct ec_pnode * ec_pnode_get_last_child(const struct ec_pnode *pnode)
struct ec_pnode * ec_parse_strvec(const struct ec_node *node, const struct ec_strvec *strvec)
void ec_pnode_dump(FILE *out, const struct ec_pnode *pnode)
void ec_pnode_free(struct ec_pnode *pnode)
const struct ec_strvec * ec_pnode_get_strvec(const struct ec_pnode *pnode)
const struct ec_pnode * ec_pnode_find(const struct ec_pnode *root, const char *id)
struct ec_pnode * ec_pnode_get_root(struct ec_pnode *pnode)
void ec_pnode_free_children(struct ec_pnode *pnode)
void ec_pnode_unlink_child(struct ec_pnode *child)
struct ec_pnode * ec_pnode_get_first_child(const struct ec_pnode *pnode)
const struct ec_pnode * ec_pnode_find_next(const struct ec_pnode *root, const struct ec_pnode *prev, const char *id, bool iter_children)
size_t ec_pnode_len(const struct ec_pnode *pnode)
struct ec_pnode * ec_pnode_dup(const struct ec_pnode *pnode)
const struct ec_node * ec_pnode_get_node(const struct ec_pnode *pnode)
struct ec_pnode * ec_pnode(const struct ec_node *node)
unsigned int ec_pnode_count(const struct ec_pnode *root, const char *id)
struct ec_strvec * ec_strvec(void)