• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MEM_SLICE_IMPL_H_
2 #define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MEM_SLICE_IMPL_H_
3 
4 #include "quiche/common/platform/api/quiche_export.h"
5 #include "quiche/common/quiche_buffer_allocator.h"
6 #include "quiche/common/simple_buffer_allocator.h"
7 
8 namespace quiche {
9 
10 class QUICHE_EXPORT QuicheMemSliceImpl {
11  public:
12   QuicheMemSliceImpl() = default;
13 
QuicheMemSliceImpl(QuicheBuffer buffer)14   explicit QuicheMemSliceImpl(QuicheBuffer buffer)
15       : buffer_(std::move(buffer)) {}
16 
QuicheMemSliceImpl(std::unique_ptr<char[]> buffer,size_t length)17   QuicheMemSliceImpl(std::unique_ptr<char[]> buffer, size_t length)
18       : buffer_(
19             QuicheBuffer(QuicheUniqueBufferPtr(
20                              buffer.release(),
21                              QuicheBufferDeleter(SimpleBufferAllocator::Get())),
22                          length)) {}
23 
24   QuicheMemSliceImpl(const QuicheMemSliceImpl& other) = delete;
25   QuicheMemSliceImpl& operator=(const QuicheMemSliceImpl& other) = delete;
26 
27   // Move constructors. |other| will not hold a reference to the data buffer
28   // after this call completes.
29   QuicheMemSliceImpl(QuicheMemSliceImpl&& other) = default;
30   QuicheMemSliceImpl& operator=(QuicheMemSliceImpl&& other) = default;
31 
32   ~QuicheMemSliceImpl() = default;
33 
Reset()34   void Reset() { buffer_ = QuicheBuffer(); }
35 
data()36   const char* data() const { return buffer_.data(); }
length()37   size_t length() const { return buffer_.size(); }
empty()38   bool empty() const { return buffer_.empty(); }
39 
40  private:
41   QuicheBuffer buffer_;
42 };
43 
44 }  // namespace quiche
45 
46 #endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MEM_SLICE_IMPL_H_
47