blob: 9be0c78e6c36a66a6fbf8329cb8a3b8640204e13 [file] [log] [blame]
// 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