Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qv4arraybuffer_p.h
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant
4#ifndef QV4ARRAYBUFFER_H
5#define QV4ARRAYBUFFER_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qv4object_p.h"
20#include <QtCore/qarraydatapointer.h>
21
23
24namespace QV4 {
25
26namespace Heap {
27
29 void init(QV4::ExecutionEngine *engine);
30};
31
33 void init(QV4::ExecutionEngine *engine);
34};
35
37 void init(size_t length);
38 void init(const QByteArray& array);
39 void destroy();
40
41 void setSharedArrayBuffer(bool shared) noexcept { isShared = shared; }
42 bool isSharedArrayBuffer() const noexcept { return isShared; }
43
44 char *arrayData() noexcept { return arrayDataPointer()->data(); }
45 const char *constArrayData() const noexcept { return constArrayDataPointer()->data(); }
46 uint arrayDataLength() const noexcept { return constArrayDataPointer().size; }
47
48 bool hasSharedArrayData() const noexcept { return constArrayDataPointer().isShared(); }
49 bool hasDetachedArrayData() const noexcept { return constArrayDataPointer().isNull(); }
50 void detachArrayData() noexcept { arrayDataPointer().clear(); }
51
52 bool arrayDataNeedsDetach() const noexcept { return constArrayDataPointer().needsDetach(); }
53
54private:
55 const QArrayDataPointer<const char> &constArrayDataPointer() const noexcept
56 {
57 return *reinterpret_cast<const QArrayDataPointer<const char> *>(&arrayDataPointerStorage);
58 }
59 QArrayDataPointer<char> &arrayDataPointer() noexcept
60 {
61 return *reinterpret_cast<QArrayDataPointer<char> *>(&arrayDataPointerStorage);
62 }
63
64 template <typename T>
65 struct storage_t { alignas(T) unsigned char data[sizeof(T)]; };
66
69 bool isShared;
70};
71
82
83}
84
86{
87 V4_OBJECT2(SharedArrayBufferCtor, FunctionObject)
88
89 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
90 static ReturnedValue virtualCall(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc);
91};
92
94{
96
97 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
98
99 static ReturnedValue method_isView(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
100};
101
103{
107
109
110 uint arrayDataLength() const { return d()->arrayDataLength(); }
111 char *arrayData() { return d()->arrayData(); }
112 const char *constArrayData() const { return d()->constArrayData(); }
113
115 bool hasDetachedArrayData() const { return d()->hasDetachedArrayData(); }
116 bool isSharedArrayBuffer() const { return d()->isSharedArrayBuffer(); }
117};
118
120{
124
125 QByteArray asByteArray() const;
126 uint arrayDataLength() const { return d()->arrayDataLength(); }
127 char *dataData() { if (d()->arrayDataNeedsDetach()) detach(); return d()->arrayData(); }
128 // ### is that detach needed?
129 const char *constArrayData() const { return d()->constArrayData(); }
132
133 void detach();
134};
135
137{
138 void init(ExecutionEngine *engine, Object *ctor);
139
140 static ReturnedValue method_get_byteLength(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
141 static ReturnedValue method_slice(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
142
143 static ReturnedValue slice(const FunctionObject *b, const Value *thisObject, const Value *argv, int argc, bool shared);
144};
145
147{
148 void init(ExecutionEngine *engine, Object *ctor);
149
150 static ReturnedValue method_get_byteLength(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
151 static ReturnedValue method_slice(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
152 static ReturnedValue method_toString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
153};
154
155
156} // namespace QV4
157
158QT_END_NAMESPACE
159
160#endif
Definition qjsvalue.h:23
DEFINE_OBJECT_VTABLE(SharedArrayBufferCtor)
DEFINE_OBJECT_VTABLE(ArrayBufferCtor)
DEFINE_OBJECT_VTABLE(ArrayBuffer)
DEFINE_OBJECT_VTABLE(SharedArrayBuffer)
#define V4_NEEDS_DESTROY
#define RETURN_UNDEFINED()
static ReturnedValue method_isView(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue method_get_byteLength(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue method_toString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue method_slice(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
void init(ExecutionEngine *engine, Object *ctor)
void init(QV4::ExecutionEngine *engine)
void init(QV4::ExecutionEngine *engine)
static ReturnedValue virtualCall(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc)
void init(ExecutionEngine *engine, Object *ctor)
static ReturnedValue method_get_byteLength(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue method_slice(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static ReturnedValue slice(const FunctionObject *b, const Value *thisObject, const Value *argv, int argc, bool shared)