pos_type: more constexpr

This commit is contained in:
Christian Zimmermann 2025-03-31 21:45:33 -07:00
parent d997de17a8
commit bcdbb12b4c
2 changed files with 15 additions and 2 deletions

View file

@ -288,7 +288,8 @@ namespace CNORXZ
static constexpr decltype(auto) mks(const PosT& pos, std::index_sequence<Is...> is)
{
if constexpr(is_static_pos_type<PosT>::value){
return SFPos<pos.val(),Is...> {};
constexpr PosT posx;
return SFPos<posx.val(),Is...> {};
}
else {
return mk(pos, &SFPos<0,Is...>::permutation[0]);
@ -838,12 +839,21 @@ namespace CNORXZ
return std::get<I>(mP);
}
template <class BPosT, class... OPosTs>
template <SizeT I>
constexpr decltype(auto) EPos<BPosT,OPosTs...>::constexprget(CSizeT<I> i) const
{
constexpr decltype(std::get<I>(mP).val()) x;
return x;
}
template <class BPosT, class... OPosTs>
template <SizeT... Is>
constexpr decltype(auto) EPos<BPosT,OPosTs...>::ival(std::index_sequence<Is...> is) const
{
if constexpr(is_static_pos_type<EPos<BPosT,OPosTs...>>::value){
return std::index_sequence<std::get<Is>(mP).val()...>{};
//return std::index_sequence<std::get<Is>(mP).val()...>{};
return std::index_sequence<constexprget(CSizeT<Is>{})...>{};
}
else {
return Arr<SizeT,is.size()> { (BPosT::val()+std::get<Is>(mP).val())... };

View file

@ -286,6 +286,9 @@ namespace CNORXZ
private:
Tuple<OPosTs...> mP;
template <SizeT I>
constexpr decltype(auto) constexprget(CSizeT<I> i) const;
template <SizeT... Is>
constexpr decltype(auto) ival(std::index_sequence<Is...> is) const;