|  | // 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_SPDY_PLATFORM_API_SPDY_MEM_SLICE_H_ | 
|  | #define QUICHE_SPDY_PLATFORM_API_SPDY_MEM_SLICE_H_ | 
|  |  | 
|  | #include <utility> | 
|  |  | 
|  | #include "net/third_party/quiche/src/spdy/platform/api/spdy_export.h" | 
|  | #include "net/spdy/platform/impl/spdy_mem_slice_impl.h" | 
|  |  | 
|  | namespace spdy { | 
|  |  | 
|  | // SpdyMemSlice is an internally reference counted data buffer used as the | 
|  | // source buffers for write operations. SpdyMemSlice implicitly maintains a | 
|  | // reference count and will free the underlying data buffer when the reference | 
|  | // count reaches zero. | 
|  | class SPDY_EXPORT_PRIVATE SpdyMemSlice { | 
|  | public: | 
|  | // Constructs an empty SpdyMemSlice with no underlying data and 0 reference | 
|  | // count. | 
|  | SpdyMemSlice() = default; | 
|  |  | 
|  | // Constructs a SpdyMemSlice with reference count 1 to a newly allocated data | 
|  | // buffer of |length| bytes. | 
|  | explicit SpdyMemSlice(size_t length) : impl_(length) {} | 
|  |  | 
|  | // Constructs a SpdyMemSlice from |impl|. It takes the reference away from | 
|  | // |impl|. | 
|  | explicit SpdyMemSlice(SpdyMemSliceImpl impl) : impl_(std::move(impl)) {} | 
|  |  | 
|  | SpdyMemSlice(const SpdyMemSlice& other) = delete; | 
|  | SpdyMemSlice& operator=(const SpdyMemSlice& other) = delete; | 
|  |  | 
|  | // Move constructors. |other| will not hold a reference to the data buffer | 
|  | // after this call completes. | 
|  | SpdyMemSlice(SpdyMemSlice&& other) = default; | 
|  | SpdyMemSlice& operator=(SpdyMemSlice&& other) = default; | 
|  |  | 
|  | ~SpdyMemSlice() = default; | 
|  |  | 
|  | // Returns a char pointer to underlying data buffer. | 
|  | const char* data() const { return impl_.data(); } | 
|  | // Returns the length of underlying data buffer. | 
|  | size_t length() const { return impl_.length(); } | 
|  |  | 
|  | private: | 
|  | SpdyMemSliceImpl impl_; | 
|  | }; | 
|  |  | 
|  | }  // namespace spdy | 
|  |  | 
|  | #endif  // QUICHE_SPDY_PLATFORM_API_SPDY_MEM_SLICE_H_ |