- use constants for delays
[oweals/gnunet.git] / src / regex / regex_internal.h
index 49e5dd0221773b664009b60fbe7e3a3dd9ec026c..00badc54d81101d6649425265102dd58767354a3 100644 (file)
@@ -19,7 +19,7 @@
 */
 /**
  * @file src/regex/regex_internal.h
- * @brief common internal definitions for regex library
+ * @brief common internal definitions for regex library.
  * @author Maximilian Szengel
  */
 #ifndef REGEX_INTERNAL_H
@@ -43,8 +43,9 @@ extern "C"
 
 
 /**
- * Transition between two states. Each state can have 0-n transitions.  If label
- * is 0, this is considered to be an epsilon transition.
+ * Transition between two states. Transitions are stored at the states from
+ * which they origin ('from_state'). Each state can have 0-n transitions.
+ * If label is NULL, this is considered to be an epsilon transition.
  */
 struct GNUNET_REGEX_Transition
 {
@@ -80,21 +81,69 @@ struct GNUNET_REGEX_Transition
 };
 
 
+/**
+ * A state. Can be used in DFA and NFA automatons.
+ */
+struct GNUNET_REGEX_State;
+
+
+/**
+ * Set of states.
+ */
+struct GNUNET_REGEX_StateSet
+{
+  /**
+   * Array of states.
+   */
+  struct GNUNET_REGEX_State **states;
+
+  /**
+   * Number of entries in *use* in the 'states' array.
+   */
+  unsigned int off;
+
+  /**
+   * Length of the 'states' array.
+   */
+  unsigned int size;
+};
+
+
 /**
  * A state. Can be used in DFA and NFA automatons.
  */
 struct GNUNET_REGEX_State
 {
   /**
-   * This is a linked list.
+   * This is a linked list to keep states in an automaton.
    */
   struct GNUNET_REGEX_State *prev;
 
   /**
-   * This is a linked list.
+   * This is a linked list to keep states in an automaton.
    */
   struct GNUNET_REGEX_State *next;
 
+  /**
+   * This is a multi DLL for StateSet_MDLL.
+   */
+  struct GNUNET_REGEX_State *prev_SS;
+
+  /**
+   * This is a multi DLL for StateSet_MDLL.
+   */
+  struct GNUNET_REGEX_State *next_SS;
+
+  /**
+   * This is a multi DLL for StateSet_MDLL Stack.
+   */
+  struct GNUNET_REGEX_State *prev_ST;
+
+  /**
+   * This is a multi DLL for StateSet_MDLL Stack.
+   */
+  struct GNUNET_REGEX_State *next_ST;
+
   /**
    * Unique state id.
    */
@@ -189,7 +238,7 @@ struct GNUNET_REGEX_State
    * Set of states on which this state is based on. Used when creating a DFA out
    * of several NFA states.
    */
-  struct GNUNET_REGEX_StateSet *nfa_set;
+  struct GNUNET_REGEX_StateSet nfa_set;
 };
 
 
@@ -266,6 +315,18 @@ struct GNUNET_REGEX_Automaton
 };
 
 
+/**
+ * Construct an NFA by parsing the regex string of length 'len'.
+ *
+ * @param regex regular expression string.
+ * @param len length of the string.
+ *
+ * @return NFA, needs to be freed using GNUNET_REGEX_automaton_destroy.
+ */
+struct GNUNET_REGEX_Automaton *
+GNUNET_REGEX_construct_nfa (const char *regex, const size_t len);
+
+
 /**
  * Function that get's passed to automaton traversal and is called before each
  * next traversal from state 's' using transition 't' to check if traversal