more on DPos/VPos
This commit is contained in:
parent
ed6c90b95c
commit
459ea690e5
5 changed files with 151 additions and 83 deletions
|
@ -69,6 +69,12 @@ namespace CNORXZ
|
||||||
return MPos<SPos<N>,PosT>(*this,a);
|
return MPos<SPos<N>,PosT>(*this,a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <SizeT N>
|
||||||
|
constexpr SPos<N>::operator UPos() const
|
||||||
|
{
|
||||||
|
return UPos(N);
|
||||||
|
}
|
||||||
|
|
||||||
/************
|
/************
|
||||||
* UPos *
|
* UPos *
|
||||||
************/
|
************/
|
||||||
|
@ -315,20 +321,32 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos::DPos(const PosT& a) :
|
inline DPos::DPos(const PosT& a) :
|
||||||
ObjHandle<VPosBase>(std::make_unique<VPos<PosT>>(a))
|
ObjHandle<VPosBase>
|
||||||
|
(std::make_unique<VPos<typename std::remove_reference<PosT>::type>>(a))
|
||||||
{
|
{
|
||||||
static_assert(is_pos_type<PosT>::value,
|
static_assert(is_pos_type<typename std::remove_reference<PosT>::type>::value,
|
||||||
"DPos can only be constructed from pos types");
|
"DPos can only be constructed from pos types");
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos::DPos(PosT&& a) :
|
inline DPos::DPos(PosT&& a) :
|
||||||
ObjHandle<VPosBase>(std::make_unique<VPos<PosT>>(a))
|
ObjHandle<VPosBase>
|
||||||
|
(std::make_unique<VPos<typename std::remove_reference<PosT>::type>>(a))
|
||||||
{
|
{
|
||||||
static_assert(is_pos_type<PosT>::value,
|
static_assert(is_pos_type<typename std::remove_reference<PosT>::type>::value,
|
||||||
"DPos can only be constructed from pos types");
|
"DPos can only be constructed from pos types");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline const VPosBase* DPos::get() const
|
||||||
|
{
|
||||||
|
return mC->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool DPos::F() const
|
||||||
|
{
|
||||||
|
return mC->F();
|
||||||
|
}
|
||||||
|
|
||||||
inline SizeT DPos::size() const
|
inline SizeT DPos::size() const
|
||||||
{
|
{
|
||||||
return mC->vsize();
|
return mC->vsize();
|
||||||
|
@ -376,6 +394,16 @@ namespace CNORXZ
|
||||||
|
|
||||||
inline DPosRef::DPosRef(const VPosBase* p) : mP(p) {}
|
inline DPosRef::DPosRef(const VPosBase* p) : mP(p) {}
|
||||||
|
|
||||||
|
inline const VPosBase* DPosRef::get() const
|
||||||
|
{
|
||||||
|
return mP->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool DPosRef::F() const
|
||||||
|
{
|
||||||
|
return mP->F();
|
||||||
|
}
|
||||||
|
|
||||||
inline SizeT DPosRef::size() const
|
inline SizeT DPosRef::size() const
|
||||||
{
|
{
|
||||||
return mP->vsize();
|
return mP->vsize();
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
constexpr auto extend(const PosT& a) const;
|
constexpr auto extend(const PosT& a) const;
|
||||||
|
|
||||||
|
explicit constexpr operator UPos() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class UPos
|
class UPos
|
||||||
|
@ -167,6 +169,8 @@ namespace CNORXZ
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline explicit DPos(PosT&& a);
|
inline explicit DPos(PosT&& a);
|
||||||
|
|
||||||
|
inline const VPosBase* get() const;
|
||||||
|
inline bool F() const;
|
||||||
inline SizeT size() const;
|
inline SizeT size() const;
|
||||||
inline SizeT val() const;
|
inline SizeT val() const;
|
||||||
inline DPosRef next() const;
|
inline DPosRef next() const;
|
||||||
|
@ -194,7 +198,9 @@ namespace CNORXZ
|
||||||
DEFAULT_MEMBERS(DPosRef);
|
DEFAULT_MEMBERS(DPosRef);
|
||||||
|
|
||||||
explicit DPosRef(const VPosBase* p);
|
explicit DPosRef(const VPosBase* p);
|
||||||
|
|
||||||
|
inline const VPosBase* get() const;
|
||||||
|
inline bool F() const;
|
||||||
inline SizeT size() const;
|
inline SizeT size() const;
|
||||||
inline SizeT val() const;
|
inline SizeT val() const;
|
||||||
inline DPosRef next() const;
|
inline DPosRef next() const;
|
||||||
|
|
|
@ -11,17 +11,57 @@ namespace CNORXZ
|
||||||
****************/
|
****************/
|
||||||
|
|
||||||
template <SizeT N>
|
template <SizeT N>
|
||||||
Uptr<VPosBase> VPosBase::vextend(const SPos<N>& a) const
|
inline Uptr<VPosBase> VPosBase::vextend(const SPos<N>& a) const
|
||||||
{
|
{
|
||||||
return this->vextend(UPos(N));
|
return this->vextend(UPos(N));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT N, SizeT... Ms>
|
template <SizeT N, SizeT... Ms>
|
||||||
Uptr<VPosBase> VPosBase::vextend(const SFPos<N,Ms...>& a) const
|
inline Uptr<VPosBase> VPosBase::vextend(const SFPos<N,Ms...>& a) const
|
||||||
{
|
{
|
||||||
return this->vextend(static_cast<FPos>(a));
|
return this->vextend(static_cast<FPos>(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class PosT1, class PosT2>
|
||||||
|
inline Uptr<VPosBase> VPosBase::vextend(const MPos<PosT1,PosT2>& a) const
|
||||||
|
{
|
||||||
|
return this->vextend(static_cast<const PosT1&>(a))->vextend(a.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Uptr<VPosBase> vextend(const DPos& a) const
|
||||||
|
{
|
||||||
|
Uptr out = nullptr;
|
||||||
|
if(a.F()){
|
||||||
|
out = this->vextend(dynamic_cast<const FPos*>(a.get()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out = this->vextend(dynamic_cast<const UPos*>(a.get()));
|
||||||
|
}
|
||||||
|
if(a.size() > 1){
|
||||||
|
return out->vextend(a.next());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Uptr<VPosBase> vextend(const DPosRef& a) const
|
||||||
|
{
|
||||||
|
Uptr out = nullptr;
|
||||||
|
if(a.F()){
|
||||||
|
out = this->vextend(dynamic_cast<const FPos*>(a.get()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
out = this->vextend(dynamic_cast<const UPos*>(a.get()));
|
||||||
|
}
|
||||||
|
if(a.size() > 1){
|
||||||
|
return out->vextend(a.next());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/************
|
/************
|
||||||
* VPos *
|
* VPos *
|
||||||
************/
|
************/
|
||||||
|
@ -37,16 +77,27 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<PosT>>(*this);
|
return std::make_unique<VPos<PosT>>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class PosT>
|
||||||
|
bool VPos<PosT>::F() const
|
||||||
|
{
|
||||||
|
if constexpr(typename std::is_same<PosT,FPos>::value){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
SizeT VPos<PosT>::vsize() const
|
SizeT VPos<PosT>::vsize() const
|
||||||
{
|
{
|
||||||
return PosT::THIS().size();
|
return this->size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
SizeT VPos<PosT>::vval() const
|
SizeT VPos<PosT>::vval() const
|
||||||
{
|
{
|
||||||
return PosT::THIS().val();
|
return this->val();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
|
@ -76,20 +127,6 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<OPosT>>( (*this)(UPos(a->vval())) );
|
return std::make_unique<VPos<OPosT>>( (*this)(UPos(a->vval())) );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
|
||||||
Uptr<VPosBase> VPos<PosT>::vextend(const DPos& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(this->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(this->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT>
|
|
||||||
Uptr<VPosBase> VPos<PosT>::vextend(const DPosRef& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(this->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(this->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
Uptr<VPosBase> VPos<PosT>::vextend(const UPos& a) const
|
Uptr<VPosBase> VPos<PosT>::vextend(const UPos& a) const
|
||||||
{
|
{
|
||||||
|
@ -111,7 +148,7 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
VPos<MPos<PosT1,PosT2>>::VPos(const MPos<PosT1,PosT2>& a) :
|
VPos<MPos<PosT1,PosT2>>::VPos(const MPos<PosT1,PosT2>& a) :
|
||||||
MPos<PosT1,PosT2>(a.THIS()),
|
MPos<PosT1,PosT2>(a),
|
||||||
mNRef(&this->next())
|
mNRef(&this->next())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -121,6 +158,17 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<MPos<PosT1,PosT2>>>(*this);
|
return std::make_unique<VPos<MPos<PosT1,PosT2>>>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class PosT1, class PosT2>
|
||||||
|
bool VPos<MPos<PosT1,PosT2>>::F() const
|
||||||
|
{
|
||||||
|
if constexpr(typename std::is_same<PosT1,FPos>::value){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
SizeT VPos<MPos<PosT1,PosT2>>::vsize() const
|
SizeT VPos<MPos<PosT1,PosT2>>::vsize() const
|
||||||
{
|
{
|
||||||
|
@ -160,20 +208,6 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<OPosT>>( (*this)(UPos(a->vval())) );
|
return std::make_unique<VPos<OPosT>>( (*this)(UPos(a->vval())) );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
|
||||||
Uptr<VPosBase> VPos<MPos<PosT1,PosT2>>::vextend(const DPos& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(this->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(this->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
|
||||||
Uptr<VPosBase> VPos<MPos<PosT1,PosT2>>::vextend(const DPosRef& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(this->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(this->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
Uptr<VPosBase> VPos<MPos<PosT1,PosT2>>::vextend(const UPos& a) const
|
Uptr<VPosBase> VPos<MPos<PosT1,PosT2>>::vextend(const UPos& a) const
|
||||||
{
|
{
|
||||||
|
@ -194,7 +228,7 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
VPosRef<PosT>::VPosRef(const PosT* c) :
|
VPosRef<PosT>::VPosRef(const PosT* c) :
|
||||||
mC(&c)
|
mC(c)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
|
@ -203,6 +237,17 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<PosT>>(*mC);
|
return std::make_unique<VPos<PosT>>(*mC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class PosT>
|
||||||
|
bool VPosRef<PosT>::F() const
|
||||||
|
{
|
||||||
|
if constexpr(typename std::is_same<PosT,FPos>::value){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
SizeT VPosRef<PosT>::vsize() const
|
SizeT VPosRef<PosT>::vsize() const
|
||||||
{
|
{
|
||||||
|
@ -242,20 +287,6 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<OPosT>>( (*mC)(UPos(a->vval())) );
|
return std::make_unique<VPos<OPosT>>( (*mC)(UPos(a->vval())) );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
|
||||||
Uptr<VPosBase> VPosRef<PosT>::vextend(const DPos& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(mC->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(mC->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT>
|
|
||||||
Uptr<VPosBase> VPosRef<PosT>::vextend(const DPosRef& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(mC->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(mC->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
Uptr<VPosBase> VPosRef<PosT>::vextend(const UPos& a) const
|
Uptr<VPosBase> VPosRef<PosT>::vextend(const UPos& a) const
|
||||||
{
|
{
|
||||||
|
@ -276,7 +307,7 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
VPosRef<MPos<PosT1,PosT2>>::VPosRef(const MPos<PosT1,PosT2>* c) :
|
VPosRef<MPos<PosT1,PosT2>>::VPosRef(const MPos<PosT1,PosT2>* c) :
|
||||||
mC(c), mNRef(&c->next())
|
mC(c), mNRef(c->vnext())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
|
@ -285,6 +316,17 @@ namespace CNORXZ
|
||||||
return std::make_unique<VPos<MPos<PosT1,PosT2>>>(*mC);
|
return std::make_unique<VPos<MPos<PosT1,PosT2>>>(*mC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class PosT1, class PosT2>
|
||||||
|
bool VPosRef<MPos<PosT1,PosT2>>::F() const
|
||||||
|
{
|
||||||
|
if constexpr(typename std::is_same<PosT1,FPos>::value){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
SizeT VPosRef<MPos<PosT1,PosT2>>::vsize() const
|
SizeT VPosRef<MPos<PosT1,PosT2>>::vsize() const
|
||||||
{
|
{
|
||||||
|
@ -323,20 +365,6 @@ namespace CNORXZ
|
||||||
typedef decltype( (*mC)(UPos(a->vval())) ) OPosT;
|
typedef decltype( (*mC)(UPos(a->vval())) ) OPosT;
|
||||||
return std::make_unique<VPos<OPosT>>( (*mC)(UPos(a->vval())) );
|
return std::make_unique<VPos<OPosT>>( (*mC)(UPos(a->vval())) );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
|
||||||
Uptr<VPosBase> VPosRef<MPos<PosT1,PosT2>>::vextend(const DPos& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(mC->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(mC->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
|
||||||
Uptr<VPosBase> VPosRef<MPos<PosT1,PosT2>>::vextend(const DPosRef& a) const
|
|
||||||
{
|
|
||||||
typedef decltype(mC->extend(a)) OPosT;
|
|
||||||
return std::make_unique<VPos<OPosT>>(mC->extend(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
Uptr<VPosBase> VPosRef<MPos<PosT1,PosT2>>::vextend(const UPos& a) const
|
Uptr<VPosBase> VPosRef<MPos<PosT1,PosT2>>::vextend(const UPos& a) const
|
||||||
|
|
|
@ -12,22 +12,28 @@ namespace CNORXZ
|
||||||
DEFAULT_MEMBERS(VPosBase);
|
DEFAULT_MEMBERS(VPosBase);
|
||||||
|
|
||||||
virtual Uptr<VPosBase> copy() const = 0;
|
virtual Uptr<VPosBase> copy() const = 0;
|
||||||
|
virtual bool F() const = 0;
|
||||||
virtual SizeT vsize() const = 0;
|
virtual SizeT vsize() const = 0;
|
||||||
virtual SizeT vval() const = 0;
|
virtual SizeT vval() const = 0;
|
||||||
|
virtual const VPosBase* vget() const = 0; // strip away all MPos<...>
|
||||||
virtual const VPosBase* vnext() const = 0;
|
virtual const VPosBase* vnext() const = 0;
|
||||||
virtual Uptr<VPosBase> vplus(const VPosBase* a) const = 0;
|
virtual Uptr<VPosBase> vplus(const VPosBase* a) const = 0;
|
||||||
virtual Uptr<VPosBase> vtimes(const VPosBase* a) const = 0;
|
virtual Uptr<VPosBase> vtimes(const VPosBase* a) const = 0;
|
||||||
virtual Uptr<VPosBase> vexec(const VPosBase* a) const = 0;
|
virtual Uptr<VPosBase> vexec(const VPosBase* a) const = 0;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& a) const = 0;
|
|
||||||
virtual Uptr<VPosBase> vextend(const DPosRef& a) const = 0;
|
|
||||||
virtual Uptr<VPosBase> vextend(const UPos& a) const = 0;
|
virtual Uptr<VPosBase> vextend(const UPos& a) const = 0;
|
||||||
virtual Uptr<VPosBase> vextend(const FPos& a) const = 0;
|
virtual Uptr<VPosBase> vextend(const FPos& a) const = 0;
|
||||||
|
|
||||||
template <SizeT N>
|
template <SizeT N>
|
||||||
Uptr<VPosBase> vextend(const SPos<N>& a) const;
|
inline Uptr<VPosBase> vextend(const SPos<N>& a) const;
|
||||||
|
|
||||||
template <SizeT N, SizeT... Ms>
|
template <SizeT N, SizeT... Ms>
|
||||||
Uptr<VPosBase> vextend(const SFPos<N,Ms...>& a) const;
|
inline Uptr<VPosBase> vextend(const SFPos<N,Ms...>& a) const;
|
||||||
|
|
||||||
|
template <class PosT1, class PosT2>
|
||||||
|
inline Uptr<VPosBase> vextend(const MPos<PosT1,PosT2>& a) const;
|
||||||
|
|
||||||
|
inline Uptr<VPosBase> vextend(const DPos& a) const;
|
||||||
|
inline Uptr<VPosBase> vextend(const DPosRef& a) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
|
@ -39,14 +45,13 @@ namespace CNORXZ
|
||||||
VPos(const PosT& a);
|
VPos(const PosT& a);
|
||||||
|
|
||||||
virtual Uptr<VPosBase> copy() const override final;
|
virtual Uptr<VPosBase> copy() const override final;
|
||||||
|
virtual bool F() const override final;
|
||||||
virtual SizeT vsize() const override final;
|
virtual SizeT vsize() const override final;
|
||||||
virtual SizeT vval() const override final;
|
virtual SizeT vval() const override final;
|
||||||
virtual const VPosBase* vnext() const override final;
|
virtual const VPosBase* vnext() const override final;
|
||||||
virtual Uptr<VPosBase> vplus(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 Uptr<VPosBase> vtimes(const VPosBase* a) const override final;
|
||||||
virtual Uptr<VPosBase> vexec(const VPosBase* a) const override final;
|
virtual Uptr<VPosBase> vexec(const VPosBase* a) const override final;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& a) const override final;
|
|
||||||
virtual Uptr<VPosBase> vextend(const DPosRef& a) const override final;
|
|
||||||
virtual Uptr<VPosBase> vextend(const UPos& a) const override final;
|
virtual Uptr<VPosBase> vextend(const UPos& a) const override final;
|
||||||
virtual Uptr<VPosBase> vextend(const FPos& a) const override final;
|
virtual Uptr<VPosBase> vextend(const FPos& a) const override final;
|
||||||
};
|
};
|
||||||
|
@ -62,14 +67,13 @@ namespace CNORXZ
|
||||||
VPos(const MPos<PosT1,PosT2>& a);
|
VPos(const MPos<PosT1,PosT2>& a);
|
||||||
|
|
||||||
virtual Uptr<VPosBase> copy() const override final;
|
virtual Uptr<VPosBase> copy() const override final;
|
||||||
|
virtual bool F() const override final;
|
||||||
virtual SizeT vsize() const override final;
|
virtual SizeT vsize() const override final;
|
||||||
virtual SizeT vval() const override final;
|
virtual SizeT vval() const override final;
|
||||||
virtual const VPosBase* vnext() const override final;
|
virtual const VPosBase* vnext() const override final;
|
||||||
virtual Uptr<VPosBase> vplus(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 Uptr<VPosBase> vtimes(const VPosBase* a) const override final;
|
||||||
virtual Uptr<VPosBase> vexec(const VPosBase* a) const override final;
|
virtual Uptr<VPosBase> vexec(const VPosBase* a) const override final;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& a) const override final;
|
|
||||||
virtual Uptr<VPosBase> vextend(const DPosRef& a) const override final;
|
|
||||||
virtual Uptr<VPosBase> vextend(const UPos& a) const override final;
|
virtual Uptr<VPosBase> vextend(const UPos& a) const override final;
|
||||||
virtual Uptr<VPosBase> vextend(const FPos& a) const override final;
|
virtual Uptr<VPosBase> vextend(const FPos& a) const override final;
|
||||||
};
|
};
|
||||||
|
@ -85,14 +89,13 @@ namespace CNORXZ
|
||||||
VPosRef(const PosT* c);
|
VPosRef(const PosT* c);
|
||||||
|
|
||||||
virtual Uptr<VPosBase> copy() const override final;
|
virtual Uptr<VPosBase> copy() const override final;
|
||||||
|
virtual bool F() const override final;
|
||||||
virtual SizeT vsize() const override final;
|
virtual SizeT vsize() const override final;
|
||||||
virtual SizeT vval() const override final;
|
virtual SizeT vval() const override final;
|
||||||
virtual const VPosBase* vnext() const override final;
|
virtual const VPosBase* vnext() const override final;
|
||||||
virtual Uptr<VPosBase> vplus(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 Uptr<VPosBase> vtimes(const VPosBase* a) const override final;
|
||||||
virtual Uptr<VPosBase> vexec(const VPosBase* a) const override final;
|
virtual Uptr<VPosBase> vexec(const VPosBase* a) const override final;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& a) const override final;
|
|
||||||
virtual Uptr<VPosBase> vextend(const DPosRef& a) const override final;
|
|
||||||
virtual Uptr<VPosBase> vextend(const UPos& a) const override final;
|
virtual Uptr<VPosBase> vextend(const UPos& a) const override final;
|
||||||
virtual Uptr<VPosBase> vextend(const FPos& a) const override final;
|
virtual Uptr<VPosBase> vextend(const FPos& a) const override final;
|
||||||
|
|
||||||
|
@ -110,6 +113,7 @@ namespace CNORXZ
|
||||||
VPosRef(const MPos<PosT1,PosT2>* c);
|
VPosRef(const MPos<PosT1,PosT2>* c);
|
||||||
|
|
||||||
virtual Uptr<VPosBase> copy() const override final;
|
virtual Uptr<VPosBase> copy() const override final;
|
||||||
|
virtual bool F() const override final;
|
||||||
virtual SizeT vsize() const override final;
|
virtual SizeT vsize() const override final;
|
||||||
virtual SizeT vval() const override final;
|
virtual SizeT vval() const override final;
|
||||||
virtual const VPosBase* vnext() const override final;
|
virtual const VPosBase* vnext() const override final;
|
||||||
|
|
|
@ -97,24 +97,25 @@ namespace
|
||||||
EXPECT_EQ(mp5.val(), mUp2.val() * mUp1.val());
|
EXPECT_EQ(mp5.val(), mUp2.val() * mUp1.val());
|
||||||
EXPECT_EQ(mp5.next().val(), mS4p.val() * mUp1.val());
|
EXPECT_EQ(mp5.next().val(), mS4p.val() * mUp1.val());
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
TEST_F(Pos_Test, Dyn)
|
TEST_F(Pos_Test, Dyn)
|
||||||
{
|
{
|
||||||
DPos dp01(mS2p);
|
DPos dp01(static_cast<UPos>(mS2p));
|
||||||
DPos dp02(mUp1);
|
DPos dp02(mUp1);
|
||||||
|
/*
|
||||||
DPos dp1(mkMPos(mS2p, mUp1));
|
DPos dp1(mkMPos(mS2p, mUp1));
|
||||||
DPos dp2(mkMPos(mUp2, mS4p));
|
DPos dp2(mkMPos(mUp2, mS4p));
|
||||||
auto dp3a = dp1 + dp2;
|
auto dp3a = dp1 + dp2;
|
||||||
auto dp3b = dp2 + dp1;
|
auto dp3b = dp2 + dp1;
|
||||||
auto dp4 = dp1 * dp01;
|
auto dp4 = dp1 * dp01;
|
||||||
auto dp5 = dp2 * dp02;
|
auto dp5 = dp2 * dp02;
|
||||||
|
*/
|
||||||
EXPECT_EQ(dp01.size(), 1);
|
EXPECT_EQ(dp01.size(), 1);
|
||||||
EXPECT_EQ(dp02.size(), 1);
|
EXPECT_EQ(dp02.size(), 1);
|
||||||
|
|
||||||
EXPECT_EQ(dp01.val(), mS2p.val());
|
EXPECT_EQ(dp01.val(), mS2p.val());
|
||||||
EXPECT_EQ(dp02.val(), mUp1.val());
|
EXPECT_EQ(dp02.val(), mUp1.val());
|
||||||
|
/*
|
||||||
EXPECT_EQ(dp1.size(), 2);
|
EXPECT_EQ(dp1.size(), 2);
|
||||||
EXPECT_EQ(dp2.size(), 2);
|
EXPECT_EQ(dp2.size(), 2);
|
||||||
|
|
||||||
|
@ -135,8 +136,9 @@ namespace
|
||||||
EXPECT_EQ(dp4.next().val(), mUp1.val() * mS2p.val());
|
EXPECT_EQ(dp4.next().val(), mUp1.val() * mS2p.val());
|
||||||
EXPECT_EQ(dp5.first().val(), mUp2.val() * mUp1.val());
|
EXPECT_EQ(dp5.first().val(), mUp2.val() * mUp1.val());
|
||||||
EXPECT_EQ(dp5.next().val(), mS4p.val() * mUp1.val());
|
EXPECT_EQ(dp5.next().val(), mS4p.val() * mUp1.val());
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
|
|
Loading…
Reference in a new issue