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