]>
git.proxmox.com Git - mirror_frr.git/blob - lib/command_graph.h
1 #ifndef COMMAND_GRAPH_H
2 #define COMMAND_GRAPH_H
25 enum graph_node_type type
;// data type this node matches or holds
26 int is_start
; // whether this node is a start node
27 vector children
; // this node's children
28 struct graph_node
* end
; // pointer to end for SELECTOR_GN & OPTION_GN
30 char* text
; // for WORD_GN and VARIABLE_GN
31 long value
; // for NUMBER_GN
32 long min
, max
; // for RANGE_GN
34 /* cmd_element struct pointer, only valid for END_GN */
35 struct cmd_element
*element
;
36 /* used for passing arguments to command functions */
39 /* refcount for node parents */
44 * Adds a node as a child of another node.
45 * If the new parent has a child that is equal to the prospective child, as
46 * determined by cmp_node, then a pointer to the existing node is returned and
47 * the prospective child is not added. Otherwise the child node is returned.
49 * @param[in] parent node
50 * @param[in] child node
51 * @return pointer to child if it is added, pointer to existing child otherwise
54 add_node(struct graph_node
*, struct graph_node
*);
57 * Compares two nodes for parsing equivalence.
58 * Equivalence in this case means that a single user input token
59 * should be able to unambiguously match one of the two nodes.
60 * For example, two nodes which have all fields equal except their
61 * function pointers would be considered equal.
63 * @param[in] first node to compare
64 * @param[in] second node to compare
65 * @return 1 if equal, zero otherwise.
68 cmp_node(struct graph_node
*, struct graph_node
*);
72 * Initializes all fields to default values and sets the node type.
74 * @param[in] node type
75 * @return pointer to the newly allocated node
78 new_node(enum graph_node_type
);
81 * Frees the data associated with a graph_node.
82 * @param[out] pointer to graph_node to free
85 free_node(struct graph_node
*);
88 * Recursively calls free_node on a graph node
89 * and all its children.
90 * @param[out] graph to free
93 free_graph(struct graph_node
*);
96 * Walks a command DFA, printing structure to stdout.
99 * @param[in] start node of graph to walk
100 * @param[in] graph depth for recursion, caller passes 0
103 walk_graph(struct graph_node
*, int);
106 * Returns a string representation of the given node.
107 * @param[in] the node to describe
108 * @param[out] the buffer to write the description into
109 * @return pointer to description string
112 describe_node(struct graph_node
*, char *, unsigned int);
115 dump_node (struct graph_node
*);