yrange()/mrange(): add xpl version
This commit is contained in:
parent
21a2ca0b72
commit
af47dd01f9
5 changed files with 24 additions and 1 deletions
|
@ -808,6 +808,12 @@ namespace CNORXZ
|
||||||
return MRangeFactory<Ranges...>(std::make_tuple(rs...)).create();
|
return MRangeFactory<Ranges...>(std::make_tuple(rs...)).create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class... Ranges>
|
||||||
|
Sptr<MRange<Ranges...>> xplMrange(const Sptr<Ranges>&... rs)
|
||||||
|
{
|
||||||
|
return std::dynamic_pointer_cast<MRange<Ranges...>>( mrange( rs... ) );
|
||||||
|
}
|
||||||
|
|
||||||
template <class... Ranges>
|
template <class... Ranges>
|
||||||
Sptr<MRange<Ranges...>> RangeCast<MRange<Ranges...>>::func(const RangePtr& r)
|
Sptr<MRange<Ranges...>> RangeCast<MRange<Ranges...>>::func(const RangePtr& r)
|
||||||
{
|
{
|
||||||
|
|
|
@ -405,6 +405,12 @@ namespace CNORXZ
|
||||||
template <class... Ranges>
|
template <class... Ranges>
|
||||||
RangePtr mrange(const Sptr<Ranges>&... rs);
|
RangePtr mrange(const Sptr<Ranges>&... rs);
|
||||||
|
|
||||||
|
/** Create MRange pointer.
|
||||||
|
@param rs Pointer to sub-ranges.
|
||||||
|
*/
|
||||||
|
template <class... Ranges>
|
||||||
|
Sptr<MRange<Ranges...>> xplMrange(const Sptr<Ranges>&... rs);
|
||||||
|
|
||||||
/** ****
|
/** ****
|
||||||
Specialization of RangeCast for MRange.
|
Specialization of RangeCast for MRange.
|
||||||
@see RangeCast.
|
@see RangeCast.
|
||||||
|
|
|
@ -343,6 +343,12 @@ namespace CNORXZ
|
||||||
*/
|
*/
|
||||||
RangePtr yrange(const Vector<RangePtr>& rs);
|
RangePtr yrange(const Vector<RangePtr>& rs);
|
||||||
|
|
||||||
|
/** Create YRange from sub-ranges.
|
||||||
|
@param rs Vector of pointers to the sub-ranges used by the YRange.
|
||||||
|
@return A shared pointer to the created YRange.
|
||||||
|
*/
|
||||||
|
Sptr<YRange> xplYrange(const Vector<RangePtr>& rs);
|
||||||
|
|
||||||
/** ****
|
/** ****
|
||||||
Specialize RangeCast for casts to YRange.
|
Specialize RangeCast for casts to YRange.
|
||||||
@see RangeCast
|
@see RangeCast
|
||||||
|
|
|
@ -668,6 +668,11 @@ namespace CNORXZ
|
||||||
return YRangeFactory(rs).create();
|
return YRangeFactory(rs).create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sptr<YRange> xplYrange(const Vector<RangePtr>& rs)
|
||||||
|
{
|
||||||
|
return std::dynamic_pointer_cast<YRange>( yrange( rs ) );
|
||||||
|
}
|
||||||
|
|
||||||
/*=================+
|
/*=================+
|
||||||
| Range Casts |
|
| Range Casts |
|
||||||
+=================*/
|
+=================*/
|
||||||
|
|
|
@ -441,7 +441,7 @@ namespace CNORXZ
|
||||||
auto mr = ifor<0,N>( [&](auto mu) {
|
auto mr = ifor<0,N>( [&](auto mu) {
|
||||||
return split( global->space()[CSizeT<mu>{}], geom->space()[CSizeT<mu>{}] );
|
return split( global->space()[CSizeT<mu>{}], geom->space()[CSizeT<mu>{}] );
|
||||||
}, [](const auto&... r) { return xplMrange(r,...); } );
|
}, [](const auto&... r) { return xplMrange(r,...); } );
|
||||||
typedef std::remove_reference<decltype(mr)>::type RangeI;
|
typedef std::remove_reference<decltype(*mr)>::type RangeI;
|
||||||
return RRangeFactory<RangeI,RangeK>(mr, geom).create(); // explicit range type!!!
|
return RRangeFactory<RangeI,RangeK>(mr, geom).create(); // explicit range type!!!
|
||||||
}
|
}
|
||||||
// other cases!!!
|
// other cases!!!
|
||||||
|
|
Loading…
Reference in a new issue