Index: runtime/bin/dartutils.h |
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h |
index da7653e1f1730c9f6c20fb7569764e46118fae66..aca80013d7e7871614e798a677b20f6dad97a02d 100644 |
--- a/runtime/bin/dartutils.h |
+++ b/runtime/bin/dartutils.h |
@@ -205,6 +205,10 @@ class CObject { |
public: |
explicit CObject(Dart_CObject *cobject) : cobject_(cobject) {} |
Dart_CObject::Type type() { return cobject_->type; } |
+ Dart_CObject::TypedDataType byte_array_type() { |
siva
2013/04/15 23:28:45
for consistency should we name this typed_data_typ
|
+ ASSERT(type() == Dart_CObject::kTypedData); |
+ return cobject_->value.as_typed_data.type; |
+ } |
bool IsNull() { return type() == Dart_CObject::kNull; } |
bool IsBool() { return type() == Dart_CObject::kBool; } |
@@ -216,7 +220,11 @@ class CObject { |
bool IsDouble() { return type() == Dart_CObject::kDouble; } |
bool IsString() { return type() == Dart_CObject::kString; } |
bool IsArray() { return type() == Dart_CObject::kArray; } |
- bool IsUint8Array() { return type() == Dart_CObject::kUint8Array; } |
+ bool IsTypedData() { return type() == Dart_CObject::kTypedData; } |
+ bool IsUint8Array() { |
+ return type() == Dart_CObject::kTypedData && |
+ byte_array_type() == Dart_CObject::kUint8Array; |
+ } |
bool IsTrue() { |
return type() == Dart_CObject::kBool && cobject_->value.as_bool; |
@@ -288,7 +296,35 @@ class CObject { |
ASSERT(cobject != NULL); \ |
ASSERT(cobject->type() == Dart_CObject::k##t); \ |
cobject_ = cobject->AsApiCObject(); \ |
- } |
+ } \ |
+ |
+ |
+#define DECLARE_COBJECT_TYPED_DATA_CONSTRUCTORS(t) \ |
+ explicit CObject##t(Dart_CObject *cobject) : CObject(cobject) { \ |
+ ASSERT(type() == Dart_CObject::kTypedData); \ |
+ ASSERT(byte_array_type() == Dart_CObject::k##t); \ |
+ cobject_ = cobject; \ |
+ } \ |
+ explicit CObject##t(CObject* cobject) : CObject() { \ |
+ ASSERT(cobject != NULL); \ |
+ ASSERT(cobject->type() == Dart_CObject::kTypedData); \ |
+ ASSERT(cobject->byte_array_type() == Dart_CObject::k##t); \ |
+ cobject_ = cobject->AsApiCObject(); \ |
+ } \ |
+ |
+ |
+#define DECLARE_COBJECT_EXTERNAL_TYPED_DATA_CONSTRUCTORS(t) \ |
+ explicit CObjectExternal##t(Dart_CObject *cobject) : CObject(cobject) { \ |
+ ASSERT(type() == Dart_CObject::kExternalTypedData); \ |
+ ASSERT(byte_array_type() == Dart_CObject::k##t); \ |
+ cobject_ = cobject; \ |
+ } \ |
+ explicit CObjectExternal##t(CObject* cobject) : CObject() { \ |
+ ASSERT(cobject != NULL); \ |
+ ASSERT(cobject->type() == Dart_CObject::kExternalTypedData); \ |
+ ASSERT(cobject->byte_array_type() == Dart_CObject::k##t); \ |
+ cobject_ = cobject->AsApiCObject(); \ |
+ } \ |
class CObjectBool : public CObject { |
@@ -404,12 +440,35 @@ class CObjectArray : public CObject { |
}; |
+class CObjectTypedData : public CObject { |
+ public: |
+ explicit CObjectTypedData(Dart_CObject *cobject) : CObject(cobject) { |
+ ASSERT(type() == Dart_CObject::kTypedData); |
+ cobject_ = cobject; |
+ } |
+ explicit CObjectTypedData(CObject* cobject) : CObject() { |
+ ASSERT(cobject != NULL); |
+ ASSERT(cobject->type() == Dart_CObject::kTypedData); |
+ cobject_ = cobject->AsApiCObject(); |
+ } |
+ |
+ Dart_CObject::TypedDataType Type() const { |
+ return cobject_->value.as_typed_data.type; |
+ } |
+ int Length() const { return cobject_->value.as_typed_data.length; } |
+ uint8_t* Buffer() const { return cobject_->value.as_typed_data.values; } |
siva
2013/04/15 23:28:45
probably need accessors:
Peer
Callback
etc. for
|
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(CObjectTypedData); |
+}; |
+ |
+ |
class CObjectUint8Array : public CObject { |
public: |
- DECLARE_COBJECT_CONSTRUCTORS(Uint8Array) |
+ DECLARE_COBJECT_TYPED_DATA_CONSTRUCTORS(Uint8Array) |
- int Length() const { return cobject_->value.as_byte_array.length; } |
- uint8_t* Buffer() const { return cobject_->value.as_byte_array.values; } |
+ int Length() const { return cobject_->value.as_typed_data.length; } |
+ uint8_t* Buffer() const { return cobject_->value.as_typed_data.values; } |
private: |
DISALLOW_COPY_AND_ASSIGN(CObjectUint8Array); |
@@ -418,16 +477,16 @@ class CObjectUint8Array : public CObject { |
class CObjectExternalUint8Array : public CObject { |
public: |
- DECLARE_COBJECT_CONSTRUCTORS(ExternalUint8Array) |
+ DECLARE_COBJECT_EXTERNAL_TYPED_DATA_CONSTRUCTORS(Uint8Array) |
- int Length() const { return cobject_->value.as_external_byte_array.length; } |
+ int Length() const { return cobject_->value.as_external_typed_data.length; } |
void SetLength(uint64_t length) { |
- cobject_->value.as_external_byte_array.length = length; |
+ cobject_->value.as_external_typed_data.length = length; |
} |
- uint8_t* Data() const { return cobject_->value.as_external_byte_array.data; } |
- void* Peer() const { return cobject_->value.as_external_byte_array.peer; } |
+ uint8_t* Data() const { return cobject_->value.as_external_typed_data.data; } |
+ void* Peer() const { return cobject_->value.as_external_typed_data.peer; } |
Dart_WeakPersistentHandleFinalizer Callback() const { |
- return cobject_->value.as_external_byte_array.callback; |
+ return cobject_->value.as_external_typed_data.callback; |
} |
private: |