| Index: webrtc/base/copyonwritebuffer.h
|
| diff --git a/webrtc/base/copyonwritebuffer.h b/webrtc/base/copyonwritebuffer.h
|
| index fe3f5619d131fb428d3f71c78122a284baa1d8e6..6a95b31cedd7394401e68fcd29f037f887363f04 100644
|
| --- a/webrtc/base/copyonwritebuffer.h
|
| +++ b/webrtc/base/copyonwritebuffer.h
|
| @@ -11,231 +11,9 @@
|
| #ifndef WEBRTC_BASE_COPYONWRITEBUFFER_H_
|
| #define WEBRTC_BASE_COPYONWRITEBUFFER_H_
|
|
|
| -#include <algorithm>
|
| -#include <utility>
|
|
|
| -#include "webrtc/base/buffer.h"
|
| -#include "webrtc/base/checks.h"
|
| -#include "webrtc/base/refcount.h"
|
| -#include "webrtc/base/scoped_ref_ptr.h"
|
| -
|
| -namespace rtc {
|
| -
|
| -class CopyOnWriteBuffer {
|
| - public:
|
| - // An empty buffer.
|
| - CopyOnWriteBuffer();
|
| - // Copy size and contents of an existing buffer.
|
| - CopyOnWriteBuffer(const CopyOnWriteBuffer& buf);
|
| - // Move contents from an existing buffer.
|
| - CopyOnWriteBuffer(CopyOnWriteBuffer&& buf);
|
| -
|
| - // Construct a buffer with the specified number of uninitialized bytes.
|
| - explicit CopyOnWriteBuffer(size_t size);
|
| - CopyOnWriteBuffer(size_t size, size_t capacity);
|
| -
|
| - // Construct a buffer and copy the specified number of bytes into it. The
|
| - // source array may be (const) uint8_t*, int8_t*, or char*.
|
| - template <typename T,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - CopyOnWriteBuffer(const T* data, size_t size)
|
| - : CopyOnWriteBuffer(data, size, size) {}
|
| - template <typename T,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - CopyOnWriteBuffer(const T* data, size_t size, size_t capacity)
|
| - : CopyOnWriteBuffer(size, capacity) {
|
| - if (buffer_) {
|
| - std::memcpy(buffer_->data(), data, size);
|
| - }
|
| - }
|
| -
|
| - // Construct a buffer from the contents of an array.
|
| - template <typename T,
|
| - size_t N,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - CopyOnWriteBuffer(const T (&array)[N]) // NOLINT: runtime/explicit
|
| - : CopyOnWriteBuffer(array, N) {}
|
| -
|
| - ~CopyOnWriteBuffer();
|
| -
|
| - // Get a pointer to the data. Just .data() will give you a (const) uint8_t*,
|
| - // but you may also use .data<int8_t>() and .data<char>().
|
| - template <typename T = uint8_t,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - const T* data() const {
|
| - return cdata<T>();
|
| - }
|
| -
|
| - // Get writable pointer to the data. This will create a copy of the underlying
|
| - // data if it is shared with other buffers.
|
| - template <typename T = uint8_t,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - T* data() {
|
| - RTC_DCHECK(IsConsistent());
|
| - if (!buffer_) {
|
| - return nullptr;
|
| - }
|
| - CloneDataIfReferenced(buffer_->capacity());
|
| - return buffer_->data<T>();
|
| - }
|
| -
|
| - // Get const pointer to the data. This will not create a copy of the
|
| - // underlying data if it is shared with other buffers.
|
| - template <typename T = uint8_t,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - const T* cdata() const {
|
| - RTC_DCHECK(IsConsistent());
|
| - if (!buffer_) {
|
| - return nullptr;
|
| - }
|
| - return buffer_->data<T>();
|
| - }
|
| -
|
| - size_t size() const {
|
| - RTC_DCHECK(IsConsistent());
|
| - return buffer_ ? buffer_->size() : 0;
|
| - }
|
| -
|
| - size_t capacity() const {
|
| - RTC_DCHECK(IsConsistent());
|
| - return buffer_ ? buffer_->capacity() : 0;
|
| - }
|
| -
|
| - CopyOnWriteBuffer& operator=(const CopyOnWriteBuffer& buf) {
|
| - RTC_DCHECK(IsConsistent());
|
| - RTC_DCHECK(buf.IsConsistent());
|
| - if (&buf != this) {
|
| - buffer_ = buf.buffer_;
|
| - }
|
| - return *this;
|
| - }
|
| -
|
| - CopyOnWriteBuffer& operator=(CopyOnWriteBuffer&& buf) {
|
| - RTC_DCHECK(IsConsistent());
|
| - RTC_DCHECK(buf.IsConsistent());
|
| - buffer_ = std::move(buf.buffer_);
|
| - return *this;
|
| - }
|
| -
|
| - bool operator==(const CopyOnWriteBuffer& buf) const;
|
| -
|
| - bool operator!=(const CopyOnWriteBuffer& buf) const {
|
| - return !(*this == buf);
|
| - }
|
| -
|
| - uint8_t& operator[](size_t index) {
|
| - RTC_DCHECK_LT(index, size());
|
| - return data()[index];
|
| - }
|
| -
|
| - uint8_t operator[](size_t index) const {
|
| - RTC_DCHECK_LT(index, size());
|
| - return cdata()[index];
|
| - }
|
| -
|
| - // Replace the contents of the buffer. Accepts the same types as the
|
| - // constructors.
|
| - template <typename T,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - void SetData(const T* data, size_t size) {
|
| - RTC_DCHECK(IsConsistent());
|
| - if (!buffer_) {
|
| - buffer_ = size > 0 ? new RefCountedObject<Buffer>(data, size) : nullptr;
|
| - } else if (!buffer_->HasOneRef()) {
|
| - buffer_ = new RefCountedObject<Buffer>(data, size, buffer_->capacity());
|
| - } else {
|
| - buffer_->SetData(data, size);
|
| - }
|
| - RTC_DCHECK(IsConsistent());
|
| - }
|
| -
|
| - template <typename T,
|
| - size_t N,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - void SetData(const T (&array)[N]) {
|
| - SetData(array, N);
|
| - }
|
| -
|
| - void SetData(const CopyOnWriteBuffer& buf) {
|
| - RTC_DCHECK(IsConsistent());
|
| - RTC_DCHECK(buf.IsConsistent());
|
| - if (&buf != this) {
|
| - buffer_ = buf.buffer_;
|
| - }
|
| - }
|
| -
|
| - // Append data to the buffer. Accepts the same types as the constructors.
|
| - template <typename T,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - void AppendData(const T* data, size_t size) {
|
| - RTC_DCHECK(IsConsistent());
|
| - if (!buffer_) {
|
| - buffer_ = new RefCountedObject<Buffer>(data, size);
|
| - RTC_DCHECK(IsConsistent());
|
| - return;
|
| - }
|
| -
|
| - CloneDataIfReferenced(std::max(buffer_->capacity(),
|
| - buffer_->size() + size));
|
| - buffer_->AppendData(data, size);
|
| - RTC_DCHECK(IsConsistent());
|
| - }
|
| -
|
| - template <typename T,
|
| - size_t N,
|
| - typename std::enable_if<
|
| - internal::BufferCompat<uint8_t, T>::value>::type* = nullptr>
|
| - void AppendData(const T (&array)[N]) {
|
| - AppendData(array, N);
|
| - }
|
| -
|
| - void AppendData(const CopyOnWriteBuffer& buf) {
|
| - AppendData(buf.data(), buf.size());
|
| - }
|
| -
|
| - // Sets the size of the buffer. If the new size is smaller than the old, the
|
| - // buffer contents will be kept but truncated; if the new size is greater,
|
| - // the existing contents will be kept and the new space will be
|
| - // uninitialized.
|
| - void SetSize(size_t size);
|
| -
|
| - // Ensure that the buffer size can be increased to at least capacity without
|
| - // further reallocation. (Of course, this operation might need to reallocate
|
| - // the buffer.)
|
| - void EnsureCapacity(size_t capacity);
|
| -
|
| - // Resets the buffer to zero size without altering capacity. Works even if the
|
| - // buffer has been moved from.
|
| - void Clear();
|
| -
|
| - // Swaps two buffers.
|
| - friend void swap(CopyOnWriteBuffer& a, CopyOnWriteBuffer& b) {
|
| - std::swap(a.buffer_, b.buffer_);
|
| - }
|
| -
|
| - private:
|
| - // Create a copy of the underlying data if it is referenced from other Buffer
|
| - // objects.
|
| - void CloneDataIfReferenced(size_t new_capacity);
|
| -
|
| - // Pre- and postcondition of all methods.
|
| - bool IsConsistent() const {
|
| - return (!buffer_ || buffer_->capacity() > 0);
|
| - }
|
| -
|
| - // buffer_ is either null, or points to an rtc::Buffer with capacity > 0.
|
| - scoped_refptr<RefCountedObject<Buffer>> buffer_;
|
| -};
|
| -
|
| -} // namespace rtc
|
| +// This header is deprecated and is just left here temporarily during
|
| +// refactoring. See https://bugs.webrtc.org/7634 for more details.
|
| +#include "webrtc/rtc_base/copyonwritebuffer.h"
|
|
|
| #endif // WEBRTC_BASE_COPYONWRITEBUFFER_H_
|
|
|