//// TypedArrays.h////// Created by Clement on 7/9/14.// Copyright 2014 High Fidelity, Inc.//// Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #ifndef hifi_TypedArrays_h#define hifi_TypedArrays_h #include "ArrayBufferViewClass.h" static const QString BYTES_PER_ELEMENT_PROPERTY_NAME = "BYTES_PER_ELEMENT";static const QString LENGTH_PROPERTY_NAME = "length"; static const QString INT_8_ARRAY_CLASS_NAME = "Int8Array";static const QString UINT_8_ARRAY_CLASS_NAME = "Uint8Array";static const QString UINT_8_CLAMPED_ARRAY_CLASS_NAME = "Uint8ClampedArray";static const QString INT_16_ARRAY_CLASS_NAME = "Int16Array";static const QString UINT_16_ARRAY_CLASS_NAME = "Uint16Array";static const QString INT_32_ARRAY_CLASS_NAME = "Int32Array";static const QString UINT_32_ARRAY_CLASS_NAME = "Uint32Array";static const QString FLOAT_32_ARRAY_CLASS_NAME = "Float32Array";static const QString FLOAT_64_ARRAY_CLASS_NAME = "Float64Array"; class TypedArray : public ArrayBufferViewClass { Q_OBJECTpublic: TypedArray(ScriptEngine* scriptEngine, QString name); virtual QScriptValue newInstance(quint32 length); virtual QScriptValue newInstance(QScriptValue array); virtual QScriptValue newInstance(QScriptValue buffer, quint32 byteOffset, quint32 length); virtual QueryFlags queryProperty(const QScriptValue& object, const QScriptString& name, QueryFlags flags, uint* id); virtual QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); virtual void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value) = 0; virtual QScriptValue::PropertyFlags propertyFlags(const QScriptValue& object, const QScriptString& name, uint id); QString name() const; QScriptValue prototype() const; protected: static QScriptValue construct(QScriptContext* context, QScriptEngine* engine); void setBytesPerElement(quint32 bytesPerElement); QScriptValue _proto; QScriptValue _ctor; QScriptString _name; QScriptString _bytesPerElementName; QScriptString _lengthName; quint32 _bytesPerElement; friend class TypedArrayPrototype;}; class Int8ArrayClass : public TypedArray { Q_OBJECTpublic: Int8ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Uint8ArrayClass : public TypedArray { Q_OBJECTpublic: Uint8ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Uint8ClampedArrayClass : public TypedArray { Q_OBJECTpublic: Uint8ClampedArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Int16ArrayClass : public TypedArray { Q_OBJECTpublic: Int16ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Uint16ArrayClass : public TypedArray { Q_OBJECTpublic: Uint16ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Int32ArrayClass : public TypedArray { Q_OBJECTpublic: Int32ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Uint32ArrayClass : public TypedArray { Q_OBJECTpublic: Uint32ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Float32ArrayClass : public TypedArray { Q_OBJECTpublic: Float32ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; class Float64ArrayClass : public TypedArray { Q_OBJECTpublic: Float64ArrayClass(ScriptEngine* scriptEngine); QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id); void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);}; #endif // hifi_TypedArrays_h
//
// TypedArrays.h
//
//
// Created by Clement on 7/9/14.
// Copyright 2014 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_TypedArrays_h
#define hifi_TypedArrays_h
#include "ArrayBufferViewClass.h"
static const QString BYTES_PER_ELEMENT_PROPERTY_NAME = "BYTES_PER_ELEMENT";
static const QString LENGTH_PROPERTY_NAME = "length";
static const QString INT_8_ARRAY_CLASS_NAME = "Int8Array";
static const QString UINT_8_ARRAY_CLASS_NAME = "Uint8Array";
static const QString UINT_8_CLAMPED_ARRAY_CLASS_NAME = "Uint8ClampedArray";
static const QString INT_16_ARRAY_CLASS_NAME = "Int16Array";
static const QString UINT_16_ARRAY_CLASS_NAME = "Uint16Array";
static const QString INT_32_ARRAY_CLASS_NAME = "Int32Array";
static const QString UINT_32_ARRAY_CLASS_NAME = "Uint32Array";
static const QString FLOAT_32_ARRAY_CLASS_NAME = "Float32Array";
static const QString FLOAT_64_ARRAY_CLASS_NAME = "Float64Array";
class TypedArray : public ArrayBufferViewClass {
Q_OBJECT
public:
TypedArray(ScriptEngine* scriptEngine, QString name);
virtual QScriptValue newInstance(quint32 length);
virtual QScriptValue newInstance(QScriptValue array);
virtual QScriptValue newInstance(QScriptValue buffer, quint32 byteOffset, quint32 length);
virtual QueryFlags queryProperty(const QScriptValue& object,
const QScriptString& name,
QueryFlags flags, uint* id);
virtual QScriptValue property(const QScriptValue& object,
const QScriptString& name, uint id);
virtual void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value) = 0;
virtual QScriptValue::PropertyFlags propertyFlags(const QScriptValue& object,
const QScriptString& name, uint id);
QString name() const;
QScriptValue prototype() const;
protected:
static QScriptValue construct(QScriptContext* context, QScriptEngine* engine);
void setBytesPerElement(quint32 bytesPerElement);
QScriptValue _proto;
QScriptValue _ctor;
QScriptString _name;
QScriptString _bytesPerElementName;
QScriptString _lengthName;
quint32 _bytesPerElement;
friend class TypedArrayPrototype;
};
class Int8ArrayClass : public TypedArray {
Q_OBJECT
public:
Int8ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Uint8ArrayClass : public TypedArray {
Q_OBJECT
public:
Uint8ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Uint8ClampedArrayClass : public TypedArray {
Q_OBJECT
public:
Uint8ClampedArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Int16ArrayClass : public TypedArray {
Q_OBJECT
public:
Int16ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Uint16ArrayClass : public TypedArray {
Q_OBJECT
public:
Uint16ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Int32ArrayClass : public TypedArray {
Q_OBJECT
public:
Int32ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Uint32ArrayClass : public TypedArray {
Q_OBJECT
public:
Uint32ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Float32ArrayClass : public TypedArray {
Q_OBJECT
public:
Float32ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
class Float64ArrayClass : public TypedArray {
Q_OBJECT
public:
Float64ArrayClass(ScriptEngine* scriptEngine);
QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id);
void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value);
};
#endif // hifi_TypedArrays_h