8#pragma qt_class(QtMath)
11#include <QtCore/qglobal.h>
12#include <QtCore/qalgorithms.h>
13#include <QtCore/qnumeric.h>
23#define QT_SINE_TABLE_SIZE 256
27template <
typename T>
int qCeil(T v)
30 return QtPrivate::qCheckedFPConversionToInteger<
int>(ceil(v));
36 return QtPrivate::qCheckedFPConversionToInteger<
int>(floor(v));
39template <
typename T>
auto qFabs(T v)
45template <
typename T>
auto qSin(T v)
51template <
typename T>
auto qCos(T v)
57template <
typename T>
auto qTan(T v)
63template <
typename T>
auto qAcos(T v)
69template <
typename T>
auto qAsin(T v)
75template <
typename T>
auto qAtan(T v)
81template <
typename T1,
typename T2>
auto qAtan2(T1 y, T2 x)
87template <
typename T>
auto qSqrt(T v)
94template <
typename R,
typename F>
103 QHypotHelper(T first, T prior) : scale(first), total(prior) {}
107 {
return qIsFinite(scale) ? scale > 0 ? scale * T(qSqrt(total)) : T(0) : scale; }
109 template<
typename F,
typename ...Fs>
110 auto add(F first, Fs... rest)
const
111 {
return add(first).add(rest...); }
113 template<
typename F,
typename R =
typename QHypotType<T, F>::type>
116 if (qIsInf(scale) || (qIsNaN(scale) && !qIsInf(next)))
120 const R val = qAbs(next);
121 if (!(scale > 0) || qIsInf(next))
126 const R ratio = scale / next;
127 return QHypotHelper<R>(val, total * ratio * ratio + R(1));
129 const R ratio = next / scale;
135template<
typename F,
typename ...Fs>
142template <
typename Tx,
typename Ty>
150#if defined(__cpp_lib_hypot
) && __cpp_lib_hypot
>= 201603L
151template <
typename Tx,
typename Ty,
typename Tz>
152auto qHypot(Tx x, Ty y, Tz z)
155 return hypot(x, y, z);
159template <
typename T>
auto qLn(T v)
165template <
typename T>
auto qExp(T v)
171template <
typename T1,
typename T2>
auto qPow(T1 x, T2 y)
180#define M_E (2.7182818284590452354
)
184#define M_LOG2E (1.4426950408889634074
)
188#define M_LOG10E (0.43429448190325182765
)
192#define M_LN2 (0.69314718055994530942
)
196#define M_LN10 (2.30258509299404568402
)
200#define M_PI (3.14159265358979323846
)
204#define M_PI_2 (1.57079632679489661923
)
208#define M_PI_4 (0.78539816339744830962
)
212#define M_1_PI (0.31830988618379067154
)
216#define M_2_PI (0.63661977236758134308
)
220#define M_2_SQRTPI (1.12837916709551257390
)
224#define M_SQRT2 (1.41421356237309504880
)
228#define M_SQRT1_2 (0.70710678118654752440
)
238 return qt_sine_table[si] + (qt_sine_table[ci] - 0.5 * qt_sine_table[si] * d) * d;
248 return qt_sine_table[si] - (qt_sine_table[ci] + 0.5 * qt_sine_table[si] * d) * d;
253 return degrees *
float(
M_PI / 180);
258 return degrees * (
M_PI / 180);
263 return degrees * (
M_PI / 180);
266template <
typename T, std::enable_if_t<std::is_integral_v<T>,
bool> =
true>
274 return radians *
float(180 /
M_PI);
279 return radians * (180 /
M_PI);
284 return radians * (180 /
M_PI);
317 return qConstexprNextPowerOfTwo(quint32(v));
322 return qConstexprNextPowerOfTwo(quint64(v));
328 Q_ASSERT(
static_cast<qint32>(v) >= 0);
329#if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
330 return std::bit_ceil(v + 1);
331#elif defined(QT_HAS_BUILTIN_CLZ)
334 return 2U << (31 ^ QAlgorithmsPrivate::qt_builtin_clz(v));
336 return QtPrivate::qConstexprNextPowerOfTwo(v);
342 Q_ASSERT(
static_cast<qint64>(v) >= 0);
343#if defined(__cpp_lib_int_pow2) && __cpp_lib_int_pow2 >= 202002L
344 return std::bit_ceil(v + 1);
345#elif defined(QT_HAS_BUILTIN_CLZLL)
348 return Q_UINT64_C(2) << (63 ^ QAlgorithmsPrivate::qt_builtin_clzll(v));
350 return QtPrivate::qConstexprNextPowerOfTwo(v);
356 return qNextPowerOfTwo(quint32(v));
361 return qNextPowerOfTwo(quint64(v));
366 return qNextPowerOfTwo(QIntegerForSizeof<
long>::Unsigned(v));
371 return qNextPowerOfTwo(QIntegerForSizeof<
long>::Unsigned(v));
QDataStream & operator>>(QDataStream &in, QByteArray &ba)
Reads a byte array into ba from the stream in and returns a reference to the stream.
quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard)
static QLatin1StringView scriptToCode(QLocale::Script script)
QString toUpper(const QString &str, bool *ok) const
static const QLocalePrivate * get(const QLocale &l)
QString toLower(const QString &str, bool *ok) const
quint16 languageId() const
static QLocale::Language codeToLanguage(QStringView code, QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode) noexcept
const QLocaleData *const m_data
QLatin1StringView scriptCode() const
QLocale::MeasurementSystem measurementSystem() const
quint16 territoryId() const
static QLatin1StringView territoryToCode(QLocale::Territory territory)
static QLocale::Territory codeToTerritory(QStringView code) noexcept
static std::array< char, 4 > languageToCode(QLocale::Language language, QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode)
static QLocale::Script codeToScript(QStringView code) noexcept
QLocale::NumberOptions m_numberOptions
QLatin1StringView territoryCode() const
constexpr QLocalePrivate(const QLocaleData *data, qsizetype index, QLocale::NumberOptions numberOptions=QLocale::DefaultNumberOptions, int refs=0)
std::array< char, 4 > languageCode(QLocale::LanguageCodeTypes codeTypes=QLocale::AnyLanguageCode) const
static QBasicAtomicInt s_generation
QByteArray bcp47Name(char separator='-') const
~QScopedArrayPointer()=default
const T & operator[](qsizetype i) const
T & operator[](qsizetype i)
friend bool operator==(std::nullptr_t, const QScopedPointer< T, Cleanup > &rhs) noexcept
bool operator!() const noexcept
friend bool operator==(const QScopedPointer< T, Cleanup > &lhs, std::nullptr_t) noexcept
T * operator->() const noexcept
bool isNull() const noexcept
void reset(T *other=nullptr) noexcept(noexcept(Cleanup::cleanup(std::declval< T * >())))
friend bool operator!=(std::nullptr_t, const QScopedPointer< T, Cleanup > &rhs) noexcept
friend bool operator!=(const QScopedPointer< T, Cleanup > &lhs, std::nullptr_t) noexcept
T * data() const noexcept
friend bool operator!=(const QScopedPointer< T, Cleanup > &lhs, const QScopedPointer< T, Cleanup > &rhs) noexcept
friend bool operator==(const QScopedPointer< T, Cleanup > &lhs, const QScopedPointer< T, Cleanup > &rhs) noexcept
qsizetype fallbackLocaleIndex() const
@ StringToAlternateQuotation
@ StandaloneMonthNameLong
@ StandaloneDayNameNarrow
@ StandaloneMonthNameNarrow
@ StringToStandardQuotation
@ StandaloneMonthNameShort
virtual QLocale fallbackLocale() const
virtual QVariant query(QueryType type, QVariant &&in=QVariant()) const
QHypotHelper< R > add(F next) const
auto add(F first, Fs... rest) const
Combined button and popup list for selecting options.
qsizetype fromUtf8(uchar b, OutputPtr &dst, InputPtr &src, InputPtr end)
int toUtf8(char16_t u, OutputPtr &dst, InputPtr &src, InputPtr end)
bool isContinuationByte(uchar b)
constexpr char ascii_space_chars[]
constexpr auto makeCharacterSetMatch() noexcept
constexpr quint32 qConstexprNextPowerOfTwo(quint32 v)
static constexpr bool isLowerCaseAscii(char c)
static const quint16 crc_tbl[16]
QByteArray qCompress(const uchar *data, qsizetype nbytes, int compressionLevel)
static Q_DECL_COLD_FUNCTION const char * zlibOpAsString(ZLibOp op)
static QByteArray toCase_template(T &input, uchar(*lookup)(uchar))
static void q_fromPercentEncoding(QByteArray *ba, char percent)
int qstrnicmp(const char *str1, qsizetype len1, const char *str2, qsizetype len2)
static qsizetype lastIndexOfHelper(const char *haystack, qsizetype l, const char *needle, qsizetype ol, qsizetype from)
static constexpr bool isUpperCaseAscii(char c)
static QByteArray xxflate(ZLibOp op, QArrayDataPointer< char > out, QByteArrayView input, qxp::function_ref< int(z_stream *) const > init, qxp::function_ref< int(z_stream *, size_t) const > processChunk, qxp::function_ref< void(z_stream *) const > deinit)
static constexpr uchar asciiLower(uchar c)
static qsizetype countCharHelper(QByteArrayView haystack, char needle) noexcept
static constexpr uchar asciiUpper(uchar c)
Q_CORE_EXPORT char * qstrncpy(char *dst, const char *src, size_t len)
Q_CORE_EXPORT int qstrnicmp(const char *, const char *, size_t len)
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)
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)
auto qHypot(F first, Fs... rest)
bool qt_splitLocaleName(QStringView name, QStringView *lang=nullptr, QStringView *script=nullptr, QStringView *cntry=nullptr) noexcept
Q_DECLARE_TYPEINFO(QLocaleData::GroupSizes, Q_PRIMITIVE_TYPE)
Q_DECLARE_TYPEINFO(QLocaleId, Q_PRIMITIVE_TYPE)
qsizetype qt_repeatCount(QStringView s) noexcept
constexpr bool ascii_isspace(uchar c) noexcept
#define ForEachQLocaleRange(X)
QString qt_readEscapedFormatString(QStringView format, qsizetype *idx)
constexpr double qDegreesToRadians(double degrees)
#define QT_SINE_TABLE_SIZE
constexpr long double qRadiansToDegrees(long double radians)
constexpr unsigned long qNextPowerOfTwo(long v)
constexpr float qRadiansToDegrees(float radians)
constexpr long double qDegreesToRadians(long double degrees)
constexpr double qRadiansToDegrees(double radians)
constexpr unsigned long qNextPowerOfTwo(unsigned long v)
constexpr quint32 qNextPowerOfTwo(quint32 v)
constexpr double qDegreesToRadians(T degrees)
constexpr float qDegreesToRadians(float degrees)
QScopedPointerObjectDeleteLater< QObject > QScopedPointerDeleteLater
constexpr size_t qHash(const QSize &s, size_t seed=0) noexcept
static constexpr int MaxRange
constexpr bool matches(uchar c) const noexcept
constexpr QCharacterSetMatch(std::string_view set) noexcept
static char16_t * convertToUnicode(char16_t *dst, QLatin1StringView in) noexcept
static QChar * convertToUnicode(QChar *dst, QByteArrayView in, QStringConverter::State *state) noexcept
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state) noexcept
static QChar * convertToUnicode(QChar *buffer, QLatin1StringView in) noexcept
static Q_CORE_EXPORT char * convertFromUnicode(char *out, QStringView in) noexcept
QStringView viewListEntry(const char16_t *table, qsizetype index) const
char32_t ucsFirst(const char16_t *table) const
QString getData(const char16_t *table) const
QString getListEntry(const char16_t *table, qsizetype index) const
QStringView viewData(const char16_t *table) const
void setZero(QStringView zero)
bool isValid(NumberMode mode) const
QString positiveSign() const
static float convertDoubleToFloat(double d, bool *ok)
QString groupSeparator() const
QSimpleParsedNumber< qint64 > stringToLongLong(QStringView str, int base, QLocale::NumberOptions options) const
QString zeroDigit() const
bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options, NumberMode mode, CharBuff *result) const
QString decimalPoint() const
QString doubleToString(double d, int precision=-1, DoubleForm form=DFSignificantDigits, int width=-1, unsigned flags=NoFlags) const
static Q_AUTOTEST_EXPORT bool allLocaleDataRows(bool(*check)(qsizetype, const QLocaleData &))
QString listSeparator() const
static QSimpleParsedNumber< quint64 > bytearrayToUnsLongLong(QByteArrayView num, int base)
QString percentSign() const
double stringToDouble(QStringView str, bool *ok, QLocale::NumberOptions options) const
QString longLongToString(qint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
quint8 m_first_day_of_week
NumericData numericData(NumberMode mode) const
quint8 m_currency_rounding
QString exponentSeparator() const
static qsizetype findLocaleIndex(QLocaleId localeId) noexcept
QString negativeSign() const
static const QLocaleData * c() noexcept
QSimpleParsedNumber< quint64 > stringToUnsLongLong(QStringView str, int base, QLocale::NumberOptions options) const
QString unsLongLongToString(quint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
QLocaleId withLikelySubtagsAdded() const noexcept
Fill in blank fields of a locale ID.
QLocaleId withLikelySubtagsRemoved() const noexcept
bool operator==(QLocaleId other) const noexcept
bool matchesAll() const noexcept
bool isValid() const noexcept
bool operator!=(QLocaleId other) const noexcept
bool acceptScriptTerritory(QLocaleId other) const noexcept
bool acceptLanguage(quint16 lang) const noexcept
QByteArray name(char separator='-') const
static void cleanup(T *pointer) noexcept
void operator()(T *pointer) const noexcept
void operator()(T *pointer) const
static void cleanup(T *pointer)
void operator()(void *pointer) const noexcept
static void cleanup(void *pointer) noexcept
CurrencyToStringArgument(const QVariant &v, const QString &s)
CurrencyToStringArgument()
static QChar * convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian)
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian)
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state, DataEndianness endian)
static QChar * convertToUnicode(QChar *out, QByteArrayView, QStringConverter::State *state, DataEndianness endian)
static const bool skipAsciiHandling
static void appendByte(qchar8_t *&ptr, qchar8_t b)
static uchar peekByte(const uchar *ptr, qsizetype n=0)
static qptrdiff availableBytes(const qchar8_t *ptr, const qchar8_t *end)
static void appendByte(uchar *&ptr, uchar b)
static void advanceByte(const uchar *&ptr, qsizetype n=1)
static const bool isTrusted
static void appendUtf16(char32_t *&ptr, char16_t uc)
static const bool skipAsciiHandling
static char16_t peekUtf16(const char16_t *ptr, qsizetype n=0)
static void appendUcs4(char16_t *&ptr, char32_t uc)
static const int EndOfString
static void advanceUtf16(const char16_t *&ptr, qsizetype n=1)
static uchar peekByte(const char *ptr, qsizetype n=0)
static void advanceByte(const char *&ptr, qsizetype n=1)
static uchar peekByte(const qchar8_t *ptr, qsizetype n=0)
static void appendUtf16(char16_t *&ptr, char16_t uc)
static const bool allowNonCharacters
static qptrdiff availableUtf16(const char16_t *ptr, const char16_t *end)
static qptrdiff availableBytes(const char *ptr, const char *end)
static void appendUcs4(char32_t *&ptr, char32_t uc)
static qptrdiff availableBytes(const uchar *ptr, const uchar *end)
static void advanceByte(const qchar8_t *&ptr, qsizetype n=1)
static Q_CORE_EXPORT char16_t * convertToUnicode(char16_t *dst, QByteArrayView in) noexcept
static int compareUtf8(QByteArrayView utf8, QStringView utf16, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
static QChar * convertToUnicode(QChar *buffer, QByteArrayView in) noexcept
static ValidUtf8Result isValidUtf8(QByteArrayView in)
static QString convertToUnicode(QByteArrayView in)
static Q_CORE_EXPORT char * convertFromLatin1(char *out, QLatin1StringView in)
static char16_t * convertToUnicode(char16_t *dst, QByteArrayView in, QStringConverter::State *state)
static QChar * convertToUnicode(QChar *out, QByteArrayView in, QStringConverter::State *state)
static char * convertFromUnicode(char *out, QStringView in, QStringConverter::State *state)
static char * convertFromUnicode(char *dst, QStringView in) noexcept