25 template <
typename ExpSet>
32 template <
typename ExpSet>
41 template <
typename ExpSet>
78 template <
typename ExpSetLhs,
typename ExpSetRhs>
82 const auto& l = lhs->as<ExpSetLhs>();
83 const auto&
r = rhs->as<ExpSetRhs>();
84 auto rs =
join(l.expressionset(), r.expressionset());
85 auto lr = rs.conv(l.expressionset(), l.expression());
86 auto rr = rs.conv(r.expressionset(), r.expression());
87 return std::make_tuple(rs, lr, rr);
92 using expression = std::shared_ptr<detail::expression_base>;
94 template <
typename ExpSet>
98 const typename ExpSet::value_t&
r)
101 return std::make_shared<wrapper_t>(
rs,
r);
weightset_mixin< detail::r_impl > r
Provide a variadic mul on top of a binary mul(), and one().
To dyn_cast(From &&from)
A dynamic_cast in debug mode, static_cast with NDEBUG.
const expression_t expression_
The expression.
const expressionset_t & expressionset() const
Aggregate an expression and its expressionset.
const expressionset_t expressionset_
The expression set.
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
virtual symbol vname() const override
A description of the expression type.
auto & as() const
Extract wrapped typed expression.
auto & as()
Extract wrapped typed expression.
const expression_t expression() const
typename expressionset_t::value_t expression_t
std::shared_ptr< detail::expression_base > expression
context join(const context &c1, const context &c2)
Bridge.
expression make_expression(const ExpSet &rs, const typename ExpSet::value_t &r)
expression_wrapper(const expressionset_t &rs, const expression_t &r)