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