Vcsn  2.2
Be Rational
fwd.hh
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory> // shared_ptr
4 
5 #include <vcsn/core/automaton.hh> // Automaton
6 
7 namespace vcsn
8 {
9  namespace dyn
10  {
11  namespace detail
12  {
14  template <typename To, typename From>
15  inline
16  To dyn_cast(From&& from)
17  {
18 #ifdef NDEBUG
19  return static_cast<To>(std::forward<From>(from));
20 #else
21  return dynamic_cast<To>(std::forward<From>(from));
22 #endif
23  }
24  }
25 
26  // vcsn/dyn/automaton.hh.
27  namespace detail
28  {
29  class automaton_base;
30  template <Automaton Aut>
31  class automaton_wrapper;
32  }
33  using automaton = std::shared_ptr<detail::automaton_base>;
34 
35  // vcsn/dyn/context.hh.
36  namespace detail
37  {
38  class context_base;
39  template <typename Context>
40  class context_wrapper;
41  }
43  using context = std::shared_ptr<const detail::context_base>;
44 
45  // vcsn/dyn/expansion.hh.
46  namespace detail
47  {
48  class expansion_base;
49  template <typename ExpansionSet>
50  class expansion_wrapper;
51  }
52  using expansion = std::shared_ptr<const detail::expansion_base>;
53 
54  // vcsn/dyn/label.hh.
55  namespace detail
56  {
57  class label_base;
58  template <typename LabelSet>
60  }
61  using label = std::shared_ptr<const detail::label_base>;
62 
63  // vcsn/dyn/polynomial.hh.
64  namespace detail
65  {
66  class polynomial_base;
67  template <typename PolynomialSet>
69  }
70  using polynomial = std::shared_ptr<const detail::polynomial_base>;
71 
72  // vcsn/dyn/expression.hh.
73  namespace detail
74  {
75  class expression_base;
76  template <typename ExpSet>
77  class expression_wrapper;
78  }
79  using expression = std::shared_ptr<detail::expression_base>;
80 
81  // vcsn/dyn/weight.hh.
82  namespace detail
83  {
84  class weight_base;
85  template <typename WeightSet>
87  }
88  using weight = std::shared_ptr<const detail::weight_base>;
89  }
90 
91  // vcsn/dyn/type-ast.hh.
92  namespace ast
93  {
94  class ast_node;
95  class automaton;
96  class context;
97  class expansionset;
98  class expressionset;
99  class genset;
100  class letterset;
101  class nullableset;
102  class oneset;
103  class other;
104  class polynomialset;
105  class tuple;
106  class tupleset;
107  class weightset;
108  class wordset;
109  }
110 } // namespace vcsn
ValueSet::value_t tuple(const ValueSet &vs, const typename ValueSets::value_t &...v)
Definition: tuple.hh:43
Aggregate a label and its labelset.
Definition: fwd.hh:59
Implementation of labels are words.
Definition: fwd.hh:36
std::shared_ptr< const detail::polynomial_base > polynomial
Definition: fwd.hh:70
Aggregate a weight and its weightset.
Definition: fwd.hh:86
std::shared_ptr< const detail::weight_base > weight
Definition: fwd.hh:88
Implementation of labels are nullables (letter or empty).
Definition: fwd.hh:15
Definition: a-star.hh:8
std::shared_ptr< const detail::expansion_base > expansion
Definition: expansion.hh:73
Provide a variadic mul on top of a binary mul(), and one().
Definition: fwd.hh:46
To dyn_cast(From &&from)
A dynamic_cast in debug mode, static_cast with NDEBUG.
Definition: fwd.hh:16
std::shared_ptr< const detail::label_base > label
Definition: fwd.hh:61
std::shared_ptr< const detail::context_base > context
A dyn::context.
Definition: fwd.hh:43
std::shared_ptr< detail::automaton_base > automaton
Definition: automaton.hh:69
Aggregate a polynomial and its polynomialset.
Definition: fwd.hh:68
Implementation of labels are ones: there is a single instance of label.
Definition: oneset.hh:16
Implementation of labels are letters.
Definition: fwd.hh:11
std::shared_ptr< detail::expression_base > expression
Definition: expression.hh:92