13 template <
typename ExpSet>
14 typename ExpSet::value_t
15 transpose(
const ExpSet& rs,
const typename ExpSet::value_t&
v);
26 template <
typename ExpSet>
28 :
public ExpSet::const_visitor
33 using super_t =
typename expressionset_t::const_visitor;
38 constexpr
static const char*
me() {
return "transpose"; }
50 return std::move(
res_);
77 res_ =
rs_.atom(
rs_.labelset()->transpose(e.value()));
90 template <rat::type_t Type>
94 template <rat::type_t Type>
98 for (
const auto& c: v.
tail())
103 #define DEFINE(Node) \ 104 VCSN_RAT_VISIT(Node, e) \ 106 visit_(e, &expressionset_t::Node); \ 119 for (
const auto& c: e.tail())
154 res_ =
rs_.transposition(e.shared_from_this());
161 res_ =
rs_.transposition(e.shared_from_this());
167 rs_.weightset()->transpose(e.weight()));
172 res_ =
rs_.lweight(
rs_.weightset()->transpose(e.weight()),
182 template <
typename Dummy =
void>
190 std::get<I>(v.sub()));
194 template <
size_t... I>
197 return self_.
rs_.tuple(work_<I>(v)...);
210 detail::static_if<context_t::is_lat>
221 template <
typename ExpSet>
222 typename ExpSet::value_t
223 transpose(
const ExpSet& rs,
const typename ExpSet::value_t&
v)
Aut transpose(const transpose_automaton< Aut > &aut)
The transpose of a transpose automaton is the original automaton.
typename expressionset_t::value_t expression_t
VCSN_RAT_VISIT(transposition, e)
VCSN_RAT_VISIT(complement, e)
VCSN_RAT_VISIT(ldivide, e)
transpose_impl(const expressionset_t &rs)
expression_t transpose(const expression_t &e)
Easy recursion.
expression_t(expressionset_t::*)(const expression_t &, const expression_t &) const binary_t
Binary member functions of the expressionset.
An inner node with multiple children.
static constexpr const char * me()
Name of this algorithm, for error messages.
typename expressionset_t::const_visitor super_t
context_t_of< expressionset_t > context_t
auto work_(const tuple_t &v, detail::index_sequence< I... >)
Copy all the tapes.
VCSN_RAT_VISIT(lweight, e)
typename detail::context_t_of_impl< base_t< ValueSet > >::type context_t_of
void visit(const tuple_t &v, std::true_type) override
A visitor to create a transposed expression,.
const value_t head() const
The first item of this variadic.
typename detail::labelset_t_of_impl< base_t< ValueSet > >::type labelset_t_of
auto operator()(const tuple_t &v)
Entry point.
auto conjunction(const Aut &a, const Auts &... as)
Build the (accessible part of the) conjunction.
auto work_(const tuple_t &v)
Copy one tape.
VCSN_RAT_VISIT(rweight, e)
void swap(config::value &first, config::value &second)
expression_t operator()(const expression_t &e)
An expression denoting the transposition of e.
void visit_(const variadic_t< Type > &v, binary_t f)
Factor the visitation of "commutative" variadic nodes.
#define DEFINE(Node)
Handle variadic operations.
typename super_t::tuple_t tuple_t
auto tail() const -> decltype(boost::make_iterator_range(*this, 1, 0))
The non-first items.