Chromium Code Reviews| Index: runtime/vm/object.h |
| =================================================================== |
| --- runtime/vm/object.h (revision 15751) |
| +++ runtime/vm/object.h (working copy) |
| @@ -4665,6 +4665,59 @@ |
| }; |
| +class Uint8ClampedArray : public ByteArray { |
|
siva
2012/12/06 01:31:13
If we make RawUint8ClampedArray extend RawUint8Arr
srdjan
2012/12/06 19:23:14
Done.
|
| + public: |
| + intptr_t ByteLength() const { |
| + return Length(); |
| + } |
| + |
| + uint8_t At(intptr_t index) const { |
| + ASSERT((index >= 0) && (index < Length())); |
| + return raw_ptr()->data_[index]; |
| + } |
| + |
| + void SetAt(intptr_t index, uint8_t value) const { |
| + ASSERT((index >= 0) && (index < Length())); |
| + raw_ptr()->data_[index] = value; |
| + } |
| + |
| + static const intptr_t kBytesPerElement = 1; |
| + static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; |
| + |
| + static intptr_t data_offset() { |
| + return OFFSET_OF(RawUint8ClampedArray, data_); |
| + } |
| + |
| + static intptr_t InstanceSize() { |
| + ASSERT(sizeof(RawUint8ClampedArray) == |
| + OFFSET_OF(RawUint8ClampedArray, data_)); |
| + return 0; |
| + } |
| + |
| + static intptr_t InstanceSize(intptr_t len) { |
| + ASSERT(0 <= len && len <= kMaxElements); |
| + return RoundedAllocationSize( |
| + sizeof(RawUint8ClampedArray) + (len * kBytesPerElement)); |
| + } |
| + |
| + static RawUint8ClampedArray* New(intptr_t len, |
| + Heap::Space space = Heap::kNew); |
| + static RawUint8ClampedArray* New(const uint8_t* data, |
| + intptr_t len, |
| + Heap::Space space = Heap::kNew); |
| + |
| + private: |
| + uint8_t* ByteAddr(intptr_t byte_offset) const { |
| + ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
| + return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
| + } |
| + |
| + HEAP_OBJECT_IMPLEMENTATION(Uint8ClampedArray, ByteArray); |
| + friend class ByteArray; |
| + friend class Class; |
| +}; |
| + |
| + |
| class Int16Array : public ByteArray { |
| public: |
| intptr_t ByteLength() const { |
| @@ -5202,6 +5255,69 @@ |
| }; |
| +class ExternalUint8ClampedArray : public ByteArray { |
| + public: |
| + intptr_t ByteLength() const { |
| + return Length() * kBytesPerElement; |
| + } |
| + |
| + uint8_t At(intptr_t index) const { |
| + ASSERT((index >= 0) && (index < Length())); |
| + return raw_ptr()->external_data_->data()[index]; |
| + } |
| + |
| + void SetAt(intptr_t index, uint8_t value) const { |
| + ASSERT((index >= 0) && (index < Length())); |
| + raw_ptr()->external_data_->data()[index] = value; |
| + } |
| + |
| + void* GetData() const { |
| + return raw_ptr()->external_data_->data(); |
| + } |
| + |
| + void* GetPeer() const { |
| + return raw_ptr()->external_data_->peer(); |
| + } |
| + |
| + static const intptr_t kBytesPerElement = 1; |
| + |
| + // Since external arrays may be serialized to non-external ones, |
| + // enforce the same maximum element count. |
| + static const intptr_t kMaxElements = Uint8ClampedArray::kMaxElements; |
| + |
| + static intptr_t InstanceSize() { |
| + return RoundedAllocationSize(sizeof(RawExternalUint8ClampedArray)); |
| + } |
| + |
| + static intptr_t external_data_offset() { |
| + return OFFSET_OF(RawExternalUint8ClampedArray, external_data_); |
| + } |
| + |
| + static RawExternalUint8ClampedArray* New(uint8_t* data, |
| + intptr_t len, |
| + void* peer, |
| + Dart_PeerFinalizer callback, |
| + Heap::Space space = Heap::kNew); |
| + |
| + private: |
| + uint8_t* ByteAddr(intptr_t byte_offset) const { |
| + ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
| + uint8_t* data = |
| + reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
| + return data + byte_offset; |
| + } |
| + |
| + void SetExternalData(ExternalByteArrayData<uint8_t>* data) { |
| + raw_ptr()->external_data_ = data; |
| + } |
| + |
| + HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray, ByteArray); |
| + friend class ByteArray; |
| + friend class Class; |
| + friend class TokenStream; |
| +}; |
| + |
| + |
| class ExternalInt16Array : public ByteArray { |
| public: |
| intptr_t ByteLength() const { |