| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/third_party/quic/platform/impl/quic_mem_slice_span_impl.h" |
| |
| #include "net/third_party/quic/core/frames/quic_message_frame.h" |
| #include "net/third_party/quic/core/quic_stream_send_buffer.h" |
| #include "net/third_party/quic/platform/api/quic_bug_tracker.h" |
| |
| namespace quic { |
| |
| QuicMemSliceSpanImpl::QuicMemSliceSpanImpl( |
| const scoped_refptr<net::IOBuffer>* buffers, |
| const int* lengths, |
| size_t num_buffers) |
| : buffers_(buffers), lengths_(lengths), num_buffers_(num_buffers) {} |
| |
| QuicMemSliceSpanImpl::QuicMemSliceSpanImpl(const QuicMemSliceSpanImpl& other) = |
| default; |
| QuicMemSliceSpanImpl& QuicMemSliceSpanImpl::operator=( |
| const QuicMemSliceSpanImpl& other) = default; |
| QuicMemSliceSpanImpl::QuicMemSliceSpanImpl(QuicMemSliceSpanImpl&& other) = |
| default; |
| QuicMemSliceSpanImpl& QuicMemSliceSpanImpl::operator=( |
| QuicMemSliceSpanImpl&& other) = default; |
| |
| QuicMemSliceSpanImpl::~QuicMemSliceSpanImpl() = default; |
| |
| QuicByteCount QuicMemSliceSpanImpl::SaveMemSlicesInSendBuffer( |
| QuicStreamSendBuffer* send_buffer) { |
| size_t saved_length = 0; |
| for (size_t i = 0; i < num_buffers_; ++i) { |
| if (lengths_[i] == 0) { |
| // Skip empty buffer. |
| continue; |
| } |
| saved_length += lengths_[i]; |
| send_buffer->SaveMemSlice( |
| QuicMemSlice(QuicMemSliceImpl(buffers_[i], lengths_[i]))); |
| } |
| return saved_length; |
| } |
| |
| void QuicMemSliceSpanImpl::SaveMemSlicesAsMessageData( |
| QuicMessageFrame* message_frame) { |
| for (size_t i = 0; i < num_buffers_; ++i) { |
| if (lengths_[i] == 0) { |
| // Skip empty buffer. |
| continue; |
| } |
| message_frame->message_length += lengths_[i]; |
| message_frame->message_data.push_back( |
| QuicMemSlice(QuicMemSliceImpl(buffers_[i], lengths_[i]))); |
| } |
| } |
| |
| QuicByteCount QuicMemSliceSpanImpl::total_length() { |
| QuicByteCount length = 0; |
| for (size_t i = 0; i < num_buffers_; ++i) { |
| length += lengths_[i]; |
| } |
| return length; |
| } |
| |
| } // namespace quic |