Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Unified Diff: webrtc/base/bytebuffer.cc

Issue 1821083002: Split ByteBuffer into writer/reader objects. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/bytebuffer.h ('k') | webrtc/base/bytebuffer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/bytebuffer.cc
diff --git a/webrtc/base/bytebuffer.cc b/webrtc/base/bytebuffer.cc
index 8bc1f23670e7917736ee1e79fa304b57ca1187ff..cf4ce42574e959e8df76c23b6b6b37e45b1b94fc 100644
--- a/webrtc/base/bytebuffer.cc
+++ b/webrtc/base/bytebuffer.cc
@@ -22,36 +22,30 @@ namespace rtc {
static const int DEFAULT_SIZE = 4096;
-ByteBuffer::ByteBuffer() {
- Construct(NULL, DEFAULT_SIZE, ORDER_NETWORK);
+ByteBufferWriter::ByteBufferWriter()
+ : ByteBuffer(ORDER_NETWORK) {
+ Construct(NULL, DEFAULT_SIZE);
}
-ByteBuffer::ByteBuffer(ByteOrder byte_order) {
- Construct(NULL, DEFAULT_SIZE, byte_order);
+ByteBufferWriter::ByteBufferWriter(ByteOrder byte_order)
+ : ByteBuffer(byte_order) {
+ Construct(NULL, DEFAULT_SIZE);
}
-ByteBuffer::ByteBuffer(const char* bytes, size_t len) {
- Construct(bytes, len, ORDER_NETWORK);
+ByteBufferWriter::ByteBufferWriter(const char* bytes, size_t len)
+ : ByteBuffer(ORDER_NETWORK) {
+ Construct(bytes, len);
}
-ByteBuffer::ByteBuffer(const char* bytes, size_t len, ByteOrder byte_order) {
- Construct(bytes, len, byte_order);
+ByteBufferWriter::ByteBufferWriter(const char* bytes, size_t len,
+ ByteOrder byte_order)
+ : ByteBuffer(byte_order) {
+ Construct(bytes, len);
}
-ByteBuffer::ByteBuffer(const char* bytes) {
- Construct(bytes, strlen(bytes), ORDER_NETWORK);
-}
-
-ByteBuffer::ByteBuffer(const Buffer& buf) {
- Construct(buf.data<char>(), buf.size(), ORDER_NETWORK);
-}
-
-void ByteBuffer::Construct(const char* bytes, size_t len,
- ByteOrder byte_order) {
- version_ = 0;
+void ByteBufferWriter::Construct(const char* bytes, size_t len) {
start_ = 0;
size_ = len;
- byte_order_ = byte_order;
bytes_ = new char[size_];
if (bytes) {
@@ -62,70 +56,171 @@ void ByteBuffer::Construct(const char* bytes, size_t len,
}
}
-ByteBuffer::~ByteBuffer() {
+ByteBufferWriter::~ByteBufferWriter() {
delete[] bytes_;
}
-bool ByteBuffer::ReadUInt8(uint8_t* val) {
+void ByteBufferWriter::WriteUInt8(uint8_t val) {
+ WriteBytes(reinterpret_cast<const char*>(&val), 1);
+}
+
+void ByteBufferWriter::WriteUInt16(uint16_t val) {
+ uint16_t v = (Order() == ORDER_NETWORK) ? HostToNetwork16(val) : val;
+ WriteBytes(reinterpret_cast<const char*>(&v), 2);
+}
+
+void ByteBufferWriter::WriteUInt24(uint32_t val) {
+ uint32_t v = (Order() == ORDER_NETWORK) ? HostToNetwork32(val) : val;
+ char* start = reinterpret_cast<char*>(&v);
+ if (Order() == ORDER_NETWORK || IsHostBigEndian()) {
+ ++start;
+ }
+ WriteBytes(start, 3);
+}
+
+void ByteBufferWriter::WriteUInt32(uint32_t val) {
+ uint32_t v = (Order() == ORDER_NETWORK) ? HostToNetwork32(val) : val;
+ WriteBytes(reinterpret_cast<const char*>(&v), 4);
+}
+
+void ByteBufferWriter::WriteUInt64(uint64_t val) {
+ uint64_t v = (Order() == ORDER_NETWORK) ? HostToNetwork64(val) : val;
+ WriteBytes(reinterpret_cast<const char*>(&v), 8);
+}
+
+void ByteBufferWriter::WriteString(const std::string& val) {
+ WriteBytes(val.c_str(), val.size());
+}
+
+void ByteBufferWriter::WriteBytes(const char* val, size_t len) {
+ memcpy(ReserveWriteBuffer(len), val, len);
+}
+
+char* ByteBufferWriter::ReserveWriteBuffer(size_t len) {
+ if (Length() + len > Capacity())
+ Resize(Length() + len);
+
+ char* start = bytes_ + end_;
+ end_ += len;
+ return start;
+}
+
+void ByteBufferWriter::Resize(size_t size) {
+ size_t len = std::min(end_ - start_, size);
+ if (size <= size_) {
+ // Don't reallocate, just move data backwards
+ memmove(bytes_, bytes_ + start_, len);
+ } else {
+ // Reallocate a larger buffer.
+ size_ = std::max(size, 3 * size_ / 2);
+ char* new_bytes = new char[size_];
+ memcpy(new_bytes, bytes_ + start_, len);
+ delete [] bytes_;
+ bytes_ = new_bytes;
+ }
+ start_ = 0;
+ end_ = len;
+}
+
+void ByteBufferWriter::Clear() {
+ memset(bytes_, 0, size_);
+ start_ = end_ = 0;
+}
+
+
+ByteBufferReader::ByteBufferReader(const char* bytes, size_t len)
+ : ByteBuffer(ORDER_NETWORK) {
+ Construct(bytes, len);
+}
+
+ByteBufferReader::ByteBufferReader(const char* bytes, size_t len,
+ ByteOrder byte_order)
+ : ByteBuffer(byte_order) {
+ Construct(bytes, len);
+}
+
+ByteBufferReader::ByteBufferReader(const char* bytes)
+ : ByteBuffer(ORDER_NETWORK) {
+ Construct(bytes, strlen(bytes));
+}
+
+ByteBufferReader::ByteBufferReader(const Buffer& buf)
+ : ByteBuffer(ORDER_NETWORK) {
+ Construct(buf.data<char>(), buf.size());
+}
+
+ByteBufferReader::ByteBufferReader(const ByteBufferWriter& buf)
+ : ByteBuffer(buf.Order()) {
+ Construct(buf.Data(), buf.Length());
+}
+
+void ByteBufferReader::Construct(const char* bytes, size_t len) {
+ bytes_ = bytes;
+ size_ = len;
+ start_ = 0;
+ end_ = len;
+}
+
+bool ByteBufferReader::ReadUInt8(uint8_t* val) {
if (!val) return false;
return ReadBytes(reinterpret_cast<char*>(val), 1);
}
-bool ByteBuffer::ReadUInt16(uint16_t* val) {
+bool ByteBufferReader::ReadUInt16(uint16_t* val) {
if (!val) return false;
uint16_t v;
if (!ReadBytes(reinterpret_cast<char*>(&v), 2)) {
return false;
} else {
- *val = (byte_order_ == ORDER_NETWORK) ? NetworkToHost16(v) : v;
+ *val = (Order() == ORDER_NETWORK) ? NetworkToHost16(v) : v;
return true;
}
}
-bool ByteBuffer::ReadUInt24(uint32_t* val) {
+bool ByteBufferReader::ReadUInt24(uint32_t* val) {
if (!val) return false;
uint32_t v = 0;
char* read_into = reinterpret_cast<char*>(&v);
- if (byte_order_ == ORDER_NETWORK || IsHostBigEndian()) {
+ if (Order() == ORDER_NETWORK || IsHostBigEndian()) {
++read_into;
}
if (!ReadBytes(read_into, 3)) {
return false;
} else {
- *val = (byte_order_ == ORDER_NETWORK) ? NetworkToHost32(v) : v;
+ *val = (Order() == ORDER_NETWORK) ? NetworkToHost32(v) : v;
return true;
}
}
-bool ByteBuffer::ReadUInt32(uint32_t* val) {
+bool ByteBufferReader::ReadUInt32(uint32_t* val) {
if (!val) return false;
uint32_t v;
if (!ReadBytes(reinterpret_cast<char*>(&v), 4)) {
return false;
} else {
- *val = (byte_order_ == ORDER_NETWORK) ? NetworkToHost32(v) : v;
+ *val = (Order() == ORDER_NETWORK) ? NetworkToHost32(v) : v;
return true;
}
}
-bool ByteBuffer::ReadUInt64(uint64_t* val) {
+bool ByteBufferReader::ReadUInt64(uint64_t* val) {
if (!val) return false;
uint64_t v;
if (!ReadBytes(reinterpret_cast<char*>(&v), 8)) {
return false;
} else {
- *val = (byte_order_ == ORDER_NETWORK) ? NetworkToHost64(v) : v;
+ *val = (Order() == ORDER_NETWORK) ? NetworkToHost64(v) : v;
return true;
}
}
-bool ByteBuffer::ReadString(std::string* val, size_t len) {
+bool ByteBufferReader::ReadString(std::string* val, size_t len) {
if (!val) return false;
if (len > Length()) {
@@ -137,7 +232,7 @@ bool ByteBuffer::ReadString(std::string* val, size_t len) {
}
}
-bool ByteBuffer::ReadBytes(char* val, size_t len) {
+bool ByteBufferReader::ReadBytes(char* val, size_t len) {
if (len > Length()) {
return false;
} else {
@@ -147,92 +242,11 @@ bool ByteBuffer::ReadBytes(char* val, size_t len) {
}
}
-void ByteBuffer::WriteUInt8(uint8_t val) {
- WriteBytes(reinterpret_cast<const char*>(&val), 1);
-}
-
-void ByteBuffer::WriteUInt16(uint16_t val) {
- uint16_t v = (byte_order_ == ORDER_NETWORK) ? HostToNetwork16(val) : val;
- WriteBytes(reinterpret_cast<const char*>(&v), 2);
-}
-
-void ByteBuffer::WriteUInt24(uint32_t val) {
- uint32_t v = (byte_order_ == ORDER_NETWORK) ? HostToNetwork32(val) : val;
- char* start = reinterpret_cast<char*>(&v);
- if (byte_order_ == ORDER_NETWORK || IsHostBigEndian()) {
- ++start;
- }
- WriteBytes(start, 3);
-}
-
-void ByteBuffer::WriteUInt32(uint32_t val) {
- uint32_t v = (byte_order_ == ORDER_NETWORK) ? HostToNetwork32(val) : val;
- WriteBytes(reinterpret_cast<const char*>(&v), 4);
-}
-
-void ByteBuffer::WriteUInt64(uint64_t val) {
- uint64_t v = (byte_order_ == ORDER_NETWORK) ? HostToNetwork64(val) : val;
- WriteBytes(reinterpret_cast<const char*>(&v), 8);
-}
-
-void ByteBuffer::WriteString(const std::string& val) {
- WriteBytes(val.c_str(), val.size());
-}
-
-void ByteBuffer::WriteBytes(const char* val, size_t len) {
- memcpy(ReserveWriteBuffer(len), val, len);
-}
-
-char* ByteBuffer::ReserveWriteBuffer(size_t len) {
- if (Length() + len > Capacity())
- Resize(Length() + len);
-
- char* start = bytes_ + end_;
- end_ += len;
- return start;
-}
-
-void ByteBuffer::Resize(size_t size) {
- size_t len = std::min(end_ - start_, size);
- if (size <= size_) {
- // Don't reallocate, just move data backwards
- memmove(bytes_, bytes_ + start_, len);
- } else {
- // Reallocate a larger buffer.
- size_ = std::max(size, 3 * size_ / 2);
- char* new_bytes = new char[size_];
- memcpy(new_bytes, bytes_ + start_, len);
- delete [] bytes_;
- bytes_ = new_bytes;
- }
- start_ = 0;
- end_ = len;
- ++version_;
-}
-
-bool ByteBuffer::Consume(size_t size) {
+bool ByteBufferReader::Consume(size_t size) {
if (size > Length())
return false;
start_ += size;
return true;
}
-ByteBuffer::ReadPosition ByteBuffer::GetReadPosition() const {
- return ReadPosition(start_, version_);
-}
-
-bool ByteBuffer::SetReadPosition(const ReadPosition &position) {
- if (position.version_ != version_) {
- return false;
- }
- start_ = position.start_;
- return true;
-}
-
-void ByteBuffer::Clear() {
- memset(bytes_, 0, size_);
- start_ = end_ = 0;
- ++version_;
-}
-
} // namespace rtc
« no previous file with comments | « webrtc/base/bytebuffer.h ('k') | webrtc/base/bytebuffer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698