diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-01-09 13:07:49 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2022-01-20 19:33:01 +0100 |
commit | 3027d8ed74705cd0dd43009acdb6f354d430d5ba (patch) | |
tree | c65df935ca55693482383d1d75cf79c88d5dfe11 /src/qml/jsruntime/qv4arraybuffer_p.h | |
parent | ed6b31389ac554287b4e00a6ad743e6ebf72160f (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.h | 63 |
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 |