12#ifndef __cxz_xpr_base_h__
13#define __cxz_xpr_base_h__
28 inline Xpr&
THIS() {
return static_cast<Xpr&
>(*this); }
29 inline const Xpr&
THIS()
const {
return static_cast<const Xpr&
>(*this); }
32 constexpr decltype(
auto)
operator()(
const PosT&
last)
const {
return THIS()(
last); }
34 constexpr decltype(
auto)
operator()()
const {
return THIS()(); }
55 template <
typename T,
class Xpr>
80 explicit DXpr(
const Xpr& a);
82 inline T operator()(
const DPos&
last)
const;
83 inline T operator()()
const;
92 static constexpr bool value = std::is_base_of<XprInterface<X>,X>::value;
ObjHandle< VXprBase< T > > VB
virtual ~VXprBase()=default
virtual Uptr< VXprBase< T > > copy() const =0
DEFAULT_MEMBERS(VXprBase)
virtual DPos vrootSteps(const IndexId< 0 > &id) const =0
virtual T vexec(const DPos &last) const =0
virtual T vexec() const =0
virtual T vexec() const override final
virtual Uptr< VXprBase< T > > copy() const override final
virtual DPos vrootSteps(const IndexId< 0 > &id) const override final
VXpr(const XprInterface< Xpr > &a)
DEFAULT_MEMBERS(XprInterface)
constexpr decltype(auto) rootSteps(const IndexId< I > &id) const
Index ID type declarations.
std::unique_ptr< T > Uptr
Sptr< Range > rangeCast(const RangePtr r)
Position types declarations.