1 /*
2  *  Copyright 2015 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "webrtc/base/buffer.h"
12 
13 #include <cassert>
14 #include <utility>
15 
16 namespace rtc {
17 
Buffer()18 Buffer::Buffer() : size_(0), capacity_(0), data_(nullptr) {
19   assert(IsConsistent());
20 }
21 
Buffer(const Buffer & buf)22 Buffer::Buffer(const Buffer& buf) : Buffer(buf.data(), buf.size()) {
23 }
24 
Buffer(Buffer && buf)25 Buffer::Buffer(Buffer&& buf)
26     : size_(buf.size()),
27       capacity_(buf.capacity()),
28       data_(std::move(buf.data_)) {
29   assert(IsConsistent());
30   buf.OnMovedFrom();
31 }
32 
Buffer(size_t size)33 Buffer::Buffer(size_t size) : Buffer(size, size) {
34 }
35 
Buffer(size_t size,size_t capacity)36 Buffer::Buffer(size_t size, size_t capacity)
37     : size_(size),
38       capacity_(std::max(size, capacity)),
39       data_(new uint8_t[capacity_]) {
40   assert(IsConsistent());
41 }
42 
43 // Note: The destructor works even if the buffer has been moved from.
44 Buffer::~Buffer() = default;
45 
46 };  // namespace rtc
47