1 #ifndef _INTLISTORDER_HPP 2 #define _INTLISTORDER_HPP 15 template <
bool AlsoEqual,
19 constexpr
bool _areOrderedMin2Ints();
25 template <
bool AlsoEqual,
27 constexpr
bool _areOrdered()
29 if constexpr(
sizeof...(Ints)<2)
32 return _areOrderedMin2Ints<AlsoEqual,Ints...>();
36 template <
bool AlsoEqual,
40 constexpr
bool _areOrderedMin2Ints()
42 constexpr
bool compa=AlsoEqual?(First<=Second):(First<Second);
44 return compa
and _areOrdered<AlsoEqual,Second,Tail...>();
50 constexpr
bool areOrdered=
51 _areOrdered<
true,Ints...>();
57 _areOrdered<
false,Ints...>();
68 #define DEFINE_SEARCH(DESCRIPTION,FIRST_OR_LAST,NAME,COMPA) 77 constexpr int _ ## NAME() 79 constexpr bool matching=(Head COMPA I); 80 constexpr bool exitAtFirst=(FIRST_OR_LAST==FIRST_OF); 81 constexpr bool emptyTail=(sizeof...(Tail)==0
); 82 constexpr int newPos=(matching?NParsed:Pos); 84 if constexpr((not emptyTail) and not (matching and exitAtFirst)) 85 return _ ## NAME<I,newPos,NParsed+1
,Tail...>(); 87 if constexpr(matching and (exitAtFirst or emptyTail)) 100 _ ## NAME<I,sizeof...(Ints),0
,Ints...>(); 106 constexpr int NAME<I> = 121 #undef DEFINE_FIRST_OF 122 #undef DEFINE_LAST_OF #define LAST_OF
Constant used to parse last-occurrency case.
#define FIRST_OF
Constant used to parse first-occurrency case.
constexpr bool areOrderedAndDifferent
Returns true if all elements are weak ascending-ordered.
#define DEFINE_SEARCH(DESCRIPTION, FIRST_OR_LAST, NAME, COMPA)
Defines a searcher named NAME making the comparison COMPA with an external I.