Chromium Code Reviews| 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: |