| // 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_COMMON_QUICHE_MEM_SLICE_STORAGE_H_ |
| #define QUICHE_COMMON_QUICHE_MEM_SLICE_STORAGE_H_ |
| |
| #include <vector> |
| |
| #include "absl/types/span.h" |
| #include "quiche/quic/core/quic_types.h" |
| #include "quiche/common/platform/api/quiche_export.h" |
| #include "quiche/common/platform/api/quiche_iovec.h" |
| #include "quiche/common/platform/api/quiche_mem_slice.h" |
| #include "quiche/common/quiche_buffer_allocator.h" |
| |
| namespace quiche { |
| |
| // QuicheMemSliceStorage is a container class that store QuicheMemSlices for |
| // further use cases such as turning into QuicheMemSliceSpan. |
| class QUICHE_EXPORT_PRIVATE QuicheMemSliceStorage { |
| public: |
| QuicheMemSliceStorage(const struct iovec* iov, int iov_count, |
| QuicheBufferAllocator* allocator, |
| const quic::QuicByteCount max_slice_len); |
| |
| QuicheMemSliceStorage(const QuicheMemSliceStorage& other) = delete; |
| QuicheMemSliceStorage& operator=(const QuicheMemSliceStorage& other) = delete; |
| QuicheMemSliceStorage(QuicheMemSliceStorage&& other) = default; |
| QuicheMemSliceStorage& operator=(QuicheMemSliceStorage&& other) = default; |
| |
| ~QuicheMemSliceStorage() = default; |
| |
| // Return a QuicheMemSliceSpan form of the storage. |
| absl::Span<QuicheMemSlice> ToSpan() { return absl::MakeSpan(storage_); } |
| |
| private: |
| std::vector<QuicheMemSlice> storage_; |
| }; |
| |
| } // namespace quiche |
| |
| #endif // QUICHE_COMMON_QUICHE_MEM_SLICE_STORAGE_H_ |