aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4arraybuffer_p.h
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-01-09 13:07:49 +0100
committerUlf Hermann <ulf.hermann@qt.io>2022-01-20 19:33:01 +0100
commit3027d8ed74705cd0dd43009acdb6f354d430d5ba (patch)
treec65df935ca55693482383d1d75cf79c88d5dfe11 /src/qml/jsruntime/qv4arraybuffer_p.h
parented6b31389ac554287b4e00a6ad743e6ebf72160f (diff)
V4: Fix naming of array data classes
Provide convenience wrappers for access to const/mutable data, properly discern between the "buffer" object and the actual data, especially regarding shared/detached state. Change-Id: I48f1f1eb8c204c29277746e5dee63892cbf3ac89 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4arraybuffer_p.h')
-rw-r--r--src/qml/jsruntime/qv4arraybuffer_p.h63
1 files changed, 39 insertions, 24 deletions
diff --git a/src/qml/jsruntime/qv4arraybuffer_p.h b/src/qml/jsruntime/qv4arraybuffer_p.h
index 1873c41261..43f596606e 100644
--- a/src/qml/jsruntime/qv4arraybuffer_p.h
+++ b/src/qml/jsruntime/qv4arraybuffer_p.h
@@ -72,32 +72,46 @@ struct Q_QML_PRIVATE_EXPORT SharedArrayBuffer : Object {
void init(size_t length);
void init(const QByteArray& array);
void destroy();
- std::aligned_storage_t<sizeof(QArrayDataPointer<char>), alignof(QArrayDataPointer<char>)> d;
- const QArrayDataPointer<char> &data() const { return *reinterpret_cast<const QArrayDataPointer<char> *>(&d); }
- QArrayDataPointer<char> &data() { return *reinterpret_cast<QArrayDataPointer<char> *>(&d); }
- bool isShared;
- uint byteLength() const { return data().size; }
+ void setSharedArrayBuffer(bool shared) noexcept { isShared = shared; }
+ bool isSharedArrayBuffer() const noexcept { return isShared; }
+
+ char *arrayData() noexcept { return arrayDataPointer()->data(); }
+ const char *constArrayData() const noexcept { return constArrayDataPointer()->data(); }
+ uint arrayDataLength() const noexcept { return constArrayDataPointer().size; }
+
+ bool hasSharedArrayData() const noexcept { return constArrayDataPointer().isShared(); }
+ bool hasDetachedArrayData() const noexcept { return constArrayDataPointer().isNull(); }
+ void detachArrayData() noexcept { arrayDataPointer().clear(); }
- bool isDetachedBuffer() const { return data().isNull(); }
- bool isSharedArrayBuffer() const { return isShared; }
+ bool arrayDataNeedsDetach() const noexcept { return constArrayDataPointer().needsDetach(); }
+
+private:
+ const QArrayDataPointer<const char> &constArrayDataPointer() const noexcept
+ {
+ return *reinterpret_cast<const QArrayDataPointer<const char> *>(&arrayDataPointerStorage);
+ }
+ QArrayDataPointer<char> &arrayDataPointer() noexcept
+ {
+ return *reinterpret_cast<QArrayDataPointer<char> *>(&arrayDataPointerStorage);
+ }
+
+ std::aligned_storage_t<sizeof(QArrayDataPointer<char>), alignof(QArrayDataPointer<char>)>
+ arrayDataPointerStorage;
+ bool isShared;
};
struct Q_QML_PRIVATE_EXPORT ArrayBuffer : SharedArrayBuffer {
void init(size_t length) {
SharedArrayBuffer::init(length);
- isShared = false;
+ setSharedArrayBuffer(false);
}
void init(const QByteArray& array) {
SharedArrayBuffer::init(array);
- isShared = false;
- }
- void detachArrayBuffer() {
- data().clear();
+ setSharedArrayBuffer(false);
}
};
-
}
struct SharedArrayBufferCtor : FunctionObject
@@ -124,13 +138,14 @@ struct Q_QML_PRIVATE_EXPORT SharedArrayBuffer : Object
V4_PROTOTYPE(sharedArrayBufferPrototype)
QByteArray asByteArray() const;
- uint byteLength() const { return d()->byteLength(); }
- char *data() { return d()->data()->data(); }
- const char *constData() { return d()->data()->data(); }
- bool isShared() { return d()->data()->isShared(); }
- bool isDetachedBuffer() const { return d()->data().isNull(); }
- bool isSharedArrayBuffer() const { return d()->isShared; }
+ uint arrayDataLength() const { return d()->arrayDataLength(); }
+ char *arrayData() { return d()->arrayData(); }
+ const char *constArrayData() const { return d()->constArrayData(); }
+
+ bool hasSharedArrayData() { return d()->hasSharedArrayData(); }
+ bool hasDetachedArrayData() const { return d()->hasDetachedArrayData(); }
+ bool isSharedArrayBuffer() const { return d()->isSharedArrayBuffer(); }
};
struct Q_QML_PRIVATE_EXPORT ArrayBuffer : SharedArrayBuffer
@@ -140,14 +155,14 @@ struct Q_QML_PRIVATE_EXPORT ArrayBuffer : SharedArrayBuffer
V4_PROTOTYPE(arrayBufferPrototype)
QByteArray asByteArray() const;
- uint byteLength() const { return d()->byteLength(); }
- char *data() { if (d()->data().needsDetach()) detach(); return d()->data().data(); }
+ uint arrayDataLength() const { return d()->arrayDataLength(); }
+ char *dataData() { if (d()->arrayDataNeedsDetach()) detach(); return d()->arrayData(); }
// ### is that detach needed?
- const char *constData() const { return d()->data().data(); }
+ const char *constArrayData() const { return d()->constArrayData(); }
+ bool hasSharedArrayData() { return d()->hasSharedArrayData(); }
+ void detachArrayData() { d()->detachArrayData(); }
- bool isShared() { return d()->data()->isShared(); }
void detach();
- void detachArrayBuffer() { d()->detachArrayBuffer(); }
};
struct SharedArrayBufferPrototype : Object