17 constexpr auto Join (
auto&&) noexcept
22 constexpr auto Join (
auto&& sep,
auto&& first,
auto&&... strings)
noexcept
24 if constexpr (
sizeof... (strings))
25 return first + ((sep + strings) + ...);
30 constexpr auto JoinTup (
auto&& stringsTuple,
auto&& sep)
noexcept
32 return std::apply ([&sep]<
typename... Ts> (Ts&&... args) {
return Join (sep, std::forward<Ts> (args)...); },
38 constexpr size_t DecimalWidth (std::integral
auto v,
int base = 10)
43 size_t count =
static_cast<bool> (v < 0);
53 template<std::
integral auto Value,
typename Char =
char>
58 std::to_chars (result.
Data_, result.
Data_ + width, Value);
62 template<
typename Tup1,
typename Tup2,
63 size_t Tup1Size = std::tuple_size_v<std::decay_t<Tup1>>,
64 size_t Tup2Size = std::tuple_size_v<std::decay_t<Tup2>>
66 requires (Tup1Size == Tup2Size)
67 constexpr auto ZipWith (Tup1&& tup1,
auto&& sep, Tup2&& tup2)
noexcept
69 return [&]<
size_t... I> (std::index_sequence<I...>)
71 return std::tuple { (std::get<I> (tup1) + sep + std::get<I> (tup2))... };
72 } (std::make_index_sequence<Tup1Size> {});
77 template<
typename T1,
typename T2>
78 consteval bool JMEq (
const T1& v1,
const T2& v2)
80 if constexpr (!std::is_same_v<T1, T2>)
87 template<const auto& F>
90 constexpr auto tup = F ();
91 constexpr auto indices = std::make_index_sequence<std::tuple_size_v<
decltype (tup)>> {};
93 return [&]<std::size_t... Ix> (std::index_sequence<Ix...>)
95 return std::tuple_cat ([&]
97 constexpr auto thisIndex = Ix;
98 constexpr auto item = std::get<thisIndex> (tup);
100 constexpr auto itemResult = [&]<std::size_t... IxOther> (std::index_sequence<IxOther...>)
102 if constexpr (((
detail::JMEq (item, std::get<IxOther> (tup)) && IxOther < thisIndex) || ...))
103 return std::tuple {};
105 return std::tuple { item };
112 template<
size_t N,
typename Char>
115 QDebugStateSaver saver { dbg };
116 dbg.nospace () <<
"CtString[" << N <<
"] { ";
117 for (
size_t i = 0; i < N; ++i)
118 dbg.nospace () << str.
Data_ [i];
119 dbg.nospace () <<
" }";
consteval bool JMEq(const T1 &v1, const T2 &v2)
constexpr size_t DecimalWidth(std::integral auto v, int base=10)
constexpr auto JoinTup(auto &&stringsTuple, auto &&sep) noexcept
constexpr auto IntegralToString()
constexpr auto ZipWith(Tup1 &&tup1, auto &&sep, Tup2 &&tup2) noexcept
QDebug operator<<(QDebug dbg, const CtString< N, Char > &str)
constexpr auto Join(auto &&) noexcept