History

CR feedback and code cleanup

humbletim committed 8 years ago

Commit 3a735c11 parent 395cc6614 files · +652 −365Browse files

Showing the changes to libraries/script-engine/src/ArrayBufferViewClass.cpp (1 of 14 files). Show all

Unified · Split

libraries/script-engine/src/ArrayBufferViewClass.cpp+34−1
@@ -11,7 +11,8 @@ · 10 unmodified lines
11 11
12#include "ArrayBufferViewClass.h"12#include "ArrayBufferViewClass.h"
13 13
14Q_DECLARE_METATYPE(QByteArray*)14int qScriptClassPointerMetaTypeId = qRegisterMetaType<QScriptClass*>();
15int qByteArrayMetaTypeId = qRegisterMetaType<QByteArray>();
15 16
16ArrayBufferViewClass::ArrayBufferViewClass(ScriptEngine* scriptEngine) :17ArrayBufferViewClass::ArrayBufferViewClass(ScriptEngine* scriptEngine) :
17QObject(scriptEngine),18QObject(scriptEngine),
@@ -21,6 +22,7 @@ _scriptEngine(scriptEngine) { · 3 unmodified lines
21 _bufferName = engine()->toStringHandle(BUFFER_PROPERTY_NAME.toLatin1());22 _bufferName = engine()->toStringHandle(BUFFER_PROPERTY_NAME.toLatin1());
22 _byteOffsetName = engine()->toStringHandle(BYTE_OFFSET_PROPERTY_NAME.toLatin1());23 _byteOffsetName = engine()->toStringHandle(BYTE_OFFSET_PROPERTY_NAME.toLatin1());
23 _byteLengthName = engine()->toStringHandle(BYTE_LENGTH_PROPERTY_NAME.toLatin1());24 _byteLengthName = engine()->toStringHandle(BYTE_LENGTH_PROPERTY_NAME.toLatin1());
25 registerMetaTypes(scriptEngine);
24}26}
25 27
26QScriptClass::QueryFlags ArrayBufferViewClass::queryProperty(const QScriptValue& object,28QScriptClass::QueryFlags ArrayBufferViewClass::queryProperty(const QScriptValue& object,
@@ -50,3 +52,34 @@ QScriptValue::PropertyFlags ArrayBufferViewClass::propertyFlags(const QScriptVal · 23 unmodified lines
50 const QScriptString& name, uint id) {52 const QScriptString& name, uint id) {
51 return QScriptValue::Undeletable;53 return QScriptValue::Undeletable;
52}54}
55
56namespace {
57 void byteArrayFromScriptValue(const QScriptValue& object, QByteArray& byteArray) {
58 if (object.isValid()) {
59 if (object.isObject()) {
60 if (object.isArray()) {
61 auto Uint8Array = object.engine()->globalObject().property("Uint8Array");
62 auto typedArray = Uint8Array.construct(QScriptValueList{object});
63 byteArray = qvariant_cast<QByteArray>(typedArray.property("buffer").toVariant());
64 } else {
65 byteArray = qvariant_cast<QByteArray>(object.data().toVariant());
66 }
67 } else {
68 byteArray = object.toString().toUtf8();
69 }
70 }
71 }
72
73 QScriptValue byteArrayToScriptValue(QScriptEngine *engine, const QByteArray& byteArray) {
74 QScriptValue data = engine->newVariant(QVariant::fromValue(byteArray));
75 QScriptValue constructor = engine->globalObject().property("ArrayBuffer");
76 Q_ASSERT(constructor.isValid());
77 auto array = qscriptvalue_cast<QScriptClass*>(constructor.data());
78 Q_ASSERT(array);
79 return engine->newObject(array, data);
80 }
81}
82
83void ArrayBufferViewClass::registerMetaTypes(QScriptEngine* scriptEngine) {
84 qScriptRegisterMetaType(scriptEngine, byteArrayToScriptValue, byteArrayFromScriptValue);
85}