5#ifndef QV4SEQUENCEWRAPPER_P_H
6#define QV4SEQUENCEWRAPPER_P_H
19#include <QtCore/qglobal.h>
20#include <QtCore/qvariant.h>
21#include <QtQml/qqml.h>
23#include <private/qv4referenceobject_p.h>
24#include <private/qv4value_p.h>
25#include <private/qv4object_p.h>
82 void init(QMetaType listType, QMetaSequence metaSequence,
const void *container);
83 void init(QMetaType listType, QMetaSequence metaSequence,
const void *container,
84 Object *object,
int propertyIndex, Heap::ReferenceObject::Flags flags);
97 const QMetaType valueType = valueMetaType();
98 switch (valueType.id()) {
99 case QMetaType::QVariant:
100 case QMetaType::QVariantHash:
101 case QMetaType::QVariantMap:
102 case QMetaType::QVariantList:
103 case QMetaType::QObjectStar:
109 return !valueType.flags().testFlag(QMetaType::PointerToQObject);
112 bool isReadOnly()
const {
return m_object && !canWriteBack(); }
122 friend struct QV4::Sequence;
126 void initTypes(QMetaType listType, QMetaSequence metaSequence);
127 void createElementWrappers(
const void *container);
128 void createInlineStorage(
const void *container);
130 bool loadReference();
131 bool storeReference();
137 const QtPrivate::QMetaTypeInterface *m_listType;
138 const QtMetaContainerPrivate::QMetaSequenceInterface *m_metaSequence;
162#define QT_DECLARE_SEQUENTIAL_CONTAINER(LOCAL, FOREIGN, VALUE)
167 QML_SEQUENTIAL_CONTAINER(VALUE)
169 QML_ADDED_IN_VERSION(2
, 0
)
176QT_DECLARE_SEQUENTIAL_CONTAINER(QStdRealVectorForeign, std::vector<qreal>, QT_COORD_TYPE);
177QT_DECLARE_SEQUENTIAL_CONTAINER(QRealListForeign, QList<qreal>, QT_COORD_TYPE);
190#undef QT_DECLARE_SEQUENTIAL_CONTAINER
static Heap::Sequence * resolveHeapSequence(const Sequence *sequence, QMetaType typeHint)
static void removeLastInline(Heap::Sequence *p, qsizetype num)
static void * createVariantData(QMetaType type, QVariant *variant)
static void generateWarning(QV4::ExecutionEngine *v4, const QString &description)
static void appendInline(Heap::Sequence *p, const QVariant &item)
void convertAndDo(const QVariant &item, const QMetaType v, Action action)
bool convertToIterable(QMetaType metaType, void *data, QV4::Object *sequence)
static const void * retrieveVariantData(QMetaType type, const QVariant *variant)
static void appendDefaultConstructedInline(Heap::Sequence *p, qsizetype num)
static void replaceInline(Heap::Sequence *p, qsizetype index, const QVariant &item)
static qsizetype sizeInline(const Heap::Sequence *p)
static ReturnedValue doGetIndexed(Heap::Sequence *p, qsizetype index)
#define QT_DECLARE_SEQUENTIAL_CONTAINER(LOCAL, FOREIGN, VALUE)
void init(QMetaType listType, QMetaSequence metaSequence, const void *container)
bool isStoredInline() const
QVariant toVariant() const
void init(QMetaType listType, QMetaSequence metaSequence, const void *container, Object *object, int propertyIndex, Heap::ReferenceObject::Flags flags)
QMetaType valueMetaType() const
const void * storagePointer() const
QMetaType listType() const
bool setVariant(const QVariant &variant)
QMetaSequence metaSequence() const
PropertyKey next(const Object *o, Property *pd=nullptr, PropertyAttributes *attrs=nullptr) override
~SequenceOwnPropertyKeyIterator() override=default