17 #ifndef VCSN_ALGORITHMS_INTERNAL_BUILD_PATTERN_HH
18 # define VCSN_ALGORITHMS_INTERNAL_BUILD_PATTERN_HH
21 # include <vaucanson/automata/concept/automata_base.hh>
23 # include <vaucanson/misc/usual_macros.hh>
26 namespace algorithm_patterns
31 template <
typename Self,
typename Etiq>
34 bool operator()(
const Etiq& e1,
const Etiq& e2)
const;
48 template <
typename Self,
typename T_auto,
typename Etiq>
49 class IncAutomataConstructor
53 typedef T_auto* T_auto_p;
54 AUTOMATON_TYPES(T_auto);
55 AUTOMATON_FREEMONOID_TYPES(T_auto);
60 std::pair<hstate_t, bool> StateMarked;
62 std::map<Etiq, StateMarked, Comparator<Self, Etiq> > StateMap;
63 typedef typename StateMap::iterator iterator;
71 static bool compare(
const Etiq& e1,
const Etiq& e2);
74 IncAutomataConstructor(
const series_set_t& series,
const Etiq& etiq);
75 IncAutomataConstructor(
const series_set_t& series,
76 const std::list<Etiq>& listexp);
78 void link_to(
const Etiq& etiq,
const letter_t& l);
79 void link_to(
const Etiq& etiq,
const series_set_elt_t& el);
82 void set_final(
const series_set_elt_t& el);
85 void on_state_caller(
const Etiq& e);
87 hstate_t add_state(
const Etiq& etiq);
92 iterator current_state;
106 template <
typename Self,
typename T_auto,
typename Etiq>
107 class MathAutomataConstructor
111 AUTOMATON_TYPES(T_auto);
112 AUTOMATON_FREEMONOID_TYPES(T_auto);
113 typedef T_auto* T_auto_p;
114 typedef std::map<Etiq, hstate_t, Comparator<Self, Etiq> > StateMap;
115 typedef typename StateMap::iterator iterator;
120 T_auto_p
get()
const;
123 static bool compare(
const Etiq& e1,
const Etiq& e2);
126 template <
typename Container>
127 MathAutomataConstructor(
const series_set_t& series,
128 const Container container);
131 bool is_initial_caller(
const Etiq& e)
const;
132 bool is_final_caller(
const Etiq& e)
const;
134 template <
typename Container>
135 void link_to(
const hstate_t& state,
136 const letter_t& letter,
137 const Container container);
147 # if !defined VCSN_USE_INTERFACE_ONLY && !defined VCSN_USE_LIB
148 #include <vaucanson/algorithms/internal/build_pattern.hxx>
149 #endif // VCSN_USE_INTERFACE_ONLY
152 #endif // ! VCSN_ALGORITHMS_INTERNAL_BUILD_PATTERN_HH