im com (not finished)
This commit is contained in:
parent
483e3b4286
commit
f68c02565d
8 changed files with 143 additions and 54 deletions
54
src/include/operation/op_utility.cc.h
Normal file
54
src/include/operation/op_utility.cc.h
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
#ifndef __cxz_op_utility_cc_h__
|
||||||
|
#define __cxz_op_utility_cc_h__
|
||||||
|
|
||||||
|
#include "op_utility.h"
|
||||||
|
#include "xpr/pos_type.h"
|
||||||
|
#include "operation/op_type.h"
|
||||||
|
|
||||||
|
namespace CNORXZ
|
||||||
|
{
|
||||||
|
template <SizeT I, class PosT>
|
||||||
|
constexpr decltype(auto) pos_get(const PosT& pos)
|
||||||
|
{
|
||||||
|
static_assert(I < static_pos_size<PosT>::value, "index out of range");
|
||||||
|
if constexpr(I == 0){
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return pos_get<I-1>(pos.next());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <SizeT J, SizeT I, SizeT... Is>
|
||||||
|
constexpr SizeT sum_index_sequence(std::index_sequence<I,Is...> is)
|
||||||
|
{
|
||||||
|
static_assert(J < sizeof...(Is)+1, "index out of range");
|
||||||
|
if constexpr(J == 0){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return sum_index_sequence<J-1>(std::index_sequence<Is...>{}) + I;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class F, class PosT, class OpTuple, class OpSizes, SizeT... Is>
|
||||||
|
inline void pos_unpack_args_i(const F& f, const PosT& pos, const OpTuple& args,
|
||||||
|
OpSizes opsizes, std::index_sequence<Is...> is)
|
||||||
|
{
|
||||||
|
f(std::get<Is>(args).get(pos_get<sum_index_sequence<Is>(opsizes)>(pos))...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class F, class PosT, class... Ops>
|
||||||
|
inline void pos_unpack_args(const F& f, const PosT& pos, const Tuple<Ops...>& args)
|
||||||
|
{
|
||||||
|
static_assert(is_pos_type<PosT>::value, "got non-pos-type");
|
||||||
|
static_assert((is_operation<Ops>::value and ...), "got non-operation type");
|
||||||
|
typedef std::make_index_sequence<sizeof...Ops> Idxs;
|
||||||
|
typedef std::index_sequence<op_size<Ops>::value...> OpSizes;
|
||||||
|
pos_unpack_args_i(f, pos, args, OpSizes{}, Idx{});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
25
src/include/operation/op_utility.h
Normal file
25
src/include/operation/op_utility.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
#ifndef __cxz_op_utility_h__
|
||||||
|
#define __cxz_op_utility_h__
|
||||||
|
|
||||||
|
#include "base/base.h"
|
||||||
|
|
||||||
|
namespace CNORXZ
|
||||||
|
{
|
||||||
|
template <SizeT I, class PosT>
|
||||||
|
constexpr decltype(auto) pos_get(const PosT& pos);
|
||||||
|
|
||||||
|
template <SizeT J, SizeT... Is>
|
||||||
|
constexpr SizeT sum_index_sequence(std::index_sequence<Is...> is);
|
||||||
|
|
||||||
|
template <class F, class PosT, class OpTuple, class OpSizes, SizeT... Is>
|
||||||
|
inline void pos_unpack_args_i(const F& f, const PosT& pos, const OpTuple& args,
|
||||||
|
OpSizes opsizes, std::index_sequence<Is...> is);
|
||||||
|
|
||||||
|
template <class F, class PosT, class... Ops>
|
||||||
|
inline void pos_unpack_args(const F& f, const PosT& pos, const Tuple<Ops...>& args);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -3,6 +3,7 @@
|
||||||
#define __cxz_op_expr_cc_h__
|
#define __cxz_op_expr_cc_h__
|
||||||
|
|
||||||
#include "op_expr.h"
|
#include "op_expr.h"
|
||||||
|
#include "op_utility.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -18,7 +19,7 @@ namespace CNORXZ
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
inline SizeT OpXpr<F,Ops...>::operator()(const PosT& last) const
|
inline SizeT OpXpr<F,Ops...>::operator()(const PosT& last) const
|
||||||
{
|
{
|
||||||
pos_unpack_args(mF,mOps,last); // utility function (to be implemented)
|
pos_unpack_args(mF,last,mOps); // utility function (to be implemented)
|
||||||
// depending on whether Ops[N] is static or not call statically or dynamically .next()
|
// depending on whether Ops[N] is static or not call statically or dynamically .next()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -373,7 +373,8 @@ namespace CNORXZ
|
||||||
return mC->vval();
|
return mC->vval();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline DPosRef DPos::next() const
|
//inline DPosRef DPos::next() const
|
||||||
|
inline DPosRef DPos::sub() const
|
||||||
{
|
{
|
||||||
return DPosRef(mC->vnext());
|
return DPosRef(mC->vnext());
|
||||||
}
|
}
|
||||||
|
@ -416,9 +417,10 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos DPos::extend(const PosT& a) const
|
inline decltype(auto) DPos::extend(const PosT& a) const
|
||||||
{
|
{
|
||||||
return DPos(mC->vextend( a ));
|
//return DPos(mC->vextend( a ));
|
||||||
|
return MPos<DPos,PosT>(*this,a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************
|
/***************
|
||||||
|
@ -447,7 +449,8 @@ namespace CNORXZ
|
||||||
return mP->vval();
|
return mP->vval();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline DPosRef DPosRef::next() const
|
//inline DPosRef DPosRef::next() const
|
||||||
|
inline DPosRef DPosRef::sub() const
|
||||||
{
|
{
|
||||||
return DPosRef(mP->vnext());
|
return DPosRef(mP->vnext());
|
||||||
}
|
}
|
||||||
|
@ -490,9 +493,10 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos DPosRef::extend(const PosT& a) const
|
inline decltype(auto) DPosRef::extend(const PosT& a) const
|
||||||
{
|
{
|
||||||
return DPos(mP->vextend( a ));
|
//return DPos(mP->vextend( a ));
|
||||||
|
return MPos<DPos,PosT>(*this,a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/************
|
/************
|
||||||
|
|
|
@ -154,6 +154,7 @@ namespace CNORXZ
|
||||||
constexpr auto extend(const PosT& a) const;
|
constexpr auto extend(const PosT& a) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// treat as scalar pos!!!
|
||||||
class DPos : public ObjHandle<VPosBase>
|
class DPos : public ObjHandle<VPosBase>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -172,7 +173,8 @@ namespace CNORXZ
|
||||||
inline const VPosBase* vpos() const;
|
inline const VPosBase* vpos() const;
|
||||||
inline SizeT size() const;
|
inline SizeT size() const;
|
||||||
inline SizeT val() const;
|
inline SizeT val() const;
|
||||||
inline DPosRef next() const;
|
inline DPosRef sub() const;
|
||||||
|
//inline DPosRef next() const;
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos operator+(const PosT& a) const;
|
inline DPos operator+(const PosT& a) const;
|
||||||
|
@ -185,7 +187,7 @@ namespace CNORXZ
|
||||||
inline DPos operator()(const PosT& a) const;
|
inline DPos operator()(const PosT& a) const;
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos extend(const PosT& a) const;
|
inline decltype(auto) extend(const PosT& a) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DPosRef
|
class DPosRef
|
||||||
|
@ -202,7 +204,8 @@ namespace CNORXZ
|
||||||
inline const VPosBase* vpos() const;
|
inline const VPosBase* vpos() const;
|
||||||
inline SizeT size() const;
|
inline SizeT size() const;
|
||||||
inline SizeT val() const;
|
inline SizeT val() const;
|
||||||
inline DPosRef next() const;
|
inline DPosRef sub() const;
|
||||||
|
//inline DPosRef next() const;
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos operator+(const PosT& a) const;
|
inline DPos operator+(const PosT& a) const;
|
||||||
|
@ -215,7 +218,7 @@ namespace CNORXZ
|
||||||
inline DPos operator()(const PosT& a) const;
|
inline DPos operator()(const PosT& a) const;
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
inline DPos extend(const PosT& a) const;
|
inline decltype(auto) extend(const PosT& a) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// for common call of extension vector elements
|
// for common call of extension vector elements
|
||||||
|
@ -261,7 +264,7 @@ namespace CNORXZ
|
||||||
struct is_epos_type { CXZ_CVAL_FALSE; };
|
struct is_epos_type { CXZ_CVAL_FALSE; };
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
struct pos_depth
|
struct static_pos_size
|
||||||
{
|
{
|
||||||
static constexpr SizeT value = is_pos_type<PosT>::value ? 1 : 0;
|
static constexpr SizeT value = is_pos_type<PosT>::value ? 1 : 0;
|
||||||
};
|
};
|
||||||
|
@ -322,6 +325,8 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <> struct is_pos_type<DPos> { CXZ_CVAL_TRUE; };
|
template <> struct is_pos_type<DPos> { CXZ_CVAL_TRUE; };
|
||||||
template <> struct is_pos_type<DPosRef> { CXZ_CVAL_TRUE; };
|
template <> struct is_pos_type<DPosRef> { CXZ_CVAL_TRUE; };
|
||||||
|
template <> struct is_scalar_pos_type<DPos> { CXZ_CVAL_TRUE; };
|
||||||
|
template <> struct is_scalar_pos_type<DPosRef> { CXZ_CVAL_TRUE; };
|
||||||
|
|
||||||
template <class BPosT, class... OPosTs> struct is_pos_type<EPos<BPosT,OPosTs...>> { CXZ_CVAL_TRUE; };
|
template <class BPosT, class... OPosTs> struct is_pos_type<EPos<BPosT,OPosTs...>> { CXZ_CVAL_TRUE; };
|
||||||
template <class BPosT, class... OPosTs> struct is_scalar_pos_type<EPos<BPosT,OPosTs...>>
|
template <class BPosT, class... OPosTs> struct is_scalar_pos_type<EPos<BPosT,OPosTs...>>
|
||||||
|
@ -331,9 +336,9 @@ namespace CNORXZ
|
||||||
template <class BPosT, class... OPosTs> struct is_epos_type<EPos<BPosT,OPosTs...>> { CXZ_CVAL_TRUE; };
|
template <class BPosT, class... OPosTs> struct is_epos_type<EPos<BPosT,OPosTs...>> { CXZ_CVAL_TRUE; };
|
||||||
|
|
||||||
template <class BPosT, class NPosT>
|
template <class BPosT, class NPosT>
|
||||||
struct pos_depth<MPos<BPosT,NPosT>>
|
struct static_pos_size<MPos<BPosT,NPosT>>
|
||||||
{
|
{
|
||||||
static constexpr SizeT value = pos_depth<NPosT>::value + 1;
|
static constexpr SizeT value = static_pos_size<NPosT>::value + 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class BPosT, class... OPosTs>
|
template <class BPosT, class... OPosTs>
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace CNORXZ
|
||||||
/****************
|
/****************
|
||||||
* VPosBase *
|
* VPosBase *
|
||||||
****************/
|
****************/
|
||||||
|
/*
|
||||||
template <SizeT N>
|
template <SizeT N>
|
||||||
inline Uptr<VPosBase> VPosBase::vextend(const SPos<N>& a) const
|
inline Uptr<VPosBase> VPosBase::vextend(const SPos<N>& a) const
|
||||||
{
|
{
|
||||||
|
@ -28,7 +28,7 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
return this->vextend(static_cast<const PosT1&>(a))->vextend(a.next());
|
return this->vextend(static_cast<const PosT1&>(a))->vextend(a.next());
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/************
|
/************
|
||||||
* VPos *
|
* VPos *
|
||||||
************/
|
************/
|
||||||
|
@ -88,7 +88,7 @@ namespace CNORXZ
|
||||||
typedef decltype((*this)(UPos(a->vval()))) OPosT;
|
typedef decltype((*this)(UPos(a->vval()))) OPosT;
|
||||||
return std::make_unique<VPos<OPosT>>( (*this)(UPos(a->vval())) );
|
return std::make_unique<VPos<OPosT>>( (*this)(UPos(a->vval())) );
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
Uptr<VPosBase> VPos<PosT>::vextend(const UPos& a) const
|
Uptr<VPosBase> VPos<PosT>::vextend(const UPos& a) const
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,7 @@ namespace CNORXZ
|
||||||
typedef decltype(this->extend(DPos(a))) OPosT;
|
typedef decltype(this->extend(DPos(a))) OPosT;
|
||||||
return std::make_unique<VPos<OPosT>>(this->extend(DPos(a)));
|
return std::make_unique<VPos<OPosT>>(this->extend(DPos(a)));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/******************
|
/******************
|
||||||
* VPos<MPos> *
|
* VPos<MPos> *
|
||||||
******************/
|
******************/
|
||||||
|
@ -207,7 +207,7 @@ namespace CNORXZ
|
||||||
typedef decltype( (*this)(UPos(a->vval())) ) OPosT;
|
typedef decltype( (*this)(UPos(a->vval())) ) OPosT;
|
||||||
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>
|
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
|
||||||
{
|
{
|
||||||
|
@ -235,7 +235,7 @@ namespace CNORXZ
|
||||||
typedef decltype(this->extend(DPos(a))) OPosT;
|
typedef decltype(this->extend(DPos(a))) OPosT;
|
||||||
return std::make_unique<VPos<OPosT>>(this->extend(DPos(a)));
|
return std::make_unique<VPos<OPosT>>(this->extend(DPos(a)));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/***************
|
/***************
|
||||||
* VPosRef *
|
* VPosRef *
|
||||||
***************/
|
***************/
|
||||||
|
@ -295,7 +295,7 @@ 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 PosT>
|
template <class PosT>
|
||||||
Uptr<VPosBase> VPosRef<PosT>::vextend(const UPos& a) const
|
Uptr<VPosBase> VPosRef<PosT>::vextend(const UPos& a) const
|
||||||
{
|
{
|
||||||
|
@ -323,7 +323,7 @@ namespace CNORXZ
|
||||||
typedef decltype(mC->extend(DPos(a))) OPosT;
|
typedef decltype(mC->extend(DPos(a))) OPosT;
|
||||||
return std::make_unique<VPos<OPosT>>(mC->extend(DPos(a)));
|
return std::make_unique<VPos<OPosT>>(mC->extend(DPos(a)));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/*********************
|
/*********************
|
||||||
* VPosRef<MPos> *
|
* VPosRef<MPos> *
|
||||||
*********************/
|
*********************/
|
||||||
|
@ -393,7 +393,7 @@ 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>
|
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
|
||||||
{
|
{
|
||||||
|
@ -421,7 +421,7 @@ namespace CNORXZ
|
||||||
typedef decltype(mC->extend(DPos(a))) OPosT;
|
typedef decltype(mC->extend(DPos(a))) OPosT;
|
||||||
return std::make_unique<VPos<OPosT>>(mC->extend(DPos(a)));
|
return std::make_unique<VPos<OPosT>>(mC->extend(DPos(a)));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -21,11 +21,11 @@ namespace CNORXZ
|
||||||
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 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;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& 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 DPosRef& a) const = 0;
|
||||||
|
/*
|
||||||
template <SizeT N>
|
template <SizeT N>
|
||||||
inline Uptr<VPosBase> vextend(const SPos<N>& a) const;
|
inline Uptr<VPosBase> vextend(const SPos<N>& a) const;
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ namespace CNORXZ
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
inline Uptr<VPosBase> vextend(const MPos<PosT1,PosT2>& a) const;
|
inline Uptr<VPosBase> vextend(const MPos<PosT1,PosT2>& a) const;
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
|
@ -53,10 +53,10 @@ namespace CNORXZ
|
||||||
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 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;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& 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 DPosRef& a) const override final;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
|
@ -81,10 +81,10 @@ namespace CNORXZ
|
||||||
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 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;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& 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 DPosRef& a) const override final;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class PosT>
|
template <class PosT>
|
||||||
|
@ -105,10 +105,10 @@ namespace CNORXZ
|
||||||
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 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;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& 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 DPosRef& a) const override final;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -133,10 +133,10 @@ namespace CNORXZ
|
||||||
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 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;
|
||||||
virtual Uptr<VPosBase> vextend(const DPos& 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 DPosRef& a) const override final;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -144,21 +144,21 @@ namespace
|
||||||
EXPECT_EQ(dp5.size(), 2u);
|
EXPECT_EQ(dp5.size(), 2u);
|
||||||
|
|
||||||
EXPECT_EQ(dp1.val(), mS2p.val());
|
EXPECT_EQ(dp1.val(), mS2p.val());
|
||||||
EXPECT_EQ(dp1.next().val(), mUp1.val());
|
EXPECT_EQ(dp1.sub().val(), mUp1.val());
|
||||||
EXPECT_EQ(dp2.val(), mUp2.val());
|
EXPECT_EQ(dp2.val(), mUp2.val());
|
||||||
EXPECT_EQ(dp2.next().val(), mS4p.val());
|
EXPECT_EQ(dp2.sub().val(), mS4p.val());
|
||||||
EXPECT_EQ(dp3a.val(), mS2p.val() + mUp2.val());
|
EXPECT_EQ(dp3a.val(), mS2p.val() + mUp2.val());
|
||||||
EXPECT_EQ(dp3a.next().val(), mUp1.val() + mS4p.val());
|
EXPECT_EQ(dp3a.sub().val(), mUp1.val() + mS4p.val());
|
||||||
EXPECT_EQ(dp3b.val(), mS2p.val() + mUp2.val());
|
EXPECT_EQ(dp3b.val(), mS2p.val() + mUp2.val());
|
||||||
EXPECT_EQ(dp3b.next().val(), mUp1.val() + mS4p.val());
|
EXPECT_EQ(dp3b.sub().val(), mUp1.val() + mS4p.val());
|
||||||
EXPECT_EQ(dp4.val(), mS2p.val() * mS2p.val());
|
EXPECT_EQ(dp4.val(), mS2p.val() * mS2p.val());
|
||||||
EXPECT_EQ(dp4.next().val(), mUp1.val() * mS2p.val());
|
EXPECT_EQ(dp4.sub().val(), mUp1.val() * mS2p.val());
|
||||||
EXPECT_EQ(dp5.val(), mUp2.val() * mUp1.val());
|
EXPECT_EQ(dp5.val(), mUp2.val() * mUp1.val());
|
||||||
EXPECT_EQ(dp5.next().val(), mS4p.val() * mUp1.val());
|
EXPECT_EQ(dp5.sub().val(), mS4p.val() * mUp1.val());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(Pos_Test, DynExtend)
|
TEST_F(Pos_Test, DynExtend)
|
||||||
{
|
{/*
|
||||||
DPos dp1(mkMPos(static_cast<UPos>(mS2p), mUp1));
|
DPos dp1(mkMPos(static_cast<UPos>(mS2p), mUp1));
|
||||||
DPos dp2(mkMPos(mUp2, static_cast<UPos>(mS4p)));
|
DPos dp2(mkMPos(mUp2, static_cast<UPos>(mS4p)));
|
||||||
auto dp3 = dp1.extend(mUp2);
|
auto dp3 = dp1.extend(mUp2);
|
||||||
|
@ -188,7 +188,7 @@ namespace
|
||||||
EXPECT_EQ( dp6.val(), dp3.val() * dp01.val() );
|
EXPECT_EQ( dp6.val(), dp3.val() * dp01.val() );
|
||||||
EXPECT_EQ( dp6.next().val(), dp3.next().val() * dp01.val() );
|
EXPECT_EQ( dp6.next().val(), dp3.next().val() * dp01.val() );
|
||||||
EXPECT_EQ( dp6.next().next().val(), dp3.next().next().val() * dp01.val() );
|
EXPECT_EQ( dp6.next().next().val(), dp3.next().next().val() * dp01.val() );
|
||||||
}
|
*/}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
|
|
Loading…
Reference in a new issue