diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/typed_arrays/dom_array_piece.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/typed_arrays/dom_array_piece.cc | 78 |
1 files changed, 70 insertions, 8 deletions
diff --git a/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_piece.cc b/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_piece.cc index 3118f4ab3cf..6e47cd45906 100644 --- a/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_piece.cc +++ b/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_piece.cc @@ -9,19 +9,81 @@ namespace blink { DOMArrayPiece::DOMArrayPiece( - const ArrayBufferOrArrayBufferView& array_buffer_or_view, - InitWithUnionOption option) { + const ArrayBufferOrArrayBufferView& array_buffer_or_view) { if (array_buffer_or_view.IsArrayBuffer()) { DOMArrayBuffer* array_buffer = array_buffer_or_view.GetAsArrayBuffer(); - InitWithArrayBuffer(array_buffer->Buffer()); + InitWithArrayBuffer(array_buffer); } else if (array_buffer_or_view.IsArrayBufferView()) { DOMArrayBufferView* array_buffer_view = array_buffer_or_view.GetAsArrayBufferView().View(); - InitWithArrayBufferView(array_buffer_view->View()); - } else if (array_buffer_or_view.IsNull() && - option == kAllowNullPointToNullWithZeroSize) { - InitWithData(nullptr, 0); - } // Otherwise, leave the obejct as null. + InitWithArrayBufferView(array_buffer_view); + } +} +/////////////////////////////////////////////////////// +DOMArrayPiece::DOMArrayPiece() { + InitNull(); +} + +DOMArrayPiece::DOMArrayPiece(DOMArrayBuffer* buffer) { + InitWithArrayBuffer(buffer); +} + +DOMArrayPiece::DOMArrayPiece(DOMArrayBufferView* buffer) { + InitWithArrayBufferView(buffer); +} + +bool DOMArrayPiece::IsNull() const { + return is_null_; +} + +bool DOMArrayPiece::IsDetached() const { + return is_detached_; +} + +void* DOMArrayPiece::Data() const { + DCHECK(!IsNull()); + return data_; +} + +unsigned char* DOMArrayPiece::Bytes() const { + return static_cast<unsigned char*>(Data()); +} + +size_t DOMArrayPiece::ByteLengthAsSizeT() const { + DCHECK(!IsNull()); + return byte_length_; +} + +void DOMArrayPiece::InitWithArrayBuffer(DOMArrayBuffer* buffer) { + if (buffer) { + InitWithData(buffer->Data(), buffer->ByteLengthAsSizeT()); + is_detached_ = buffer->IsDetached(); + } else { + InitNull(); + } +} + +void DOMArrayPiece::InitWithArrayBufferView(DOMArrayBufferView* buffer) { + if (buffer) { + InitWithData(buffer->BaseAddress(), buffer->byteLengthAsSizeT()); + is_detached_ = buffer->buffer() ? buffer->buffer()->IsDetached() : true; + } else { + InitNull(); + } +} + +void DOMArrayPiece::InitWithData(void* data, size_t byte_length) { + byte_length_ = byte_length; + data_ = data; + is_null_ = false; + is_detached_ = false; +} + +void DOMArrayPiece::InitNull() { + byte_length_ = 0; + data_ = nullptr; + is_null_ = true; + is_detached_ = false; } } // namespace blink |