singkle range: return range size when call by meta data is out of region
This commit is contained in:
parent
6326b32d6a
commit
3f7cbceec9
2 changed files with 26 additions and 13 deletions
|
@ -34,10 +34,12 @@ namespace MultiArrayTools
|
||||||
constexpr size_t NEXT = Op::SIZE;
|
constexpr size_t NEXT = Op::SIZE;
|
||||||
const ExtType nxpos = last;
|
const ExtType nxpos = last;
|
||||||
const size_t pos = mIndPtr->posAt( mOp.get( nxpos ) );
|
const size_t pos = mIndPtr->posAt( mOp.get( nxpos ) );
|
||||||
|
if(pos != mIndPtr->max()){
|
||||||
const ExtType npos = last + mExt*pos;
|
const ExtType npos = last + mExt*pos;
|
||||||
const size_t mnpos = PosForward<ForType::DEFAULT>::valuex(mlast, mStep, pos);
|
const size_t mnpos = PosForward<ForType::DEFAULT>::valuex(mlast, mStep, pos);
|
||||||
mExpr(mnpos, Getter<NEXT>::template getX<ExtType>( npos ) );
|
mExpr(mnpos, Getter<NEXT>::template getX<ExtType>( npos ) );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class Op, class Index, class Expr, SpaceType STYPE>
|
template <class Op, class Index, class Expr, SpaceType STYPE>
|
||||||
inline void OpExpr<Op,Index,Expr,STYPE>::operator()(size_t mlast)
|
inline void OpExpr<Op,Index,Expr,STYPE>::operator()(size_t mlast)
|
||||||
|
@ -46,10 +48,12 @@ namespace MultiArrayTools
|
||||||
constexpr size_t NEXT = Op::SIZE;
|
constexpr size_t NEXT = Op::SIZE;
|
||||||
const ExtType nxpos = last;
|
const ExtType nxpos = last;
|
||||||
const size_t pos = mIndPtr->posAt( mOp.get( nxpos ) );
|
const size_t pos = mIndPtr->posAt( mOp.get( nxpos ) );
|
||||||
|
if(pos != mIndPtr->max()){
|
||||||
const ExtType npos = last + mExt*pos;
|
const ExtType npos = last + mExt*pos;
|
||||||
const size_t mnpos = PosForward<ForType::DEFAULT>::valuex(mlast, mStep, pos);
|
const size_t mnpos = PosForward<ForType::DEFAULT>::valuex(mlast, mStep, pos);
|
||||||
mExpr(mnpos, Getter<NEXT>::template getX<ExtType>( npos ));
|
mExpr(mnpos, Getter<NEXT>::template getX<ExtType>( npos ));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class Op, class Index, class Expr, SpaceType STYPE>
|
template <class Op, class Index, class Expr, SpaceType STYPE>
|
||||||
auto OpExpr<Op,Index,Expr,STYPE>::rootSteps(std::intptr_t iPtrNum) const
|
auto OpExpr<Op,Index,Expr,STYPE>::rootSteps(std::intptr_t iPtrNum) const
|
||||||
|
|
|
@ -132,7 +132,16 @@ namespace MultiArrayTools
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t at(const U& in) const { return mMap.at(in); }
|
size_t at(const U& in) const
|
||||||
|
{
|
||||||
|
auto x = mMap.find(in);
|
||||||
|
if(x != mMap.end()){
|
||||||
|
return x->second;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return mMap.size();
|
||||||
|
}
|
||||||
|
}
|
||||||
size_t count(const U& in) const { return mMap.count(in); }
|
size_t count(const U& in) const { return mMap.count(in); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -540,12 +549,6 @@ namespace MultiArrayTools
|
||||||
return mSpace[pos];
|
return mSpace[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename U, SpaceType TYPE, size_t S>
|
|
||||||
size_t GenSingleRange<U,TYPE,S>::getMeta(const U& metaPos) const
|
|
||||||
{
|
|
||||||
return mMSpace.at(metaPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <size_t SIZE>
|
template <size_t SIZE>
|
||||||
inline size_t getStatSizeOrDyn(size_t size)
|
inline size_t getStatSizeOrDyn(size_t size)
|
||||||
{
|
{
|
||||||
|
@ -558,6 +561,12 @@ namespace MultiArrayTools
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename U, SpaceType TYPE, size_t S>
|
||||||
|
size_t GenSingleRange<U,TYPE,S>::getMeta(const U& metaPos) const
|
||||||
|
{
|
||||||
|
return mMSpace.at(metaPos);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename U, SpaceType TYPE, size_t S>
|
template <typename U, SpaceType TYPE, size_t S>
|
||||||
size_t GenSingleRange<U,TYPE,S>::size() const
|
size_t GenSingleRange<U,TYPE,S>::size() const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue