1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/spdy/spdy_pinnable_buffer_piece.h"
6
7namespace net {
8
9SpdyPinnableBufferPiece::SpdyPinnableBufferPiece()
10    : buffer_(0), length_(0) {}
11
12SpdyPinnableBufferPiece::~SpdyPinnableBufferPiece() {}
13
14void SpdyPinnableBufferPiece::Pin() {
15  if (!storage_ && buffer_ != NULL && length_ != 0) {
16    storage_.reset(new char[length_]);
17    std::copy(buffer_, buffer_ + length_, storage_.get());
18    buffer_ = storage_.get();
19  }
20}
21
22void SpdyPinnableBufferPiece::Swap(SpdyPinnableBufferPiece* other) {
23  size_t length = length_;
24  length_ = other->length_;
25  other->length_ = length;
26
27  const char* buffer = buffer_;
28  buffer_ = other->buffer_;
29  other->buffer_ = buffer;
30
31  storage_.swap(other->storage_);
32}
33
34}  // namespace net
35