1#ifndef QX_FIXEDSTRINGLIST_H
2#define QX_FIXEDSTRINGLIST_H
6#include <QLatin1StringView>
12#include "qx/core/qx-fixedlist.h"
25using string_view_for_t = std::conditional_t<std::constructible_from<QLatin1StringView, T>, QLatin1StringView, QStringView>;
33template<
typename ViewT,
size_t N>
53 requires std::same_as<std::remove_cvref_t<A>, std::array<ViewT, N>>
57 requires std::same_as<std::remove_cvref_t<B>, Base>
61 template<
typename... Args>
62 requires (N > 0 &&
sizeof...(Args) == N && (std::constructible_from<ViewT, Args> && ...))
64 Base(std::array<ViewT, N>{ ViewT(std::forward<Args>(args))... })
75 qsizetype indexOfImpl(
const S& str, qsizetype from, Qt::CaseSensitivity cs)
const noexcept
81 if((*
this)[i].compare(str, cs) == 0)
88 qsizetype lastIndexOfImpl(
const S& str, qsizetype from, Qt::CaseSensitivity cs)
const noexcept
95 for(qsizetype i = from; i >= 0; --i)
96 if((*
this)[i].compare(str, cs) == 0)
103 QString joinImpl(
const S& separator, qsizetype separatorSize)
const
106 for(
const ViewT& item : *
this)
107 total += item.size();
109 total += separatorSize *
static_cast<qsizetype
>(N - 1);
112 result.reserve(total);
115 for(
const ViewT& item : *
this)
118 result.append(separator);
133 bool contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
const noexcept {
return indexOfImpl(str, 0, cs) != -1; }
134 bool contains(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
const noexcept {
return indexOfImpl(str, 0, cs) != -1; }
136 qsizetype
indexOf(QStringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive)
const noexcept {
return indexOfImpl(str, from, cs); }
137 qsizetype
indexOf(QLatin1StringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive)
const noexcept {
return indexOfImpl(str, from, cs); }
139 qsizetype
lastIndexOf(QStringView str, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive)
const noexcept {
return lastIndexOfImpl(str, from, cs); }
140 qsizetype
lastIndexOf(QLatin1StringView str, qsizetype from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive)
const noexcept {
return lastIndexOfImpl(str, from, cs); }
153 QString
join(QStringView separator)
const {
return joinImpl(separator, separator.size()); }
154 QString
join(QLatin1StringView separator)
const {
return joinImpl(separator, separator.size()); }
155 QString
join(QChar separator)
const {
return joinImpl(separator, 1); }
161 for(
const ViewT& item : *
this)
162 list.append(item.toString());
167 template<qsizetype K>
170 template<qsizetype K>
171 constexpr auto last()
const {
return wrap(Base::template
last<K>()); }
181 template<qsizetype Pos, qsizetype K>
192 template<qsizetype Pos>
195 template<qsizetype K>
198 template<qsizetype Pos, qsizetype Len = -1>
210 requires std::constructible_from<ViewT, L>
217template<
typename First,
typename... Rest>
218 requires (std::constructible_from<_QxPrivate::string_view_for_t<First>,
First> &&
219 (std::constructible_from<_QxPrivate::string_view_for_t<First>, Rest> && ...))
220FixedStringList(
First&&, Rest&&...) -> FixedStringList<_QxPrivate::string_view_for_t<First>, 1 +
sizeof...(Rest)>;
233#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201907L || defined(DOXYGEN)
247template<
typename ViewT,
size_t M,
size_t N>
258template<
typename L,
typename ViewT,
size_t N>
259 requires std::constructible_from<ViewT, L>
272template<
typename ViewT,
size_t N>
273struct tuple_size<
Qx::FixedStringList<ViewT, N>> : std::integral_constant<size_t, N> {};
275template<
size_t I,
typename ViewT,
size_t N>
276struct tuple_element<I, Qx::FixedStringList<ViewT, N>>
278 static_assert(I < N);
constexpr FixedList()=default
constexpr reference first()
Definition qx-fixedlist.h:168
constexpr reference last()
Definition qx-fixedlist.h:174
static constexpr qsizetype size_v
Definition qx-fixedlist.h:47
The FixedStringList template class is a FixedList with a few added convenience functions for handling...
Definition qx-fixedstringlist.h:36
bool contains(QStringView str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qx-fixedstringlist.h:133
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qx-fixedstringlist.h:134
constexpr FixedStringList(Args &&... args) noexcept
Definition qx-fixedstringlist.h:63
constexpr auto first() const
Definition qx-fixedstringlist.h:168
constexpr auto last() const
Definition qx-fixedstringlist.h:171
qsizetype lastIndexOf(QStringView str, qsizetype from=-1, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qx-fixedstringlist.h:139
constexpr auto sliced() const
Definition qx-fixedstringlist.h:193
constexpr FixedStringList< ViewT, N+M > operator+(const FixedStringList< ViewT, M > &other) const
Definition qx-fixedstringlist.h:203
qsizetype indexOf(QStringView str, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qx-fixedstringlist.h:136
QString join(QStringView separator) const
Definition qx-fixedstringlist.h:153
constexpr auto mid() const
Definition qx-fixedstringlist.h:199
QString join(QLatin1StringView separator) const
Definition qx-fixedstringlist.h:154
constexpr auto chopped() const
Definition qx-fixedstringlist.h:196
constexpr FixedStringList(B &&base)
Definition qx-fixedstringlist.h:58
constexpr FixedStringList()=default
constexpr FixedStringList< ViewT, 1+N > operator+(L &&a, const FixedStringList< ViewT, N > &b)
Definition qx-fixedstringlist.h:260
constexpr auto sliced() const
Definition qx-fixedstringlist.h:182
constexpr FixedStringList< ViewT, M+N > operator+(const ViewT(&a)[M], const FixedStringList< ViewT, N > &b)
Definition qx-fixedstringlist.h:248
constexpr FixedStringList(A &&arr)
Definition qx-fixedstringlist.h:54
QStringList toStringList() const
Definition qx-fixedstringlist.h:157
QString join(QChar separator) const
Definition qx-fixedstringlist.h:155
constexpr FixedStringList< ViewT, N+M > operator+(const ViewT(&other)[M]) const
Definition qx-fixedstringlist.h:206
constexpr FixedStringList(const ViewT(&arr)[M])
Definition qx-fixedstringlist.h:47
constexpr FixedStringList< ViewT, N+1 > operator+(L &&other) const
Definition qx-fixedstringlist.h:211
qsizetype lastIndexOf(QLatin1StringView str, qsizetype from=-1, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qx-fixedstringlist.h:140
qsizetype indexOf(QLatin1StringView str, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qx-fixedstringlist.h:137
Specifies that a type is one of several types.
Definition qx-concepts.h:509
FixedStringList< QLatin1StringView, N > Latin1StringViewList
Definition qx-fixedstringlist.h:238
FixedStringList< QStringView, N > StringViewList
Definition qx-fixedstringlist.h:235
The Qx namespace is the main namespace through which all non-global functionality of the Qx library i...
Definition qx-abstracterror.cpp:13
@ First
Definition qx-global.h:19
The qx-concepts header file provides a library of general purpose concepts as an extension of the sta...