text: // 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.
  
  #include "net/spdy/spdy_pinnable_buffer_piece.h"
  
  namespace net {
  
  SpdyPinnableBufferPiece::SpdyPinnableBufferPiece()
      : buffer_(0), length_(0) {}
  
  SpdyPinnableBufferPiece::~SpdyPinnableBufferPiece() {}
  
  void SpdyPinnableBufferPiece::Pin() {
    if (!storage_ && buffer_ != NULL && length_ != 0) {
      storage_.reset(new char[length_]);
      std::copy(buffer_, buffer_ + length_, storage_.get());
      buffer_ = storage_.get();
    }
  }
  
  void SpdyPinnableBufferPiece::Swap(SpdyPinnableBufferPiece* other) {
    size_t length = length_;
    length_ = other->length_;
    other->length_ = length;
  
    const char* buffer = buffer_;
    buffer_ = other->buffer_;
    other->buffer_ = buffer;
  
    storage_.swap(other->storage_);
  }
  
  }  // namespace net
  