diff options
author | Karl Wiberg <kwiberg@webrtc.org> | 2015-04-30 16:00:56 +0200 |
---|---|---|
committer | Karl Wiberg <kwiberg@webrtc.org> | 2015-04-30 14:01:01 +0000 |
commit | cbf0927473c10a0a25bbf55707f1ca2b2fd57708 (patch) | |
tree | 424421b10dbff12cc83390e928f37af31395d8bc /webrtc/base/buffer.h | |
parent | 9e1a6d7c236c9a8a322bef54d4ec2a087e5baa07 (diff) | |
download | webrtc-cbf0927473c10a0a25bbf55707f1ca2b2fd57708.tar.gz |
Revert "rtc::Buffer: Remove backwards compatibility band-aids"
This reverts commit 9e1a6d7c236c9a8a322bef54d4ec2a087e5baa07, because
Chromium for Android still isn't happy with it.
TBR=tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/49869004
Cr-Commit-Position: refs/heads/master@{#9122}
Diffstat (limited to 'webrtc/base/buffer.h')
-rw-r--r-- | webrtc/base/buffer.h | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/webrtc/base/buffer.h b/webrtc/base/buffer.h index 8071701d5a..8959b40d88 100644 --- a/webrtc/base/buffer.h +++ b/webrtc/base/buffer.h @@ -40,6 +40,20 @@ struct ByteType { using t = decltype(F(static_cast<T*>(nullptr))); }; +// Deprecated: Accept void* in addition to the byte-sized types. +// TODO(kwiberg): Remove once Chromium doesn't need this anymore. +template <typename T> +struct ByteTypeOrVoid { + private: + static int F(uint8_t*); + static int F(int8_t*); + static int F(char*); + static int F(void*); + + public: + using t = decltype(F(static_cast<T*>(nullptr))); +}; + } // namespace internal // Basic buffer class, can be grown and shrunk dynamically. @@ -56,10 +70,10 @@ class Buffer final { // 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 internal::ByteType<T>::t = 0> + template <typename T, typename internal::ByteTypeOrVoid<T>::t = 0> Buffer(const T* data, size_t size) : Buffer(data, size, size) {} - template <typename T, typename internal::ByteType<T>::t = 0> + template <typename T, typename internal::ByteTypeOrVoid<T>::t = 0> Buffer(const T* data, size_t size, size_t capacity) : Buffer(size, capacity) { std::memcpy(data_.get(), data, size); @@ -72,14 +86,15 @@ class Buffer final { ~Buffer(); - // 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 internal::ByteType<T>::t = 0> + // Get a pointer to the data. Just .data() will give you a (const) char*, + // but you may also use .data<int8_t>() and .data<uint8_t>(). + // TODO(kwiberg): Change default to uint8_t + template <typename T = char, typename internal::ByteType<T>::t = 0> const T* data() const { assert(IsConsistent()); return reinterpret_cast<T*>(data_.get()); } - template <typename T = uint8_t, typename internal::ByteType<T>::t = 0> + template <typename T = char, typename internal::ByteType<T>::t = 0> T* data() { assert(IsConsistent()); return reinterpret_cast<T*>(data_.get()); @@ -118,7 +133,7 @@ class Buffer final { // Replace the contents of the buffer. Accepts the same types as the // constructors. - template <typename T, typename internal::ByteType<T>::t = 0> + template <typename T, typename internal::ByteTypeOrVoid<T>::t = 0> void SetData(const T* data, size_t size) { assert(IsConsistent()); size_ = 0; @@ -131,7 +146,7 @@ class Buffer final { void SetData(const Buffer& buf) { SetData(buf.data(), buf.size()); } // Append data to the buffer. Accepts the same types as the constructors. - template <typename T, typename internal::ByteType<T>::t = 0> + template <typename T, typename internal::ByteTypeOrVoid<T>::t = 0> void AppendData(const T* data, size_t size) { assert(IsConsistent()); const size_t new_size = size_ + size; |