12#ifndef __cxz_vpos_type_cc_h__
13#define __cxz_vpos_type_cc_h__
32 return std::make_unique<VPos<PosT>>(*this);
63 return std::make_unique<VPos<OPosT>>((*this) +
UPos(a->
vval()));
70 return std::make_unique<VPos<OPosT>>((*this) *
UPos(a->
vval()));
77 return std::make_unique<VPos<OPosT>>( (*this)(
UPos(a->
vval())) );
84 template <
class PosT1,
class PosT2>
94 template <
class PosT1,
class PosT2>
105 template <
class PosT1,
class PosT2>
115 template <
class PosT1,
class PosT2>
118 return std::make_unique<VPos<MPos<PosT1,PosT2>>>(*this);
121 template <
class PosT1,
class PosT2>
127 template <
class PosT1,
class PosT2>
133 template <
class PosT1,
class PosT2>
139 template <
class PosT1,
class PosT2>
146 return this->next().get();
150 template <
class PosT1,
class PosT2>
157 template <
class PosT1,
class PosT2>
161 return std::make_unique<VPos<OPosT>>((*this) *
UPos(a->
vval()));
164 template <
class PosT1,
class PosT2>
168 return std::make_unique<VPos<OPosT>>( (*this)(
UPos(a->
vval())) );
175 template <
class PosT>
180 template <
class PosT>
183 return std::make_unique<VPos<PosT>>(*mC);
186 template <
class PosT>
192 template <
class PosT>
198 template <
class PosT>
204 template <
class PosT>
210 template <
class PosT>
214 return std::make_unique<VPos<OPosT>>((*mC) +
UPos(a->
vval()));
217 template <
class PosT>
221 return std::make_unique<VPos<OPosT>>((*mC) *
UPos(a->
vval()));
224 template <
class PosT>
228 return std::make_unique<VPos<OPosT>>( (*mC)(
UPos(a->
vval())) );
235 template <
class PosT1,
class PosT2>
245 template <
class PosT1,
class PosT2>
248 return std::make_unique<VPos<MPos<PosT1,PosT2>>>(*mC);
251 template <
class PosT1,
class PosT2>
257 template <
class PosT1,
class PosT2>
263 template <
class PosT1,
class PosT2>
269 template <
class PosT1,
class PosT2>
276 return mC->next().get();
280 template <
class PosT1,
class PosT2>
287 template <
class PosT1,
class PosT2>
291 return std::make_unique<VPos<OPosT>>((*mC) *
UPos(a->
vval()));
294 template <
class PosT1,
class PosT2>
298 return std::make_unique<VPos<OPosT>>( (*mC)(
UPos(a->
vval())) );
305 template <
class PosT>
308 return PosT(a->
vval());
311 template <
class PosT1,
class PosT2>
315 CXZ_ASSERT(a->
vnext() !=
nullptr,
"VPos does not match required size");
#define CXZ_ASSERT(statement, errmsg)
constexpr const NPosT & next() const
virtual SizeT vval() const =0
virtual const VPosBase * vnext() const =0
virtual SizeT vval() const override final
virtual Uptr< VPosBase > vexec(const VPosBase *a) const override final
virtual Uptr< VPosBase > vplus(const VPosBase *a) const override final
virtual Uptr< VPosBase > vtimes(const VPosBase *a) const override final
virtual const VPosBase * vget() const override final
virtual SizeT vsize() const override final
virtual Uptr< VPosBase > copy() const override final
virtual const VPosBase * vnext() const override final
virtual const VPosBase * vget() const override final
virtual Uptr< VPosBase > vtimes(const VPosBase *a) const override final
virtual Uptr< VPosBase > vplus(const VPosBase *a) const override final
virtual SizeT vval() const override final
virtual Uptr< VPosBase > copy() const override final
virtual Uptr< VPosBase > vexec(const VPosBase *a) const override final
virtual SizeT vsize() const override final
virtual const VPosBase * vnext() const override final
#define IS_NOT_SAME(a, b)
std::unique_ptr< T > Uptr
Sptr< Range > rangeCast(const RangePtr r)
Position types declarations.
Dynamic position types declarations.