19#include <QtQuick3DUtils/private/qtquick3dutilsglobal_p.h>
21#include <QtCore/qlist.h>
22#include <QtCore/qbytearray.h>
32 explicit QSSGDataView(
const QList<T> &data) : mData(data.constData()), mSize(data.size()) { Q_ASSERT(mSize >= 0); }
33 template <qsizetype N>
34 explicit QSSGDataView(
const QVarLengthArray<T, N> &data) : mData(data.constData()), mSize(data.size()) { Q_ASSERT(mSize >= 0); }
35 QSSGDataView(
const T *inData, qsizetype inSize) : mData(inData), mSize(inSize) { Q_ASSERT(mSize >= 0); }
36 constexpr QSSGDataView() : mData(
nullptr), mSize(0) {}
38 qsizetype size()
const {
return mSize; }
40 const T *begin()
const {
return mData; }
41 const T *end()
const {
return mData + mSize; }
43 const T& first()
const { Q_ASSERT(!isEmpty());
return *begin(); }
44 const T& last()
const { Q_ASSERT(!isEmpty());
return *(end()-1); }
46 const T &operator[](
int index)
const
49 Q_ASSERT(index < mSize);
53 bool isEmpty()
const {
return (mSize == 0); }
61 operator
const void *() {
return reinterpret_cast<
const void *>(mData); }
65struct QSSGDataView<quint8>
70 explicit QSSGDataView(
const QByteArray &data)
71 : mData(
reinterpret_cast<
const quint8 *>(data.constBegin())), mSize(data.size())
72 { Q_ASSERT(mSize >= 0); }
74 explicit QSSGDataView(
const QList<T> &data)
75 : mData(
reinterpret_cast<
const quint8 *>(data.constData())), mSize(data.size()*
sizeof(T))
76 { Q_ASSERT(mSize >= 0); }
77 QSSGDataView(
const quint8 *inData, qsizetype inSize) : mData(inData), mSize(inSize) { Q_ASSERT(mSize >= 0); }
79 QSSGDataView(
const T *inData, qsizetype inSize)
80 : mData(
reinterpret_cast<
const quint8 *>(inData)), mSize(inSize*
sizeof(T))
81 { Q_ASSERT(mSize >= 0); }
82 constexpr QSSGDataView() : mData(
nullptr), mSize(0) {}
84 qsizetype size()
const {
return mSize; }
85 bool isEmpty()
const {
return (mSize == 0); }
87 const quint8 *begin()
const {
return mData; }
88 const quint8 *end()
const {
return mData + mSize; }
90 const quint8 &operator[](
int index)
const
93 Q_ASSERT(index < mSize);
103 operator
const void *() {
return reinterpret_cast<
const void *>(mData); }
109inline QSSGDataView<T> toDataView(
const T &type)
111 return QSSGDataView<T>(&type, 1);
115inline QSSGDataView<T> toDataView(
const QList<T> &type)
117 return QSSGDataView<T>(type);
144inline QSSGDataView<T> toDataView(
const T *type, qsizetype count)
146 return QSSGDataView<T>(type, count);
166 T *
end() {
return mData + mSize; }
169 T *
end()
const {
return mData + mSize; }
181 Q_ASSERT(index >= 0);
182 Q_ASSERT(index < mSize);
188 Q_ASSERT(index >= 0);
189 Q_ASSERT(index < mSize);
203using QSSGByteRef = QSSGDataRef<quint8>;
214 return QSSGByteRef(
reinterpret_cast<quint8 *>(&type),
sizeof(T));
226 return QSSGByteRef(
reinterpret_cast<quint8 *>(type),
sizeof(T) * count);
QSSGByteRef toByteRef(T &type)
QSSGByteView toByteView(const QList< T > &type)
QSSGByteView toByteView(const QByteArray &type)
QSSGByteView toByteView(const T &type)
QSSGByteView toByteView(const char *str)
QSSGDataRef< T > toDataRef(T *type, qsizetype count)
QSSGDataView< quint8 > QSSGByteView
QSSGByteRef toByteRef(T *type, qsizetype count)
QSSGByteView toByteView(const T *type, qsizetype count)
QSSGDataRef< T > toDataRef(T &type)
const T & operator[](qsizetype index) const
T & operator[](qsizetype index)
QSSGDataRef(T *inData, qsizetype inSize)