5#ifndef QBYTEARRAYALGORITHMS_H
6#define QBYTEARRAYALGORITHMS_H
8#include <QtCore/qnamespace.h>
14#pragma qt_class(QByteArrayAlgorithms)
23[[
nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
24bool startsWith(QByteArrayView haystack, QByteArrayView needle)
noexcept;
26[[
nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
27bool endsWith(QByteArrayView haystack, QByteArrayView needle)
noexcept;
32[[
nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
38[[
nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
41[[
nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION
46[[
nodiscard]] Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QByteArrayView
trimmed(QByteArrayView s)
noexcept;
55 quint32 m_reserved : 31;
56 void *m_reserved2 =
nullptr;
62 explicit operator bool()
const noexcept {
return !m_error; }
63 T &
operator*() { Q_ASSERT(*
this);
return m_value; }
64 const T &
operator*()
const { Q_ASSERT(*
this);
return m_value; }
65 T *
operator->()
noexcept {
return *
this ? &m_value :
nullptr; }
66 const T *
operator->()
const noexcept {
return *
this ? &m_value :
nullptr; }
68 T
value_or(U &&u)
const {
return *
this ? m_value : T(std::forward<U>(u)); }
83 const auto val = [&] {
99 return c >=
'A' && c <=
'Z';
111 return int(uchar(lhsLower)) -
int(uchar(rhsLower));
118 return s1 ? 1 : (s2 ? -1 : 0);
119 for (; len--; ++s1, ++s2) {
130int qstrnicmp_impl(
const char *s1, qsizetype len1,
const char *s2, qsizetype len2)
134 Q_PRE(s1 || len1 == 0);
135 Q_PRE(s2 || len2 == 0 || len2 == -1);
140 return (!s2 || !*s2) ? 0 : -1;
144 return len1 == 0 ? 0 : 1;
149 for (i = 0; i < len1; ++i) {
150 const char c = s2[i];
157 return s2[i] ? -1 : 0;
160 const qsizetype len = qMin(len1, len2);
161 for (qsizetype i = 0; i < len; ++i) {
167 return len1 < len2 ? -1 : 1;
173
174
176[[nodiscard]] Q_DECL_PURE_FUNCTION Q_CORE_EXPORT
177const void *
qmemrchr(
const void *s,
int needle, size_t n)
noexcept;
183#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 900
&& Q_CC_GNU < 1000
186 QT_WARNING_DISABLE_GCC(
"-Wstringop-overflow")
188 return str ? strlen(str) : 0;
196 auto end =
static_cast<
const char *>(memchr(str,
'\0', maxlen));
197 return end ? end - str : maxlen;
206inline int qstrncmp(
const char *str1,
const char *str2, size_t len)
208 return (str1 && str2) ? strncmp(str1, str2, len)
209 : (str1 ? 1 : (str2 ? -1 : 0));
214#if !QT_CORE_INLINE_IMPL_SINCE(6
, 12
)
215QT6_ONLY(Q_CORE_EXPORT)
218QT_CORE_CONSTEXPR_INLINE_SINCE(6, 12)
219int qstrnicmp(
const char *s1,
const char *s2, size_t len);
221#if !QT_CORE_INLINE_IMPL_SINCE(6
, 12
)
222QT6_ONLY(Q_CORE_EXPORT)
224QT_CORE_CONSTEXPR_INLINE_SINCE(6, 12)
225int qstrnicmp(
const char *s1, qsizetype len1,
const char *s2, qsizetype len2 = -1);
227#if QT_CORE_INLINE_IMPL_SINCE(6
, 12
)
228QT_CORE_CONSTEXPR_INLINE_SINCE(6, 12)
229int qstrnicmp(
const char *s1,
const char *s2, size_t len)
232 return QtPrivate::qstrnicmp_impl(s1, s2, len);
235QT_CORE_CONSTEXPR_INLINE_SINCE(6, 12)
236int qstrnicmp(
const char *s1, qsizetype len1,
const char *s2, qsizetype len2)
239 return QtPrivate::qstrnicmp_impl(s1, len1, s2, len2);
243#ifndef QT_NO_QSNPRINTF
244#if QT_DEPRECATED_SINCE(6
, 9
)
245#define QSNPF_DEPR(vsn)
246 QT_DEPRECATED_VERSION_X_6_9("Use C++11 std::" #vsn "printf() instead, taking care to "
247 "ensure that you didn't rely on QString::asprintf() "
248 "idiosyncrasies that q" #vsn "printf might, but "
249 "std::" #vsn "printf() does not, support.")
252Q_CORE_EXPORT
int qvsnprintf(
char *str, size_t n,
const char *fmt, va_list ap)
253 Q_ATTRIBUTE_FORMAT_PRINTF(3, 0);
255Q_CORE_EXPORT
int qsnprintf(
char *str, size_t n,
const char *fmt, ...)
256 Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
262Q_CORE_EXPORT quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309);
T * operator->() noexcept
operator bool() const noexcept
constexpr ParsedNumber(T v)
constexpr ParsedNumber() noexcept
const T & operator*() const
const T * operator->() const noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QByteArrayView haystack, QByteArrayView needle) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber< qulonglong > toUnsignedInteger(QByteArrayView data, int base)
constexpr char toAsciiLower(char ch) noexcept
qsizetype lastIndexOf(QByteArrayView haystack, qsizetype from, uchar needle) noexcept
qsizetype findByteArray(QByteArrayView haystack, qsizetype from, char needle) noexcept
constexpr int qstrnicmp_impl(const char *s1, const char *s2, size_t len)
constexpr int qstrnicmp_impl(const char *s1, qsizetype len1, const char *s2, qsizetype len2)
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QByteArrayView trimmed(QByteArrayView s) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber< qlonglong > toSignedInteger(QByteArrayView data, int base)
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QByteArrayView haystack, QByteArrayView needle) noexcept
constexpr int caseCompareAscii(char lhs, char rhs) noexcept
constexpr bool isAsciiUpper(char32_t c) noexcept
Q_CORE_EXPORT int compareMemory(QByteArrayView lhs, QByteArrayView rhs)
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber< float > toFloat(QByteArrayView a) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber< double > toDouble(QByteArrayView a) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isValidUtf8(QByteArrayView s) noexcept
size_t qstrlen(const char *str)
int qstrncmp(const char *str1, const char *str2, size_t len)
Q_CORE_EXPORT char * qstrncpy(char *dst, const char *src, size_t len)
int qstrnicmp(const char *s1, qsizetype len1, const char *s2, qsizetype len2=-1)
size_t qstrnlen(const char *str, size_t maxlen)
Q_CORE_EXPORT int qstricmp(const char *, const char *)
Q_CORE_EXPORT char * qstrdup(const char *)
Q_CORE_EXPORT char * qstrcpy(char *dst, const char *src)
int qstrnicmp(const char *s1, const char *s2, size_t len)
Q_DECL_PURE_FUNCTION Q_CORE_EXPORT const void * qmemrchr(const void *s, int needle, size_t n) noexcept
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)