Vcsn  2.0
Be Rational
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
strip.hh
Go to the documentation of this file.
1 #ifndef VCSN_ALGOS_STRIP_HH
2 # define VCSN_ALGOS_STRIP_HH
3 
4 # include <vcsn/dyn/automaton.hh>
5 
6 namespace vcsn
7 {
8  namespace detail
9  {
10  // Rely on the fact that int takes precedence over long to express
11  // a precedence of this first function over the second one.
12 
13  // automata that feature a strip member function.
14  template <typename Aut>
15  inline
16  auto
17  strip(const Aut& aut, int)
18  -> decltype(aut->strip())
19  {
20  return aut->strip();
21  }
22 
23  // automata that don't feature a strip member function.
24  template <typename Aut>
25  inline
26  auto
27  strip(const Aut& aut, long)
28  -> decltype(aut)
29  {
30  return aut;
31  }
32  }
33 
35  template <typename Aut>
36  inline
37  auto
38  strip(const Aut& aut)
39  -> decltype(detail::strip(aut, 0))
40  {
41  return detail::strip(aut, 0);
42  }
43 
44  namespace dyn
45  {
46  namespace detail
47  {
49  template <typename Aut>
50  inline
51  automaton
52  strip(const automaton& aut)
53  {
54  const auto& a = aut->as<Aut>();
55  return make_automaton(::vcsn::strip(a));
56  }
57 
58  REGISTER_DECLARE(strip, (const automaton& a) -> automaton);
59  }
60  }
61 
62 } // vcsn::
63 
64 #endif // !VCSN_ALGOS_STRIP_HH
automaton strip(const automaton &aut)
Bridge.
Definition: strip.hh:52
REGISTER_DECLARE(accessible,(const automaton &) -> automaton)
std::shared_ptr< detail::automaton_base > automaton
Definition: automaton.hh:71
automaton make_automaton(const Aut &aut)
Build a dyn::automaton.
Definition: automaton.hh:77
auto strip(const Aut &aut) -> decltype(detail::strip(aut, 0))
Remove (all) the decorations from a decorated automaton.
Definition: strip.hh:38
auto strip(const Aut &aut, int) -> decltype(aut->strip())
Definition: strip.hh:17