| // 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 "quic/core/quic_types.h" | 
 | #include "quic/platform/api/quic_iovec.h" | 
 | #include "common/platform/api/quiche_export.h" | 
 | #include "common/platform/api/quiche_mem_slice.h" | 
 | #include "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) = default; | 
 |   QuicheMemSliceStorage& operator=(const QuicheMemSliceStorage& other) = | 
 |       default; | 
 |   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_ |