| // 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. | |
| #ifndef QUICHE_QUIC_PLATFORM_API_QUIC_MEM_SLICE_SPAN_H_ | |
| #define QUICHE_QUIC_PLATFORM_API_QUIC_MEM_SLICE_SPAN_H_ | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_export.h" | |
| #include "net/quic/platform/impl/quic_mem_slice_span_impl.h" | |
| namespace quic { | |
| // QuicMemSliceSpan is effectively wrapper around an array of data structures | |
| // used as QuicMemSlice. So it could implemented with: | |
| // QuicMemSlice* slices_; | |
| // size_t num_slices_; | |
| // But for efficiency reasons, the actual implementation is an array of | |
| // platform-specific objects. This could avoid the translation from | |
| // platform-specific object to QuicMemSlice. | |
| // QuicMemSliceSpan does not own the underling data buffers. | |
| class QUIC_EXPORT_PRIVATE QuicMemSliceSpan { | |
| public: | |
| explicit QuicMemSliceSpan(QuicMemSliceSpanImpl impl) : impl_(impl) {} | |
| QuicMemSliceSpan(const QuicMemSliceSpan& other) = default; | |
| QuicMemSliceSpan& operator=(const QuicMemSliceSpan& other) = default; | |
| QuicMemSliceSpan(QuicMemSliceSpan&& other) = default; | |
| QuicMemSliceSpan& operator=(QuicMemSliceSpan&& other) = default; | |
| ~QuicMemSliceSpan() = default; | |
| // Save data buffers to |send_buffer| and returns the amount of saved data. | |
| // |send_buffer| will hold a reference to all data buffer. | |
| QuicByteCount SaveMemSlicesInSendBuffer(QuicStreamSendBuffer* send_buffer) { | |
| return impl_.SaveMemSlicesInSendBuffer(send_buffer); | |
| } | |
| // Save data buffers as message data in |message_frame|. |message_frame| will | |
| // hold a reference to all data buffers. | |
| void SaveMemSlicesAsMessageData(QuicMessageFrame* message_frame) { | |
| impl_.SaveMemSlicesAsMessageData(message_frame); | |
| } | |
| // Return data of the span at |index| by the form of a QuicStringPiece. | |
| QuicStringPiece GetData(int index) { return impl_.GetData(index); } | |
| // Return the total length of the data inside the span. | |
| QuicByteCount total_length() { return impl_.total_length(); } | |
| // Return total number of slices in the span. | |
| size_t NumSlices() { return impl_.NumSlices(); } | |
| bool empty() const { return impl_.empty(); } | |
| private: | |
| QuicMemSliceSpanImpl impl_; | |
| }; | |
| } // namespace quic | |
| #endif // QUICHE_QUIC_PLATFORM_API_QUIC_MEM_SLICE_SPAN_H_ |