70void QSequentialIterable::addValue(
const QVariant &value, Position position)
72 QtPrivate::QVariantTypeCoercer coercer;
73 const void *valuePtr = coercer.coerce(value, metaContainer().valueMetaType());
77 if (metaContainer().canAddValueAtBegin())
78 metaContainer().addValueAtBegin(mutableIterable(), valuePtr);
81 if (metaContainer().canAddValueAtEnd())
82 metaContainer().addValueAtEnd(mutableIterable(), valuePtr);
85 if (metaContainer().canAddValue())
86 metaContainer().addValue(mutableIterable(), valuePtr);
94void QSequentialIterable::removeValue(Position position)
98 if (metaContainer().canRemoveValueAtBegin())
99 metaContainer().removeValueAtBegin(mutableIterable());
102 if (metaContainer().canRemoveValueAtEnd())
103 metaContainer().removeValueAtEnd(mutableIterable());
106 if (metaContainer().canRemoveValue())
107 metaContainer().removeValue(mutableIterable());
120QVariant QSequentialIterable::at(qsizetype idx)
const
122 QVariant v(valueMetaType());
124 if (valueMetaType() == QMetaType::fromType<QVariant>())
129 const QMetaSequence meta = metaContainer();
130 if (meta.canGetValueAtIndex()) {
131 meta.valueAtIndex(m_iterable.constPointer(), idx, dataPtr);
132 }
else if (meta.canGetValueAtConstIterator()) {
133 void *iterator = meta.constBegin(m_iterable.constPointer());
134 meta.advanceConstIterator(iterator, idx);
135 meta.valueAtConstIterator(iterator, dataPtr);
136 meta.destroyConstIterator(iterator);
145void QSequentialIterable::set(qsizetype idx,
const QVariant &value)
147 QtPrivate::QVariantTypeCoercer coercer;
148 const void *dataPtr = coercer.coerce(value, metaContainer().valueMetaType());
150 const QMetaSequence meta = metaContainer();
151 if (meta.canSetValueAtIndex()) {
152 meta.setValueAtIndex(m_iterable.mutablePointer(), idx, dataPtr);
153 }
else if (meta.canSetValueAtIterator()) {
154 void *iterator = meta.begin(m_iterable.mutablePointer());
155 meta.advanceIterator(iterator, idx);
156 meta.setValueAtIterator(iterator, dataPtr);
157 meta.destroyIterator(iterator);