Index: runtime/vm/raw_object.h |
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h |
index deef9986ab82252a6e60a1ff89c48f7ae593e4a8..f7bf58d4bf47bec0363a9691a5a3b05c02cae1d2 100644 |
--- a/runtime/vm/raw_object.h |
+++ b/runtime/vm/raw_object.h |
@@ -66,8 +66,26 @@ namespace dart { |
V(ImmutableArray) \ |
V(GrowableObjectArray) \ |
V(ByteArray) \ |
- V(InternalByteArray) \ |
- V(ExternalByteArray) \ |
+ V(Int8Array) \ |
+ V(Uint8Array) \ |
+ V(Int16Array) \ |
+ V(Uint16Array) \ |
+ V(Int32Array) \ |
+ V(Uint32Array) \ |
+ V(Int64Array) \ |
+ V(Uint64Array) \ |
+ V(Float32Array) \ |
+ V(Float64Array) \ |
+ V(ExternalInt8Array) \ |
+ V(ExternalUint8Array) \ |
+ V(ExternalInt16Array) \ |
+ V(ExternalUint16Array) \ |
+ V(ExternalInt32Array) \ |
+ V(ExternalUint32Array) \ |
+ V(ExternalInt64Array) \ |
+ V(ExternalUint64Array) \ |
+ V(ExternalFloat32Array) \ |
+ V(ExternalFloat64Array) \ |
V(Closure) \ |
V(Stacktrace) \ |
V(JSRegExp) \ |
@@ -1113,20 +1131,90 @@ class RawByteArray : public RawInstance { |
}; |
-class RawInternalByteArray : public RawByteArray { |
- RAW_HEAP_OBJECT_IMPLEMENTATION(InternalByteArray); |
+class RawInt8Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Int8Array); |
// Variable length data follows here. |
- uint8_t* data() { |
- uword address_of_length = reinterpret_cast<uword>(&length_); |
- return reinterpret_cast<uint8_t*>(address_of_length + kWordSize); |
- } |
+ int8_t data_[0]; |
+}; |
+ |
+ |
+class RawUint8Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Uint8Array); |
+ |
+ // Variable length data follows here. |
+ uint8_t data_[0]; |
+}; |
+ |
+ |
+class RawInt16Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Int16Array); |
+ |
+ // Variable length data follows here. |
+ int16_t data_[0]; |
+}; |
+ |
+ |
+class RawUint16Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Uint16Array); |
+ |
+ // Variable length data follows here. |
+ uint16_t data_[0]; |
+}; |
+ |
+ |
+class RawInt32Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Int32Array); |
+ |
+ // Variable length data follows here. |
+ int32_t data_[0]; |
+}; |
+ |
+ |
+class RawUint32Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Uint32Array); |
+ |
+ // Variable length data follows here. |
+ uint32_t data_[0]; |
+}; |
+ |
+ |
+class RawInt64Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Int64Array); |
+ |
+ // Variable length data follows here. |
+ int64_t data_[0]; |
+}; |
+ |
+ |
+class RawUint64Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Uint64Array); |
+ |
+ // Variable length data follows here. |
+ uint64_t data_[0]; |
+}; |
+ |
+ |
+class RawFloat32Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Float32Array); |
+ |
+ // Variable length data follows here. |
+ float data_[0]; |
}; |
+class RawFloat64Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(Float64Array); |
+ |
+ // Variable length data follows here. |
+ double data_[0]; |
+}; |
+ |
+ |
+template<typename T> |
class ExternalByteArrayData { |
public: |
- ExternalByteArrayData(uint8_t* data, |
+ ExternalByteArrayData(T* data, |
void* peer, |
Dart_PeerFinalizer callback) : |
data_(data), peer_(peer), callback_(callback) { |
@@ -1135,7 +1223,7 @@ class ExternalByteArrayData { |
if (callback_ != NULL) (*callback_)(peer_); |
} |
- uint8_t* data() { |
+ T* data() { |
return data_; |
} |
void* peer() { |
@@ -1143,16 +1231,79 @@ class ExternalByteArrayData { |
} |
private: |
- uint8_t* data_; |
+ T* data_; |
void* peer_; |
Dart_PeerFinalizer callback_; |
}; |
-class RawExternalByteArray : public RawByteArray { |
- RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalByteArray); |
+class RawExternalInt8Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array); |
+ |
+ ExternalByteArrayData<int8_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalUint8Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array); |
+ |
+ ExternalByteArrayData<uint8_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalInt16Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array); |
+ |
+ ExternalByteArrayData<int16_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalUint16Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array); |
+ |
+ ExternalByteArrayData<uint16_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalInt32Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array); |
+ |
+ ExternalByteArrayData<int32_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalUint32Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array); |
+ |
+ ExternalByteArrayData<uint32_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalInt64Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array); |
+ |
+ ExternalByteArrayData<int64_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalUint64Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array); |
+ |
+ ExternalByteArrayData<uint64_t>* external_data_; |
+}; |
+ |
+ |
+class RawExternalFloat32Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array); |
+ |
+ ExternalByteArrayData<float>* external_data_; |
+}; |
+ |
+ |
+class RawExternalFloat64Array: public RawByteArray { |
+ RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array); |
- ExternalByteArrayData* external_data_; |
+ ExternalByteArrayData<double>* external_data_; |
}; |