preliminray fix of the meta data bug in non-containing ranges/indices
This commit is contained in:
parent
3f20bc1f07
commit
66be374688
1 changed files with 17 additions and 4 deletions
|
@ -139,7 +139,7 @@ namespace MultiArrayTools
|
||||||
******************/
|
******************/
|
||||||
|
|
||||||
template <bool HASMETACONT>
|
template <bool HASMETACONT>
|
||||||
struct MetaPtrSetter
|
struct MetaPtrHandle
|
||||||
{
|
{
|
||||||
template <class Range>
|
template <class Range>
|
||||||
static const typename Range::MetaType* set(Range* r)
|
static const typename Range::MetaType* set(Range* r)
|
||||||
|
@ -147,22 +147,33 @@ namespace MultiArrayTools
|
||||||
return &r->get(0);
|
return &r->get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename U, class Range>
|
||||||
|
static inline U getMeta(U* metaPtr, size_t pos, std::shared_ptr<Range> r)
|
||||||
|
{
|
||||||
|
return metaPtr[pos];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct MetaPtrSetter<false>
|
struct MetaPtrHandle<false>
|
||||||
{
|
{
|
||||||
template <class Range>
|
template <class Range>
|
||||||
static const typename Range::MetaType* set(Range* r)
|
static const typename Range::MetaType* set(Range* r)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename U, class Range>
|
||||||
|
static inline U getMeta(U* metaPtr, size_t pos, std::shared_ptr<Range> r)
|
||||||
|
{
|
||||||
|
return r->get(pos);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename U, SpaceType TYPE>
|
template <typename U, SpaceType TYPE>
|
||||||
SingleIndex<U,TYPE>::SingleIndex(const std::shared_ptr<SingleRange<U,TYPE> >& range) :
|
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(MetaPtrSetter<SingleIndex<U,TYPE>::RangeType::HASMETACONT>::set
|
mMetaPtr(MetaPtrHandle<SingleIndex<U,TYPE>::RangeType::HASMETACONT>::set
|
||||||
( dynamic_cast<RangeType*>(IB::mRangePtr.get() ) ) ) {}
|
( dynamic_cast<RangeType*>(IB::mRangePtr.get() ) ) ) {}
|
||||||
|
|
||||||
template <typename U, SpaceType TYPE>
|
template <typename U, SpaceType TYPE>
|
||||||
|
@ -209,7 +220,9 @@ namespace MultiArrayTools
|
||||||
template <typename U, SpaceType TYPE>
|
template <typename U, SpaceType TYPE>
|
||||||
U SingleIndex<U,TYPE>::meta()
|
U SingleIndex<U,TYPE>::meta()
|
||||||
{
|
{
|
||||||
return mMetaPtr[IB::mPos];
|
return MetaPtrHandle<SingleIndex<U,TYPE>::RangeType::HASMETACONT>::getMeta
|
||||||
|
( mMetaPtr, IB::mPos,
|
||||||
|
std::dynamic_pointer_cast<SingleRange<U,TYPE> const>( IB::mRangePtr ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename U, SpaceType TYPE>
|
template <typename U, SpaceType TYPE>
|
||||||
|
|
Loading…
Reference in a new issue