meta ref in index + dynamic function
This commit is contained in:
parent
ea139067dd
commit
7fdaef7b2f
3 changed files with 24 additions and 3 deletions
|
@ -41,6 +41,16 @@ namespace MultiArrayHelper
|
|||
}
|
||||
};
|
||||
|
||||
template <typename T, class Func>
|
||||
struct dynamic_function
|
||||
{
|
||||
template <typename... Us>
|
||||
static inline T apply(const Func& f, Us... args)
|
||||
{
|
||||
return f(args...);
|
||||
}
|
||||
}
|
||||
|
||||
} // end namespace MultiArrayHelper
|
||||
|
||||
#endif
|
||||
|
|
|
@ -259,6 +259,7 @@ namespace MultiArrayTools
|
|||
|
||||
};
|
||||
|
||||
|
||||
template <typename T, class Op, class IndexType>
|
||||
class Contraction : public OperationTemplate<T,Contraction<T,Op,IndexType> >
|
||||
{
|
||||
|
|
|
@ -48,6 +48,7 @@ namespace MultiArrayTools
|
|||
int mm(std::intptr_t idxPtrNum);
|
||||
|
||||
U meta();
|
||||
U* metaPtr();
|
||||
SingleIndex& at(const U& metaPos);
|
||||
|
||||
size_t dim(); // = 1
|
||||
|
@ -72,6 +73,8 @@ namespace MultiArrayTools
|
|||
auto iforh(Expr ex) const
|
||||
-> For<SingleIndex<U,TYPE>,Expr,ForType::HIDDEN>;
|
||||
|
||||
private:
|
||||
U* mMetaPtr;
|
||||
};
|
||||
|
||||
template <typename U, SpaceType TYPE>
|
||||
|
@ -110,7 +113,7 @@ namespace MultiArrayTools
|
|||
static constexpr bool defaultable = false;
|
||||
static constexpr size_t ISSTATIC = 0;
|
||||
static constexpr size_t SIZE = -1;
|
||||
|
||||
static constexpr bool HASMETACONT = true;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -136,7 +139,8 @@ namespace MultiArrayTools
|
|||
|
||||
template <typename U, SpaceType TYPE>
|
||||
SingleIndex<U,TYPE>::SingleIndex(const std::shared_ptr<SingleRange<U,TYPE> >& range) :
|
||||
IndexInterface<SingleIndex<U,TYPE>,U>(range, 0) {}
|
||||
IndexInterface<SingleIndex<U,TYPE>,U>(range, 0),
|
||||
mMetaPtr(&IB::mRangePtr->get(0)) {}
|
||||
|
||||
template <typename U, SpaceType TYPE>
|
||||
IndexType SingleIndex<U,TYPE>::type() const
|
||||
|
@ -182,7 +186,13 @@ namespace MultiArrayTools
|
|||
template <typename U, SpaceType TYPE>
|
||||
U SingleIndex<U,TYPE>::meta()
|
||||
{
|
||||
return std::dynamic_pointer_cast<SingleRange<U,TYPE> const>( IB::mRangePtr )->get( IB::pos() );
|
||||
return mMetaPtr[IB::mPos];
|
||||
}
|
||||
|
||||
template <typename U, SpaceType TYPE>
|
||||
U* SingleIndex<U,TYPE>::metaPtr()
|
||||
{
|
||||
return mMetaPtr;
|
||||
}
|
||||
|
||||
template <typename U, SpaceType TYPE>
|
||||
|
|
Loading…
Reference in a new issue