summaryrefslogtreecommitdiffstats
path: root/chromium/net/spdy/spdy_pinnable_buffer_piece.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/spdy/spdy_pinnable_buffer_piece.h')
-rw-r--r--chromium/net/spdy/spdy_pinnable_buffer_piece.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/chromium/net/spdy/spdy_pinnable_buffer_piece.h b/chromium/net/spdy/spdy_pinnable_buffer_piece.h
new file mode 100644
index 00000000000..6ffc2639f71
--- /dev/null
+++ b/chromium/net/spdy/spdy_pinnable_buffer_piece.h
@@ -0,0 +1,60 @@
+// Copyright 2014 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 NET_SPDY_SPDY_PINNABLE_BUFFER_PIECE_H_
+#define NET_SPDY_SPDY_PINNABLE_BUFFER_PIECE_H_
+
+#include <memory>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_piece.h"
+#include "net/base/net_export.h"
+
+namespace net {
+
+class SpdyPrefixedBufferReader;
+
+// Helper class of SpdyPrefixedBufferReader.
+// Represents a piece of consumed buffer which may (or may not) own its
+// underlying storage. Users may "pin" the buffer at a later time to ensure
+// a SpdyPinnableBufferPiece owns and retains storage of the buffer.
+struct NET_EXPORT_PRIVATE SpdyPinnableBufferPiece {
+ public:
+ SpdyPinnableBufferPiece();
+ ~SpdyPinnableBufferPiece();
+
+ const char * buffer() const {
+ return buffer_;
+ }
+
+ size_t length() const {
+ return length_;
+ }
+
+ operator base::StringPiece() const {
+ return base::StringPiece(buffer_, length_);
+ }
+
+ // Allocates and copies the buffer to internal storage.
+ void Pin();
+
+ bool IsPinned() const {
+ return storage_.get() != NULL;
+ }
+
+ // Swaps buffers, including internal storage, with |other|.
+ void Swap(SpdyPinnableBufferPiece* other);
+
+ private:
+ friend class SpdyPrefixedBufferReader;
+
+ const char * buffer_;
+ size_t length_;
+ // Null iff |buffer_| isn't pinned.
+ scoped_ptr<char[]> storage_;
+};
+
+} // namespace net
+
+#endif // NET_SPDY_SPDY_PINNABLE_BUFFER_PIECE_H_