1 #ifndef _INTSEQINSERT_HPP 2 #define _INTSEQINSERT_HPP 6 #include <ints/IntListOrder.hpp> 7 #include <ints/IntSeq.hpp> 8 #include <ints/Ranges.hpp> 9 #include <metaprogramming/UniversalReferences.hpp> 28 if constexpr(Ins<=HeadAft)
30 if constexpr(Ins==HeadAft
and IgnoreIfPresent)
31 return IntSeq<Bef...,HeadAft,TailAft...>{};
34 return IntSeq<Bef...,Ins,HeadAft+IncrAft,(TailAft+IncrAft)...>{};
37 if constexpr(
sizeof...(TailAft)>0)
38 return _insertInOrderedIntSeq<Ins,IncrAft,IgnoreIfPresent>(IntSeq<Bef...,HeadAft>{},IntSeq<TailAft...>{});
41 return IntSeq<Bef...,HeadAft,Ins>{};
48 DECLAUTO _insertInOrderedIntSeq(
const IntSeq<>&,
const IntSeq<>&)
66 bool IgnoreIfPresent=
false>
67 using InsertInOrderedIntSeq=
68 decltype(_insertInOrderedIntSeq<Ins,IncrAft,IgnoreIfPresent>(intSeq<>,
typename ConstrainIsOrderedIntSeq<IS>::type{}));
75 template <
bool IgnoreIfPresent,
86 InsertInOrderedIntSeq<HeadToIns,Is,HeadIncrAft,IgnoreIfPresent> tmp;
89 if constexpr(
sizeof...(TailToIns)==0)
93 return _InsertIntSeqInOrderedIntSeq<IgnoreIfPresent>(intSeq<TailToIns...>,intSeq<TailIncrAft...>,tmp);
99 template <
bool IgnoreIfPresent,
101 DECLAUTO _InsertIntSeqInOrderedIntSeq(
const IntSeq<>& noIns,
const IntSeq<>& noIncrAft,
const Is&)
107 template <
typename ToIns,
109 typename IncrAft=IntSeqOfSameNumb<ToIns::size,0>,
110 bool IgnoreIfPresent=
false,
111 typename=EnableIf<isIntSeq<ToIns>
and 112 isIntSeq<IncrAft>
and 113 ToIns::size==IncrAft::size>>
114 using InsertIntSeqInOrderedIntSeq=
115 decltype(_InsertIntSeqInOrderedIntSeq<IgnoreIfPresent>(ToIns{},IncrAft{},Is{}));
decltype(auto) _insertInOrderedIntSeq(const IntSeq< Bef... > &, const IntSeq< HeadAft, TailAft... > &)
decltype(auto) _InsertIntSeqInOrderedIntSeq(const IntSeq< HeadToIns, TailToIns... > &toIns, const IntSeq< HeadIncrAft, TailIncrAft... > &incrAft, const Is &)
#define DECLAUTO
Short name for decltype(auto)