re-enable index ifor
This commit is contained in:
parent
6fc3a50fa9
commit
b0d002b7b1
23 changed files with 231 additions and 222 deletions
|
@ -6,29 +6,11 @@
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
/*
|
template <class PosT, class Xpr>
|
||||||
template <class Expr>
|
decltype(auto) CIndex::ifor(const PosT& step, const Xpr& xpr) const
|
||||||
auto CRange::ifor(SizeT step, Expr ex) const
|
|
||||||
-> For<CIndex,Expr>
|
|
||||||
{
|
{
|
||||||
return For<CIndex,Expr>(this, step, ex);
|
return For<0,PosT,Xpr>(this->max(), this->id(), step, xpr);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
/*
|
|
||||||
template <class Expr>
|
|
||||||
auto CRange::iforh(SizeT step, Expr ex) const
|
|
||||||
-> For<CIndex,Expr,ForType::HIDDEN>
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Expr>
|
|
||||||
auto CRange::pifor(SizeT step, Expr ex) const
|
|
||||||
-> PFor<CIndex,Expr>
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "ranges/index_base.h"
|
#include "ranges/index_base.h"
|
||||||
#include "ranges/range_base.h"
|
#include "ranges/range_base.h"
|
||||||
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -25,6 +26,9 @@ namespace CNORXZ
|
||||||
CIndex& operator+=(Int n);
|
CIndex& operator+=(Int n);
|
||||||
CIndex& operator-=(Int n);
|
CIndex& operator-=(Int n);
|
||||||
|
|
||||||
|
SizeT max() const;
|
||||||
|
IndexId<0> id() const;
|
||||||
|
|
||||||
SizeT operator*() const;
|
SizeT operator*() const;
|
||||||
SizeT operator->() const;
|
SizeT operator->() const;
|
||||||
|
|
||||||
|
@ -33,25 +37,15 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim() const; // = 1
|
SizeT dim() const; // = 1
|
||||||
Sptr<RangeType> range() const;
|
Sptr<RangeType> range() const;
|
||||||
SizeT getStepSize(PtrId iptr) const;
|
UPos stepSize(const IndexId<0>& id) const;
|
||||||
|
|
||||||
String stringMeta() const;
|
String stringMeta() const;
|
||||||
SizeT meta() const;
|
SizeT meta() const;
|
||||||
CIndex& at(const SizeT& metaPos);
|
CIndex& at(const SizeT& metaPos);
|
||||||
|
|
||||||
//template <class Expr>
|
template <class PosT, class Xpr>
|
||||||
//auto ifor(SizeT step, Expr ex) const
|
decltype(auto) ifor(const PosT& step, const Xpr& xpr) const;
|
||||||
// -> For<CIndex,Expr>;
|
|
||||||
|
|
||||||
/*
|
|
||||||
template <class Expr>
|
|
||||||
auto iforh(SizeT step, Expr ex) const
|
|
||||||
-> For<CIndex<SizeT>,Expr,ForType::HIDDEN>;
|
|
||||||
|
|
||||||
template <class Expr>
|
|
||||||
auto pifor(SizeT step, Expr ex) const
|
|
||||||
-> PFor<CIndex<SizeT>,Expr>;
|
|
||||||
*/
|
|
||||||
private:
|
private:
|
||||||
Sptr<RangeType> mRangePtr;
|
Sptr<RangeType> mRangePtr;
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,6 @@ namespace CNORXZ
|
||||||
IndexInterface<DIndex,DType>(i.pos()),
|
IndexInterface<DIndex,DType>(i.pos()),
|
||||||
mI(std::make_shared<XIndex<Index,Meta>>(i))
|
mI(std::make_shared<XIndex<Index,Meta>>(i))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "range_base.h"
|
#include "range_base.h"
|
||||||
#include "index_base.h"
|
#include "index_base.h"
|
||||||
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,9 @@ namespace CNORXZ
|
||||||
DIndex& operator+=(Int n);
|
DIndex& operator+=(Int n);
|
||||||
DIndex& operator-=(Int n);
|
DIndex& operator-=(Int n);
|
||||||
|
|
||||||
|
SizeT max() const;
|
||||||
|
IndexId<0> id() const;
|
||||||
|
|
||||||
DType operator*() const;
|
DType operator*() const;
|
||||||
DType operator->() const;
|
DType operator->() const;
|
||||||
|
|
||||||
|
@ -39,14 +43,14 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim() const;
|
SizeT dim() const;
|
||||||
RangePtr range() const;
|
RangePtr range() const;
|
||||||
SizeT getStepSize(PtrId iptr) const;
|
|
||||||
|
UPos stepSize(const IndexId<0>& id) const;
|
||||||
|
|
||||||
String stringMeta() const;
|
String stringMeta() const;
|
||||||
DType meta() const;
|
DType meta() const;
|
||||||
DIndex& at(const DType& meta);
|
DIndex& at(const DType& meta);
|
||||||
|
|
||||||
//DExpr ifor(SizeT step, DExpr ex) const;
|
DXpr ifor(const UPos& step, const DXpr& xpr) const;
|
||||||
//DExpr iforh(SizeT step, DExpr ex) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
XIndexPtr mI;
|
XIndexPtr mI;
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "range_base.h"
|
#include "range_base.h"
|
||||||
|
#include "xpr/index_id.h"
|
||||||
|
#include "xpr/xpr_base.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -29,6 +31,7 @@ namespace CNORXZ
|
||||||
SizeT pos() const;
|
SizeT pos() const;
|
||||||
SizeT max() const { return THIS().max(); }
|
SizeT max() const { return THIS().max(); }
|
||||||
PtrId ptrId() const;
|
PtrId ptrId() const;
|
||||||
|
decltype(auto) id() const { return THIS().id(); }
|
||||||
|
|
||||||
bool operator==(const IndexInterface& in) const;
|
bool operator==(const IndexInterface& in) const;
|
||||||
bool operator!=(const IndexInterface& in) const;
|
bool operator!=(const IndexInterface& in) const;
|
||||||
|
@ -44,21 +47,17 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim() const { return THIS().dim(); }
|
SizeT dim() const { return THIS().dim(); }
|
||||||
decltype(auto) range() const { return THIS().range(); }
|
decltype(auto) range() const { return THIS().range(); }
|
||||||
SizeT getStepSize(PtrId iptr) const { return THIS().getStepSize(iptr); }
|
|
||||||
//SizeT getStepSize(SizeT n) const { return THIS().getStepSize(n); }
|
template <SizeT J>
|
||||||
|
decltype(auto) stepSize(const IndexId<J>& id) const { return THIS().stepSize(id); }
|
||||||
|
|
||||||
String stringMeta() const { return THIS().stringMeta(); }
|
String stringMeta() const { return THIS().stringMeta(); }
|
||||||
decltype(auto) meta() const { return THIS().meta(); }
|
decltype(auto) meta() const { return THIS().meta(); }
|
||||||
I& at(const MetaType& meta) { return THIS().at(meta); }
|
I& at(const MetaType& meta) { return THIS().at(meta); }
|
||||||
/*
|
|
||||||
template <class Expr>
|
|
||||||
auto ifor(SizeT step, const Expr ex) const
|
|
||||||
{ return THIS().template ifor<Expr>(step,ex); }
|
|
||||||
|
|
||||||
template <class Expr>
|
template <class PosT, class Xpr>
|
||||||
auto iforh(SizeT step, const Expr ex) const
|
decltype(auto) ifor(const PosT& step, const Xpr& xpr) const { return THIS().ifor(step,xpr); }
|
||||||
{ return THIS().template iforh<Expr>(step,ex); }
|
|
||||||
*/
|
|
||||||
protected:
|
protected:
|
||||||
SizeT mPos = 0;
|
SizeT mPos = 0;
|
||||||
|
|
||||||
|
|
|
@ -12,24 +12,20 @@ namespace CNORXZ
|
||||||
Index(i) {}
|
Index(i) {}
|
||||||
|
|
||||||
template <class Index, SizeT L>
|
template <class Index, SizeT L>
|
||||||
template <SizeT L1>
|
IndexId<L> LIndex<Index,L>::id() const
|
||||||
auto LIndex<Index,L>::getStaticStepSize(PtrId iptr) const
|
|
||||||
{
|
{
|
||||||
if constexpr(L == 0 or L1 == 0){
|
return IndexId<L>(this->ptrId());
|
||||||
return this->getStepSize(iptr);
|
}
|
||||||
|
|
||||||
|
template <class Index, SizeT L>
|
||||||
|
template <SizeT I>
|
||||||
|
decltype(auto) LIndex<Index,L>::stepSize(const IndexId<I>& id) const
|
||||||
|
{
|
||||||
|
if constexpr(L == 0 or I == 0){
|
||||||
|
return UPos(this->id() == id ? 1 : 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if constexpr(L == L1){
|
return this->id() == id ? SPos<1>() : SPos<0>();
|
||||||
CXZ_ASSERT(iptr == this->ptrId(),
|
|
||||||
"got two different indices with the same static label " << L);
|
|
||||||
return SPos<1>();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CXZ_ASSERT(iptr == this->ptrId(),
|
|
||||||
"got two equal indices with the different static label " << L
|
|
||||||
<< " and " << L1);
|
|
||||||
return SPos<0>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "ranges/index_base.h"
|
#include "ranges/index_base.h"
|
||||||
#include "ranges/range_base.h"
|
#include "ranges/range_base.h"
|
||||||
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -20,8 +21,10 @@ namespace CNORXZ
|
||||||
LIndex(const Index& i);
|
LIndex(const Index& i);
|
||||||
LIndex(Index&& i);
|
LIndex(Index&& i);
|
||||||
|
|
||||||
template <SizeT L1>
|
IndexId<L> id() const;
|
||||||
auto getStaticStepSize(PtrId iptr) const;
|
|
||||||
|
template <SizeT I>
|
||||||
|
decltype(auto) stepSize(const IndexId<I>& id) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "range_base.h"
|
#include "range_base.h"
|
||||||
#include "index_base.h"
|
#include "index_base.h"
|
||||||
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -45,7 +46,10 @@ namespace CNORXZ
|
||||||
MIndex operator-(Int n) const;
|
MIndex operator-(Int n) const;
|
||||||
MIndex& operator+=(Int n);
|
MIndex& operator+=(Int n);
|
||||||
MIndex& operator-=(Int n);
|
MIndex& operator-=(Int n);
|
||||||
|
|
||||||
|
SizeT max() const;
|
||||||
|
decltype(auto) id() const;
|
||||||
|
|
||||||
SizeT operator*() const;
|
SizeT operator*() const;
|
||||||
SizeT operator->() const;
|
SizeT operator->() const;
|
||||||
|
|
||||||
|
@ -54,22 +58,17 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim();
|
SizeT dim();
|
||||||
Sptr<RangeType> range();
|
Sptr<RangeType> range();
|
||||||
SizeT getStepSize(PtrId iptr) const;
|
|
||||||
|
template <SizeT I>
|
||||||
|
decltype(auto) stepSize(const IndexId<I>& id) const;
|
||||||
|
|
||||||
String stringMeta() const;
|
String stringMeta() const;
|
||||||
MetaType meta() const;
|
MetaType meta() const;
|
||||||
MIndex& at(const MetaType& metaPos);
|
MIndex& at(const MetaType& metaPos);
|
||||||
|
|
||||||
/*
|
template <class PosT, class Xpr>
|
||||||
template <class Exprs>
|
auto ifor(const PosT& step, const Xpr& xpr) const;
|
||||||
auto ifor(SizeT step, Exprs exs) const;
|
|
||||||
|
|
||||||
template <class Exprs>
|
|
||||||
auto iforh(SizeT step, Exprs exs) const;
|
|
||||||
|
|
||||||
template <class Exprs>
|
|
||||||
auto pifor(SizeT step, Exprs exs) const;
|
|
||||||
*/
|
|
||||||
private:
|
private:
|
||||||
MIndex() = default;
|
MIndex() = default;
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "urange.h"
|
#include "urange.h"
|
||||||
|
#include "xpr/for.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -67,6 +68,18 @@ namespace CNORXZ
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename MetaType>
|
||||||
|
SizeT UIndex<MetaType>::max() const
|
||||||
|
{
|
||||||
|
return mRangePtr->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename MetaType>
|
||||||
|
IndexId<0> UIndex<MetaType>::id() const
|
||||||
|
{
|
||||||
|
return IndexId<0>(this->ptrId());
|
||||||
|
}
|
||||||
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
const MetaType& UIndex<MetaType>::operator*() const
|
const MetaType& UIndex<MetaType>::operator*() const
|
||||||
{
|
{
|
||||||
|
@ -125,36 +138,18 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
SizeT UIndex<MetaType>::getStepSize(PtrId iptr) const
|
template <SizeT I>
|
||||||
|
UPos UIndex<MetaType>::stepSize(const IndexId<I>& id) const
|
||||||
{
|
{
|
||||||
return iptr == this->ptrId() ? 1 : 0;
|
return UPos(id == this->id() ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
template <typename MetaType>
|
template <typename MetaType>
|
||||||
template <class Expr>
|
template <class PosT, class Xpr>
|
||||||
auto UIndex<MetaType>::ifor(size_t step, Expr ex) const
|
decltype(auto) UIndex<MetaType>::ifor(const PosT step, Xpr xpr) const
|
||||||
-> For<URange<MetaType>,Expr>
|
|
||||||
{
|
{
|
||||||
return For<UIndex<MetaType>,Expr>(this, step, ex);
|
return For<0,PosT,Xpr>(this->max(), this->id(), step, xpr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename MetaType>
|
|
||||||
template <class Expr>
|
|
||||||
auto UIndex<MetaType>::iforh(size_t step, Expr ex) const
|
|
||||||
-> For<URange<MetaType>,Expr,ForType::HIDDEN>
|
|
||||||
{
|
|
||||||
return For<UIndex<MetaType>,Expr,ForType::HIDDEN>(this, step, ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename MetaType>
|
|
||||||
template <class Expr>
|
|
||||||
auto UIndex<MetaType>::pifor(size_t step, Expr ex) const
|
|
||||||
-> PFor<URange<MetaType>,Expr>
|
|
||||||
{
|
|
||||||
return PFor<UIndex<MetaType>,Expr>(this, step, ex);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* URangeFactory *
|
* URangeFactory *
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "ranges/index_base.h"
|
#include "ranges/index_base.h"
|
||||||
#include "ranges/range_base.h"
|
#include "ranges/range_base.h"
|
||||||
#include "xpr/for_type.h"
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,9 @@ namespace CNORXZ
|
||||||
UIndex& operator+=(Int n);
|
UIndex& operator+=(Int n);
|
||||||
UIndex& operator-=(Int n);
|
UIndex& operator-=(Int n);
|
||||||
|
|
||||||
|
SizeT max() const;
|
||||||
|
IndexId<0> id() const;
|
||||||
|
|
||||||
const MetaType& operator*() const;
|
const MetaType& operator*() const;
|
||||||
const MetaType* operator->() const;
|
const MetaType* operator->() const;
|
||||||
|
|
||||||
|
@ -37,24 +40,17 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim() const; // = 1
|
SizeT dim() const; // = 1
|
||||||
Sptr<RangeType> range() const;
|
Sptr<RangeType> range() const;
|
||||||
SizeT getStepSize(PtrId iptr) const;
|
|
||||||
|
template <SizeT I>
|
||||||
|
UPos stepSize(const IndexId<I>& id) const;
|
||||||
|
|
||||||
String stringMeta() const;
|
String stringMeta() const;
|
||||||
const MetaType& meta() const;
|
const MetaType& meta() const;
|
||||||
UIndex& at(const MetaType& metaPos);
|
UIndex& at(const MetaType& metaPos);
|
||||||
/*
|
|
||||||
template <class Expr>
|
|
||||||
auto ifor(SizeT step, Expr ex) const
|
|
||||||
-> For<UIndex<MetaType>,Expr>;
|
|
||||||
|
|
||||||
template <class Expr>
|
template <class PosT, class Xpr>
|
||||||
auto iforh(SizeT step, Expr ex) const
|
decltype(auto) ifor(const PosT step, Xpr xpr) const;
|
||||||
-> For<UIndex<MetaType>,Expr,ForType::HIDDEN>;
|
|
||||||
|
|
||||||
template <class Expr>
|
|
||||||
auto pifor(SizeT step, Expr ex) const
|
|
||||||
-> PFor<UIndex<MetaType>,Expr>;
|
|
||||||
*/
|
|
||||||
private:
|
private:
|
||||||
Sptr<RangeType> mRangePtr;
|
Sptr<RangeType> mRangePtr;
|
||||||
const MetaType* mMetaPtr;
|
const MetaType* mMetaPtr;
|
||||||
|
|
|
@ -78,6 +78,18 @@ namespace CNORXZ
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class Index, typename Meta>
|
||||||
|
SizeT XIndex<Index,Meta>::max() const
|
||||||
|
{
|
||||||
|
return mI->max();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Index, typename Meta>
|
||||||
|
IndexId<0> XIndex<Index,Meta>::id() const
|
||||||
|
{
|
||||||
|
return IndexId<0>(mI->id().id());
|
||||||
|
}
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
template <class Index, typename Meta>
|
||||||
DType XIndex<Index,Meta>::operator*() const
|
DType XIndex<Index,Meta>::operator*() const
|
||||||
{
|
{
|
||||||
|
@ -117,9 +129,9 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
template <class Index, typename Meta>
|
||||||
SizeT XIndex<Index,Meta>::getStepSize(PtrId iptr) const
|
UPos XIndex<Index,Meta>::stepSize(const IndexId<0>& id) const
|
||||||
{
|
{
|
||||||
return mI->getStepSize(iptr);
|
return mI->stepSize(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
template <class Index, typename Meta>
|
||||||
|
@ -141,19 +153,13 @@ namespace CNORXZ
|
||||||
mI->at(std::any_cast<const Meta&>(meta.get()));
|
mI->at(std::any_cast<const Meta&>(meta.get()));
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
template <class Index, typename Meta>
|
|
||||||
DExpr XIndex<Index,Meta>::ifor(SizeT step, DExpr ex) const
|
|
||||||
{
|
|
||||||
return mI->ifor(step, ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Index, typename Meta>
|
template <class Index, typename Meta>
|
||||||
DExpr XIndex<Index,Meta>::iforh(SizeT step, DExpr ex) const
|
DXpr XIndex<Index,Meta>::ifor(const UPos& step, const DXpr& xpr) const
|
||||||
{
|
{
|
||||||
return mI->iforh(step, ex);
|
return DXpr(mI->ifor(step, xpr));
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "base/base.h"
|
#include "base/base.h"
|
||||||
#include "range_base.h"
|
#include "range_base.h"
|
||||||
#include "index_base.h"
|
#include "index_base.h"
|
||||||
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -24,6 +25,9 @@ namespace CNORXZ
|
||||||
virtual XIndexBase& operator+=(Int n) = 0;
|
virtual XIndexBase& operator+=(Int n) = 0;
|
||||||
virtual XIndexBase& operator-=(Int n) = 0;
|
virtual XIndexBase& operator-=(Int n) = 0;
|
||||||
|
|
||||||
|
virtual SizeT max() const = 0;
|
||||||
|
virtual IndexId<0> id() const = 0;
|
||||||
|
|
||||||
virtual DType operator*() const = 0;
|
virtual DType operator*() const = 0;
|
||||||
virtual DType operator->() const = 0;
|
virtual DType operator->() const = 0;
|
||||||
|
|
||||||
|
@ -32,15 +36,13 @@ namespace CNORXZ
|
||||||
|
|
||||||
virtual SizeT dim() const = 0;
|
virtual SizeT dim() const = 0;
|
||||||
virtual RangePtr range() const = 0;
|
virtual RangePtr range() const = 0;
|
||||||
virtual SizeT getStepSize(PtrId iptr) const = 0;
|
virtual UPos stepSize(const IndexId<0>& id) const = 0;
|
||||||
|
|
||||||
virtual String stringMeta() const = 0;
|
virtual String stringMeta() const = 0;
|
||||||
virtual DType meta() const = 0;
|
virtual DType meta() const = 0;
|
||||||
virtual XIndexBase& at(const DType& meta) = 0;
|
virtual XIndexBase& at(const DType& meta) = 0;
|
||||||
|
|
||||||
//virtual DExpr ifor(SizeT step, DExpr ex) const = 0;
|
virtual DXpr ifor(const UPos& step, const DXpr& xpr) const = 0;
|
||||||
//virtual DExpr iforh(SizeT step, DExpr ex) const = 0;
|
|
||||||
// ...!!!
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//Sptr<XIndexBase>& operator++(Sptr<XIndexBase>& i);
|
//Sptr<XIndexBase>& operator++(Sptr<XIndexBase>& i);
|
||||||
|
@ -72,6 +74,9 @@ namespace CNORXZ
|
||||||
virtual XIndex& operator+=(Int n) override final;
|
virtual XIndex& operator+=(Int n) override final;
|
||||||
virtual XIndex& operator-=(Int n) override final;
|
virtual XIndex& operator-=(Int n) override final;
|
||||||
|
|
||||||
|
virtual SizeT max() const override final;
|
||||||
|
virtual IndexId<0> id() const override final;
|
||||||
|
|
||||||
virtual DType operator*() const override final;
|
virtual DType operator*() const override final;
|
||||||
virtual DType operator->() const override final;
|
virtual DType operator->() const override final;
|
||||||
|
|
||||||
|
@ -80,15 +85,13 @@ namespace CNORXZ
|
||||||
|
|
||||||
virtual SizeT dim() const override final;
|
virtual SizeT dim() const override final;
|
||||||
virtual RangePtr range() const override final;
|
virtual RangePtr range() const override final;
|
||||||
virtual SizeT getStepSize(PtrId iptr) const override final;
|
virtual UPos stepSize(const IndexId<0>& id) const override final;
|
||||||
|
|
||||||
virtual String stringMeta() const override final;
|
virtual String stringMeta() const override final;
|
||||||
virtual DType meta() const override final;
|
virtual DType meta() const override final;
|
||||||
virtual XIndexBase& at(const DType& meta) override final;
|
virtual XIndexBase& at(const DType& meta) override final;
|
||||||
|
|
||||||
//virtual DExpr ifor(SizeT step, DExpr ex) const override final;
|
virtual DXpr ifor(const UPos& step, const DXpr& xpr) const override final;
|
||||||
//virtual DExpr iforh(SizeT step, DExpr ex) const override final;
|
|
||||||
// ....!!!!
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IndexPtr<Index,Meta> mI;
|
IndexPtr<Index,Meta> mI;
|
||||||
|
|
|
@ -12,18 +12,20 @@ namespace CNORXZ
|
||||||
* For *
|
* For *
|
||||||
***********/
|
***********/
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
constexpr For<L,Xpr>::For(SizeT size, const IndexId<L>& id, SizeT step, const Xpr& xpr) :
|
constexpr For<L,PosT,Xpr>::For(SizeT size, const IndexId<L>& id, const PosT& step, const Xpr& xpr) :
|
||||||
mSize(size),
|
mSize(size),
|
||||||
mId(id),
|
mId(id),
|
||||||
mStep(step),
|
|
||||||
mXpr(xpr),
|
mXpr(xpr),
|
||||||
|
mStep(step),
|
||||||
mExt(mXpr.rootSteps(mId))
|
mExt(mXpr.rootSteps(mId))
|
||||||
{}
|
{
|
||||||
|
static_assert(is_pos_type<PosT>::value, "got non-pos type");
|
||||||
|
}
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
inline SizeT For<L,Xpr>::operator()(const PosT1& mlast, const PosT2& last) const
|
inline SizeT For<L,PosT,Xpr>::operator()(const PosT1& mlast, const PosT2& last) const
|
||||||
{
|
{
|
||||||
for(SizeT i = 0; i != mSize; ++i){
|
for(SizeT i = 0; i != mSize; ++i){
|
||||||
const auto mpos = mlast + mStep * UPos(i);
|
const auto mpos = mlast + mStep * UPos(i);
|
||||||
|
@ -33,63 +35,65 @@ namespace CNORXZ
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
inline SizeT For<L,Xpr>::operator()() const
|
inline SizeT For<L,PosT,Xpr>::operator()() const
|
||||||
{
|
{
|
||||||
for(SizeT i = 0; i != mSize; ++i){
|
for(SizeT i = 0; i != mSize; ++i){
|
||||||
const SizeT mpos = mStep * UPos(i);
|
const auto mpos = mStep * UPos(i);
|
||||||
const auto pos = mExt * UPos(i);
|
const auto pos = mExt * UPos(i);
|
||||||
mXpr(mpos, pos);
|
mXpr(mpos, pos);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
inline decltype(auto) For<L,Xpr>::rootSteps(const IndexId<I>& id) const
|
inline decltype(auto) For<L,PosT,Xpr>::rootSteps(const IndexId<I>& id) const
|
||||||
{
|
{
|
||||||
return mXpr.rootSteps(id);
|
return mXpr.rootSteps(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************
|
/************
|
||||||
* SLFor *
|
* SFor *
|
||||||
*************/
|
************/
|
||||||
|
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
constexpr SLFor<N,L,S,Xpr>::SLFor(const IndexId<L>& id, const Xpr& xpr) :
|
constexpr SFor<N,L,PosT,Xpr>::SFor(const IndexId<L>& id, const PosT& step, const Xpr& xpr) :
|
||||||
mId(id),
|
mId(id),
|
||||||
|
mStep(step),
|
||||||
mXpr(xpr),
|
mXpr(xpr),
|
||||||
mExt(mXpr.RootSteps(mId))
|
mExt(mXpr.RootSteps(mId))
|
||||||
{}
|
{
|
||||||
|
static_assert(is_pos_type<PosT>::value, "got non-pos type");
|
||||||
|
}
|
||||||
|
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
constexpr SizeT SLFor<N,L,S,Xpr>::operator()(const PosT1& mlast, const PosT2& last) const
|
constexpr SizeT SFor<N,L,PosT,Xpr>::operator()(const PosT1& mlast, const PosT2& last) const
|
||||||
{
|
{
|
||||||
return exec<0>(mlast, last);
|
return exec<0>(mlast, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
constexpr SizeT SLFor<N,L,S,Xpr>::operator()() const
|
constexpr SizeT SFor<N,L,PosT,Xpr>::operator()() const
|
||||||
{
|
{
|
||||||
return exec<0>();
|
return exec<0>();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
constexpr decltype(auto) SLFor<N,L,S,Xpr>::rootSteps(const IndexId<I>& id) const
|
constexpr decltype(auto) SFor<N,L,PosT,Xpr>::rootSteps(const IndexId<I>& id) const
|
||||||
{
|
{
|
||||||
return mXpr.rootSteps(id);
|
return mXpr.rootSteps(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
template <SizeT I, class PosT1, class PosT2>
|
template <SizeT I, class PosT1, class PosT2>
|
||||||
constexpr SizeT SLFor<N,L,S,Xpr>::exec(const PosT1& mlast, const PosT2& last) const
|
constexpr SizeT SFor<N,L,PosT,Xpr>::exec(const PosT1& mlast, const PosT2& last) const
|
||||||
{
|
{
|
||||||
constexpr SPos<I> i;
|
constexpr SPos<I> i;
|
||||||
constexpr SPos<S> step;
|
const auto mpos = mlast + mStep * i;
|
||||||
const auto mpos = mlast + step * i;
|
|
||||||
const auto pos = last + mExt * i;
|
const auto pos = last + mExt * i;
|
||||||
mXpr(mpos, pos);
|
mXpr(mpos, pos);
|
||||||
if constexpr(I < N-1){
|
if constexpr(I < N-1){
|
||||||
|
@ -100,13 +104,12 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
constexpr SizeT SLFor<N,L,S,Xpr>::exec() const
|
constexpr SizeT SFor<N,L,PosT,Xpr>::exec() const
|
||||||
{
|
{
|
||||||
constexpr SPos<I> i;
|
constexpr SPos<I> i;
|
||||||
constexpr SPos<S> step;
|
const auto mpos = mStep * i;
|
||||||
const auto mpos = step * i;
|
|
||||||
const auto pos = mExt * i;
|
const auto pos = mExt * i;
|
||||||
mXpr(mpos, pos);
|
mXpr(mpos, pos);
|
||||||
if constexpr(I < N-1){
|
if constexpr(I < N-1){
|
||||||
|
@ -121,18 +124,24 @@ namespace CNORXZ
|
||||||
* TFor *
|
* TFor *
|
||||||
************/
|
************/
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
constexpr TFor<L,Xpr>::TFor(SizeT size, const IndexId<L>& id, SizeT step, const Xpr& xpr) :
|
constexpr TFor<L,PosT,Xpr>::TFor(SizeT size, const IndexId<L>& id, const PosT& step, const Xpr& xpr) :
|
||||||
mSize(size),
|
mSize(size),
|
||||||
mId(id),
|
mId(id),
|
||||||
mStep(step),
|
mStep(step),
|
||||||
mXpr(xpr),
|
mXpr(xpr),
|
||||||
mExt(mXpr.rootSteps(mId))
|
mExt(mXpr.rootSteps(mId))
|
||||||
{}
|
{
|
||||||
|
static_assert(is_pos_type<PosT>::value, "got non-pos type");
|
||||||
|
if constexpr(is_static_pos_type<PosT>::value){
|
||||||
|
static_assert(step.val() != 0, "step has to be non-zero for TPos");
|
||||||
|
}
|
||||||
|
CXZ_ASSERT(step.val() != 0, "step has to be non-zero for TPos");
|
||||||
|
}
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
inline SizeT TFor<L,Xpr>::operator()(const PosT1& mlast, const PosT2& last) const
|
inline SizeT TFor<L,PosT,Xpr>::operator()(const PosT1& mlast, const PosT2& last) const
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#pragma omp parallel shared(mXpr) private(i)
|
#pragma omp parallel shared(mXpr) private(i)
|
||||||
|
@ -148,8 +157,8 @@ namespace CNORXZ
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
inline SizeT TFor<L,Xpr>::operator()() const
|
inline SizeT TFor<L,PosT,Xpr>::operator()() const
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#pragma omp parallel shared(mXpr) private(i)
|
#pragma omp parallel shared(mXpr) private(i)
|
||||||
|
@ -165,9 +174,9 @@ namespace CNORXZ
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
inline decltype(auto) TFor<L,Xpr>::rootSteps(const IndexId<I>& id) const
|
inline decltype(auto) TFor<L,PosT,Xpr>::rootSteps(const IndexId<I>& id) const
|
||||||
{
|
{
|
||||||
return mXpr.rootSteps(id);
|
return mXpr.rootSteps(id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
class For : public XprInterface<For<L,Xpr>>
|
class For : public XprInterface<For<L,PosT,Xpr>>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DEFAULT_MEMBERS(For);
|
DEFAULT_MEMBERS(For);
|
||||||
|
|
||||||
constexpr For(SizeT size, const IndexId<L>& id, SizeT step, const Xpr& xpr);
|
constexpr For(SizeT size, const IndexId<L>& id, const PosT& step, const Xpr& xpr);
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
inline SizeT operator()(const PosT1& mlast, const PosT2& last) const;
|
inline SizeT operator()(const PosT1& mlast, const PosT2& last) const;
|
||||||
|
@ -28,20 +28,20 @@ namespace CNORXZ
|
||||||
SizeT mSize = 0;
|
SizeT mSize = 0;
|
||||||
IndexId<L> mId;
|
IndexId<L> mId;
|
||||||
Xpr mXpr;
|
Xpr mXpr;
|
||||||
UPos mStep;
|
PosT mStep; // one-dim
|
||||||
typedef decltype(mXpr.rootSteps(mId)) PosT;
|
typedef decltype(mXpr.rootSteps(mId)) XPosT;
|
||||||
PosT mExt;
|
XPosT mExt;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// unrolled loop:
|
// unrolled loop:
|
||||||
template <SizeT N, SizeT L, SizeT S, class Xpr>
|
template <SizeT N, SizeT L, class PosT, class Xpr>
|
||||||
class SLFor : public XprInterface<SLFor<N,L,S,Xpr>>
|
class SFor : public XprInterface<SFor<N,L,PosT,Xpr>>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DEFAULT_MEMBERS(SLFor);
|
DEFAULT_MEMBERS(SFor);
|
||||||
|
|
||||||
constexpr SLFor(const IndexId<L>& id, const Xpr& xpr);
|
constexpr SFor(const IndexId<L>& id, const PosT& step, const Xpr& xpr);
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
constexpr SizeT operator()(const PosT1& mlast, const PosT2& last) const;
|
constexpr SizeT operator()(const PosT1& mlast, const PosT2& last) const;
|
||||||
|
@ -61,20 +61,21 @@ namespace CNORXZ
|
||||||
|
|
||||||
IndexId<L> mId;
|
IndexId<L> mId;
|
||||||
Xpr mXpr;
|
Xpr mXpr;
|
||||||
typedef decltype(mXpr.RootSteps(mId)) PosT;
|
PosT mStep;
|
||||||
PosT mExt;
|
typedef decltype(mXpr.RootSteps(mId)) XPosT;
|
||||||
|
XPosT mExt;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// multi-threading
|
// multi-threading
|
||||||
template <SizeT L, class Xpr>
|
template <SizeT L, class PosT, class Xpr>
|
||||||
class TFor : public XprInterface<TFor<L,Xpr>>
|
class TFor : public XprInterface<TFor<L,PosT,Xpr>>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DEFAULT_MEMBERS(TFor);
|
DEFAULT_MEMBERS(TFor);
|
||||||
|
|
||||||
constexpr TFor(SizeT size, const IndexId<L>& id, SizeT step, const Xpr& xpr);
|
constexpr TFor(SizeT size, const IndexId<L>& id, const PosT& step, const Xpr& xpr);
|
||||||
|
|
||||||
template <class PosT1, class PosT2>
|
template <class PosT1, class PosT2>
|
||||||
inline SizeT operator()(const PosT1& mlast, const PosT2& last) const;
|
inline SizeT operator()(const PosT1& mlast, const PosT2& last) const;
|
||||||
|
@ -88,9 +89,9 @@ namespace CNORXZ
|
||||||
SizeT mSize = 0;
|
SizeT mSize = 0;
|
||||||
IndexId<L> mId = 0;
|
IndexId<L> mId = 0;
|
||||||
Xpr mXpr;
|
Xpr mXpr;
|
||||||
UPos mStep;
|
PosT mStep;
|
||||||
typedef decltype(mXpr.rootSteps(mId)) PosT;
|
typedef decltype(mXpr.rootSteps(mId)) XPosT;
|
||||||
PosT mExt;
|
XPosT mExt;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
explicit constexpr IndexId<I>::IndexId(PtrId id) :
|
constexpr IndexId<I>::IndexId(PtrId id) :
|
||||||
mId(id)
|
mId(id)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
#include "vpos_type.cc.h"
|
#include "vpos_type.cc.h"
|
||||||
#include "pos_type.cc.h"
|
#include "pos_type.cc.h"
|
||||||
|
#include "xpr_base.cc.h"
|
||||||
#include "for.cc.h"
|
#include "for.cc.h"
|
||||||
|
#include "index_id.cc.h"
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
|
||||||
#include "vpos_type.h"
|
#include "vpos_type.h"
|
||||||
#include "pos_type.h"
|
#include "pos_type.h"
|
||||||
|
#include "xpr_base.h"
|
||||||
#include "for.h"
|
#include "for.h"
|
||||||
|
#include "index_id.h"
|
||||||
|
|
||||||
#include "xpr.cc.h"
|
#include "xpr.cc.h"
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace CNORXZ
|
||||||
template <class Xpr>
|
template <class Xpr>
|
||||||
DPos VXpr<Xpr>::vrootSteps(const IndexId<0>& id) const
|
DPos VXpr<Xpr>::vrootSteps(const IndexId<0>& id) const
|
||||||
{
|
{
|
||||||
return DPos(this->rootSteps(ptrId));
|
return DPos(this->rootSteps(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/************
|
/************
|
||||||
|
@ -45,15 +45,13 @@ namespace CNORXZ
|
||||||
************/
|
************/
|
||||||
|
|
||||||
template <class Xpr>
|
template <class Xpr>
|
||||||
explicit DXpr::DXpr(const Xpr& a) :
|
DXpr::DXpr(const Xpr& a) :
|
||||||
ObjHandle<VXprBase>(VXpr<Xpr>(a))
|
ObjHandle<VXprBase>(std::make_unique<VXpr<Xpr>>(a))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class PosT>
|
inline SizeT DXpr::operator()(const UPos& mlast, const DPos& last) const
|
||||||
inline SizeT DXpr::operator()(const UPos& mlast, const PosT& last) const
|
|
||||||
{
|
{
|
||||||
DPosRef dlast(&last);
|
return mC->vexec(mlast, last);
|
||||||
return mC->vexec(mlast, dlast);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline SizeT DXpr::operator()() const
|
inline SizeT DXpr::operator()() const
|
||||||
|
@ -64,7 +62,7 @@ namespace CNORXZ
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
inline DPos DXpr::rootSteps(const IndexId<I>& id) const
|
inline DPos DXpr::rootSteps(const IndexId<I>& id) const
|
||||||
{
|
{
|
||||||
return mC->rootSteps(IndexId<0>(id.id()));
|
return mC->vrootSteps(IndexId<0>(id.id()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,7 @@ namespace CNORXZ
|
||||||
template <class Xpr>
|
template <class Xpr>
|
||||||
explicit DXpr(const Xpr& a);
|
explicit DXpr(const Xpr& a);
|
||||||
|
|
||||||
template <class PosT>
|
inline SizeT operator()(const UPos& mlast, const DPos& last) const;
|
||||||
inline SizeT operator()(const UPos& mlast, const PosT& last) const;
|
|
||||||
inline SizeT operator()() const;
|
inline SizeT operator()() const;
|
||||||
|
|
||||||
template <SizeT I>
|
template <SizeT I>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "range_base.h"
|
#include "range_base.h"
|
||||||
#include "index_base.h"
|
#include "index_base.h"
|
||||||
#include "xindex.h"
|
#include "xindex.h"
|
||||||
|
#include "xpr/xpr.h"
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
|
@ -33,6 +34,9 @@ namespace CNORXZ
|
||||||
YIndex& operator+=(Int n);
|
YIndex& operator+=(Int n);
|
||||||
YIndex& operator-=(Int n);
|
YIndex& operator-=(Int n);
|
||||||
|
|
||||||
|
SizeT max() const;
|
||||||
|
IndexId<0> id() const;
|
||||||
|
|
||||||
DType operator*() const;
|
DType operator*() const;
|
||||||
DType operator->() const;
|
DType operator->() const;
|
||||||
|
|
||||||
|
@ -41,14 +45,13 @@ namespace CNORXZ
|
||||||
|
|
||||||
SizeT dim() const;
|
SizeT dim() const;
|
||||||
Sptr<YRange> range() const;
|
Sptr<YRange> range() const;
|
||||||
SizeT getStepSize(PtrId iptr) const;
|
UPos stepSize(const IndexId<0> id) const;
|
||||||
|
|
||||||
String stringMeta() const;
|
String stringMeta() const;
|
||||||
DType meta() const;
|
DType meta() const;
|
||||||
YIndex& at(const DType& meta);
|
YIndex& at(const DType& meta);
|
||||||
|
|
||||||
//DExpr ifor(SizeT step, DExpr ex) const;
|
DXpr ifor(const UPos& step, const DXpr& xpr) const;
|
||||||
//DExpr iforh(SizeT step, DExpr ex) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,16 @@ namespace CNORXZ
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SizeT CIndex::max() const
|
||||||
|
{
|
||||||
|
return mRangePtr->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexId<0> CIndex::id() const
|
||||||
|
{
|
||||||
|
return IndexId<0>(this->ptrId());
|
||||||
|
}
|
||||||
|
|
||||||
SizeT CIndex::operator*() const
|
SizeT CIndex::operator*() const
|
||||||
{
|
{
|
||||||
return IB::mPos;
|
return IB::mPos;
|
||||||
|
@ -83,9 +93,9 @@ namespace CNORXZ
|
||||||
return mRangePtr;
|
return mRangePtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeT CIndex::getStepSize(PtrId iptr) const
|
UPos CIndex::stepSize(const IndexId<0>& id) const
|
||||||
{
|
{
|
||||||
return iptr == this->ptrId() ? 1 : 0;
|
return UPos(id == this->id() ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
String CIndex::stringMeta() const
|
String CIndex::stringMeta() const
|
||||||
|
|
|
@ -116,9 +116,9 @@ namespace CNORXZ
|
||||||
return mI->range();
|
return mI->range();
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeT DIndex::getStepSize(PtrId iptr) const
|
UPos DIndex::stepSize(const IndexId<0>& id) const
|
||||||
{
|
{
|
||||||
return mI->getStepSize(iptr);
|
return mI->stepSize(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
String DIndex::stringMeta() const
|
String DIndex::stringMeta() const
|
||||||
|
@ -138,7 +138,9 @@ namespace CNORXZ
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
//DExpr DIndex::ifor(SizeT step, DExpr ex) const;
|
DXpr DIndex::ifor(const UPos& step, const DXpr& xpr) const
|
||||||
//DExpr DIndex::iforh(SizeT step, DExpr ex) const;
|
{
|
||||||
|
return DXpr(mI->ifor(step, xpr));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,20 @@ namespace CNORXZ
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SizeT YIndex::max() const
|
||||||
|
{
|
||||||
|
SizeT o = 1;
|
||||||
|
for(auto& i: mIs){
|
||||||
|
o *= i->max();
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexId<0> YIndex::id() const
|
||||||
|
{
|
||||||
|
return IndexId<0>(this->ptrId());
|
||||||
|
}
|
||||||
|
|
||||||
DType YIndex::operator*() const
|
DType YIndex::operator*() const
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
|
@ -122,11 +136,11 @@ namespace CNORXZ
|
||||||
return mRangePtr;
|
return mRangePtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeT YIndex::getStepSize(PtrId iptr) const
|
UPos YIndex::stepSize(const IndexId<0> id) const
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
// sub inds !!!
|
// sub inds !!!
|
||||||
return 0;
|
return UPos(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
String YIndex::stringMeta() const
|
String YIndex::stringMeta() const
|
||||||
|
@ -156,20 +170,13 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
DExpr YIndex::ifor(SizeT step, DExpr ex) const
|
DXpr YIndex::ifor(const UPos& step, const DXpr& xpr) const
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
return DExpr();
|
return DXpr();
|
||||||
}
|
}
|
||||||
|
|
||||||
DExpr YIndex::iforh(SizeT step, DExpr ex) const
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
return DExpr();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* YRangeFactory *
|
* YRangeFactory *
|
||||||
**********************/
|
**********************/
|
||||||
|
|
Loading…
Reference in a new issue