Implements noalias/evaluate

See merge request oss/rotgen!18
This commit is contained in:
Joel Falcou 2025-09-09 15:21:35 +02:00
parent 1f8663aad2
commit cc5ab775bc
9 changed files with 181 additions and 2 deletions

View file

@ -73,9 +73,36 @@ namespace rotgen
: map( ptr, RowsAtCompileTime, ColsAtCompileTime )
{}
map(concepts::entity auto const& other) : parent(other.base())
{}
map& operator=(concepts::entity auto const& other)
{
parent::operator=(other.base());
return *this;
}
parent& base() { return static_cast<parent&>(*this); }
parent const& base() const { return static_cast<const parent&>(*this); }
auto evaluate() const
{
auto res = static_cast<parent const &>(*this).eval();
return as_concrete_type<decltype(res)>(res);
}
decltype(auto) noalias() const
{
if constexpr(use_expression_templates) return base().noalias();
else return *this;
}
decltype(auto) noalias()
{
if constexpr(use_expression_templates) return base().noalias();
else return *this;
}
value_type& operator()(Index i, Index j) { return base()(i, j); }
value_type operator()(Index i, Index j) const { return base()(i, j); }