api documentation
[protos/libecoli.git] / include / ecoli_node.h
index acd1daa..38e25e4 100644 (file)
@@ -3,10 +3,13 @@
  */
 
 /**
- * Interface to manage the ecoli nodes.
+ * @defgroup grammar_tree Grammar Tree
+ * @{
  *
- * A node is a main structure of the ecoli library, used to define how
- * to match and complete the input tokens. A node is a generic object
+ * @brief Libecoli grammar nodes.
+ *
+ * The grammar node is a main structure of the ecoli library, used to define
+ * how to match and complete the input tokens. A node is a generic object
  * that implements:
  * - a parse(node, input) method: check if an input matches
  * - a complete(node, input) method: return possible completions for
@@ -46,6 +49,9 @@
 #include <sys/types.h>
 #include <stdio.h>
 
+/**
+ * Node has no identifier.
+ */
 #define EC_NO_ID "no-id"
 
 #define EC_NODE_ENDLIST ((void *)1)
@@ -152,20 +158,6 @@ enum ec_node_free_state {
        EC_NODE_FREE_STATE_FREEING,
 };
 
-struct ec_node {
-       const struct ec_node_type *type;
-       struct ec_config *config;    /**< Generic configuration. */
-       char *id;
-       char *desc;
-       struct ec_dict *attrs;
-       unsigned int refcnt;
-       struct {
-               enum ec_node_free_state state; /**< State of loop detection */
-               unsigned int refcnt;    /**< Number of reachable references
-                                        *   starting from node beeing freed */
-       } free; /**< Freeing state: used for loop detection */
-};
-
 /* create a new node when the type is known, typically called from the node
  * code */
 struct ec_node *ec_node_from_type(const struct ec_node_type *type, const char *id);
@@ -203,4 +195,18 @@ struct ec_node *ec_node_find(struct ec_node *node, const char *id);
 int ec_node_check_type(const struct ec_node *node,
                const struct ec_node_type *type);
 
+const char *ec_node_get_type_name(const struct ec_node *node);
+
+/**
+ * Get the pointer to the node private area.
+ *
+ * @param node
+ *   The grammar node.
+ * @return
+ *   The pointer to the node private area.
+ */
+void *ec_node_priv(const struct ec_node *node);
+
 #endif
+
+ /** @} */