5#ifndef QOFFSETSTRINGARRAY_P_H
6#define QOFFSETSTRINGARRAY_P_H
19#include "private/qglobal_p.h"
21#include <QByteArrayView>
23#include <QtCore/q20algorithm.h>
29class tst_QOffsetStringArray;
34#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1100
40template <
typename StaticString,
typename OffsetList>
53 constexpr const char *
at(
const int index)
const noexcept
55 return m_string.data() + m_offsets[
index];
60 return { m_string.data() + m_offsets[
index],
64 constexpr int count()
const {
return int(m_offsets.size()) - 1; }
76 StaticString m_string;
78 friend tst_QOffsetStringArray;
84 constexpr size_t max8 = (std::numeric_limits<quint8>::max)();
85 constexpr size_t max16 = (std::numeric_limits<quint16>::max)();
86 if constexpr (Highest <= max8) {
88 }
else if constexpr (Highest <= max16) {
96template <
size_t StringLength,
typename Extractor,
typename... T>
99 std::array<char, StringLength>
result = {};
102 const char *
strings[] = { extract(entries).operator
const char *()... };
103 size_t lengths[] = {
sizeof(extract(T{}))... };
104 for (
size_t i = 0;
i < std::size(
strings); ++
i) {
116 constexpr operator const char *()
const {
return value; }
129template <
typename StringExtractor,
typename... T>
132 constexpr size_t Count =
sizeof...(T);
133 constexpr size_t StringLength = (
sizeof(extractString(T{})) + ...);
134 using MinifiedOffsetType =
decltype(QtPrivate::minifyValue<StringLength>());
137 std::array fullOffsetList = {
offset +=
sizeof(extractString(T{}))... };
140 std::array<MinifiedOffsetType, Count + 1> minifiedOffsetList = {};
142 minifiedOffsetList.begin() + 1,
143 [] (
auto e) { return MinifiedOffsetType(e); });
145 std::array staticString = QtPrivate::makeStaticString<StringLength>(extractString, entries...);
153 auto extractString = [](
const auto &
s) ->
decltype(
auto) {
return s; };
int compare(QByteArrayView a, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
constexpr const char * operator[](const int index) const noexcept
constexpr int count() const
constexpr const char * at(const int index) const noexcept
constexpr QOffsetStringArray(const StaticString &string, const OffsetList &offsets)
constexpr QByteArrayView viewAt(qsizetype index) const noexcept
bool contains(QByteArrayView needle, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Combined button and popup list for selecting options.
constexpr auto minifyValue()
constexpr auto makeStaticString(Extractor extract, const T &... entries)
constexpr auto makeOffsetStringArray(StringExtractor extractString, const T &... entries)
constexpr OutputIterator transform(InputIterator first, InputIterator last, OutputIterator dest, UnaryFunction op)
constexpr OutputIterator copy_n(InputIterator first, Size n, OutputIterator dest)
#define QT_WARNING_DISABLE_GCC(text)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
constexpr const T & qBound(const T &min, const T &val, const T &max)
constexpr auto qOffsetStringArray(const char(&...strings)[Nx]) noexcept
GLsizei const GLfloat * v
[13]
GLsizei const GLchar ** strings
[1]
GLsizei GLenum GLenum GLuint GLenum GLsizei * lengths
GLenum GLuint GLintptr offset
GLuint GLsizei const GLuint const GLintptr * offsets
GLsizei const GLchar *const * string
[0]
constexpr StaticMapEntry(const char(&k)[KL], const char(&v)[VL])
constexpr StaticMapEntry()=default
constexpr StaticString()=default
constexpr StaticString(const char(&s)[N])