-
-// An ExternalArray represents a fixed-size array of primitive values
-// which live outside the JavaScript heap. Its subclasses are used to
-// implement the CanvasArray types being defined in the WebGL
-// specification. As of this writing the first public draft is not yet
-// available, but Khronos members can access the draft at:
-// https://cvs.khronos.org/svn/repos/3dweb/trunk/doc/spec/WebGL-spec.html
-//
-// The semantics of these arrays differ from CanvasPixelArray.
-// Out-of-range values passed to the setter are converted via a C
-// cast, not clamping. Out-of-range indices cause exceptions to be
-// raised rather than being silently ignored.
-class ExternalArray: public FixedArrayBase {
- public:
- inline bool is_the_hole(int index) { return false; }
-
- // [external_pointer]: The pointer to the external memory area backing this
- // external array.
- DECL_ACCESSORS(external_pointer, void) // Pointer to the data store.
-
- DECLARE_CAST(ExternalArray)
-
- // Maximal acceptable length for an external array.
- static const int kMaxLength = 0x3fffffff;
-
- // ExternalArray headers are not quadword aligned.
- static const int kExternalPointerOffset =
- POINTER_SIZE_ALIGN(FixedArrayBase::kLengthOffset + kPointerSize);
- static const int kSize = kExternalPointerOffset + kPointerSize;
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalArray);
-};
-
-
-// A ExternalUint8ClampedArray represents a fixed-size byte array with special
-// semantics used for implementing the CanvasPixelArray object. Please see the
-// specification at:
-
-// http://www.whatwg.org/specs/web-apps/current-work/
-// multipage/the-canvas-element.html#canvaspixelarray
-// In particular, write access clamps the value written to 0 or 255 if the
-// value written is outside this range.
-class ExternalUint8ClampedArray: public ExternalArray {
- public:
- inline uint8_t* external_uint8_clamped_pointer();
-
- // Setter and getter.
- inline uint8_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalUint8ClampedArray> array,
- int index);
- inline void set(int index, uint8_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined and clamps the converted value between 0 and 255.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalUint8ClampedArray)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalUint8ClampedArray)
- DECLARE_VERIFIER(ExternalUint8ClampedArray)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8ClampedArray);
-};
-
-
-class ExternalInt8Array: public ExternalArray {
- public:
- // Setter and getter.
- inline int8_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalInt8Array> array, int index);
- inline void set(int index, int8_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalInt8Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalInt8Array)
- DECLARE_VERIFIER(ExternalInt8Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt8Array);
-};
-
-
-class ExternalUint8Array: public ExternalArray {
- public:
- // Setter and getter.
- inline uint8_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalUint8Array> array, int index);
- inline void set(int index, uint8_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalUint8Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalUint8Array)
- DECLARE_VERIFIER(ExternalUint8Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint8Array);
-};
-
-
-class ExternalInt16Array: public ExternalArray {
- public:
- // Setter and getter.
- inline int16_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalInt16Array> array, int index);
- inline void set(int index, int16_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalInt16Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalInt16Array)
- DECLARE_VERIFIER(ExternalInt16Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt16Array);
-};
-
-
-class ExternalUint16Array: public ExternalArray {
- public:
- // Setter and getter.
- inline uint16_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalUint16Array> array,
- int index);
- inline void set(int index, uint16_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalUint16Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalUint16Array)
- DECLARE_VERIFIER(ExternalUint16Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint16Array);
-};
-
-
-class ExternalInt32Array: public ExternalArray {
- public:
- // Setter and getter.
- inline int32_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalInt32Array> array, int index);
- inline void set(int index, int32_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalInt32Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalInt32Array)
- DECLARE_VERIFIER(ExternalInt32Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalInt32Array);
-};
-
-
-class ExternalUint32Array: public ExternalArray {
- public:
- // Setter and getter.
- inline uint32_t get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalUint32Array> array,
- int index);
- inline void set(int index, uint32_t value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalUint32Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalUint32Array)
- DECLARE_VERIFIER(ExternalUint32Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUint32Array);
-};
-
-
-class ExternalFloat32Array: public ExternalArray {
- public:
- // Setter and getter.
- inline float get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalFloat32Array> array,
- int index);
- inline void set(int index, float value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalFloat32Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalFloat32Array)
- DECLARE_VERIFIER(ExternalFloat32Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat32Array);
-};
-
-
-class ExternalFloat64Array: public ExternalArray {
- public:
- // Setter and getter.
- inline double get_scalar(int index);
- static inline Handle<Object> get(Handle<ExternalFloat64Array> array,
- int index);
- inline void set(int index, double value);
-
- // This accessor applies the correct conversion from Smi, HeapNumber
- // and undefined.
- void SetValue(uint32_t index, Object* value);
-
- DECLARE_CAST(ExternalFloat64Array)
-
- // Dispatched behavior.
- DECLARE_PRINTER(ExternalFloat64Array)
- DECLARE_VERIFIER(ExternalFloat64Array)
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloat64Array);
-};
-
-