4#ifndef QQMLPROFILEREVENT_P_H
5#define QQMLPROFILEREVENT_P_H
9#include <QtCore/qstring.h>
10#include <QtCore/qbytearray.h>
11#include <QtCore/qvarlengtharray.h>
12#include <QtCore/qmetatype.h>
14#include <initializer_list>
33 m_timestamp(-1), m_typeIndex(-1), m_dataType(Inline8Bit), m_dataLength(0)
36 template<
typename Number>
40 assignNumbers<std::initializer_list<Number>, Number>(
list);
46 assignNumbers<QByteArray, qint8>(
data.toUtf8());
49 template<
typename Number>
53 assignNumbers<QVector<Number>, Number>(
data);
57 : m_timestamp(
other.m_timestamp), m_typeIndex(
other.m_typeIndex),
58 m_dataType(
other.m_dataType), m_dataLength(
other.m_dataLength)
66 other.m_dataType = Inline8Bit;
73 m_timestamp =
other.m_timestamp;
74 m_typeIndex =
other.m_typeIndex;
75 m_dataType =
other.m_dataType;
76 m_dataLength =
other.m_dataLength;
86 other.m_dataType = Inline8Bit;
102 template<
typename Number>
106 if (
i >= m_dataLength)
108 switch (m_dataType) {
110 return m_data.internal8bit[
i];
114 return m_data.internal16bit[
i];
116 return m_data.internal32bit[
i];
118 return m_data.internal64bit[
i];
121 return static_cast<const qint8 *
>(m_data.external)[
i];
123 return static_cast<const qint16 *
>(m_data.external)[
i];
125 return static_cast<const qint32 *
>(m_data.external)[
i];
127 return static_cast<const qint64 *
>(m_data.external)[
i];
133 template<
typename Number>
137 int prevSize = nums.
size();
142 nums[prevSize++] = 0;
145 setNumbers<QVarLengthArray<Number>, Number>(nums);
148 template<
typename Container,
typename Number>
152 assignNumbers<Container, Number>(
numbers);
155 template<
typename Number>
158 setNumbers<std::initializer_list<Number>, Number>(
numbers);
161 template<
typename Container,
typename Number = q
int64>
165 for (
int i = 0;
i < m_dataLength; ++
i)
166 container.append(number<Number>(
i));
172 switch (m_dataType) {
174 return QString::fromUtf8(
static_cast<const char *
>(m_data.external), m_dataLength);
178 Q_UNREACHABLE_RETURN(
QString());
185 assignNumbers<QByteArray, char>(
data.toUtf8());
191 return static_cast<Message>(m_data.internal8bit[0]);
197 m_dataType = Inline8Bit;
199 m_data.internal8bit[0] = stage;
204 return m_timestamp != -1;
211 External8Bit = Inline8Bit | External,
213 External16Bit = Inline16Bit | External,
215 External32Bit = Inline32Bit | External,
217 External64Bit = Inline64Bit | External
222 static const int s_internalDataLength = 8;
238 if (m_dataType & External) {
240 m_data.external = malloc(
length);
242 memcpy(m_data.external,
other.m_data.external,
length);
244 memcpy(&m_data, &
other.m_data,
sizeof(m_data));
248 template<
typename Big,
typename Small>
249 bool squeezable(Big
source)
254 template<
typename Container,
typename Number>
255 typename std::enable_if<(
sizeof(Number) > 1),
bool>
::type
256 squeeze(
const Container &
numbers)
258 typedef typename QIntegerForSize<
sizeof(Number) / 2>::Signed
Small;
260 if (!squeezable<Number, Small>(
item))
263 assignNumbers<Container, Small>(
numbers);
267 template<
typename Container,
typename Number>
268 typename std::enable_if<(
sizeof(Number) <= 1),
bool>
::type
269 squeeze(
const Container &)
274 template<
typename Container,
typename Number>
275 void assignNumbers(
const Container &
numbers)
278 m_dataLength = squeezable<size_t, quint16>(
static_cast<size_t>(
numbers.size())) ?
280 if (m_dataLength >
sizeof(m_data) /
sizeof(Number)) {
281 if (squeeze<Container, Number>(
numbers))
283 m_dataType =
static_cast<Type>((
sizeof(Number) * 8) | External);
284 m_data.external = malloc(m_dataLength *
sizeof(Number));
286 data =
static_cast<Number *
>(m_data.external);
288 m_dataType =
static_cast<Type>(
sizeof(Number) * 8);
289 data =
static_cast<Number *
>(m_dataType & External ? m_data.external : &m_data);
293 if (
i >= m_dataLength)
301 if (m_dataType & External)
302 free(m_data.external);
\inmodule QtCore\reentrant
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
constexpr size_type size() const noexcept
void resize(qsizetype sz)
Combined button and popup list for selecting options.
#define QT_WARNING_DISABLE_GCC(text)
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei GLsizei GLchar * source
QDataStream & operator<<(QDataStream &stream, const QQmlProfilerEvent &event)
bool operator==(const QQmlProfilerEvent &event1, const QQmlProfilerEvent &event2)
QDataStream & operator>>(QDataStream &stream, QQmlProfilerEvent &event)
bool operator!=(const QQmlProfilerEvent &event1, const QQmlProfilerEvent &event2)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
QT_BEGIN_NAMESPACE typedef signed char qint8
Q_CHECK_PTR(a=new int[80])
qint32 internal32bit[s_internalDataLength/4]
void setNumber(int i, Number number)
Number number(int i) const
QQmlProfilerEvent(qint64 timestamp, int typeIndex, const QString &data)
QQmlProfilerEvent(QQmlProfilerEvent &&other)
qint64 internal64bit[s_internalDataLength/8]
Message rangeStage() const
char internalChar[s_internalDataLength]
qint16 internal16bit[s_internalDataLength/2]
QQmlProfilerEvent(qint64 timestamp, int typeIndex, std::initializer_list< Number > list)
void setString(const QString &data)
void setTimestamp(qint64 timestamp)
qint8 internal8bit[s_internalDataLength]
Container numbers() const
QQmlProfilerEvent(const QQmlProfilerEvent &other)
friend QDataStream & operator<<(QDataStream &stream, const QQmlProfilerEvent &event)
void setNumbers(std::initializer_list< Number > numbers)
void setNumbers(const Container &numbers)
void setRangeStage(Message stage)
QQmlProfilerEvent(qint64 timestamp, int typeIndex, const QVector< Number > &data)
friend QDataStream & operator>>(QDataStream &stream, QQmlProfilerEvent &event)
QQmlProfilerEvent & operator=(const QQmlProfilerEvent &other)
void setTypeIndex(int typeIndex)
QQmlProfilerEvent & operator=(QQmlProfilerEvent &&other)