Index: webrtc/base/bytebuffer.h |
diff --git a/webrtc/base/bytebuffer.h b/webrtc/base/bytebuffer.h |
index ad2e552ed6a8389fffffafa2670fa74b7a709a4e..8fd086367db88d8e6b6fe5e46ff7ded91b7e353a 100644 |
--- a/webrtc/base/bytebuffer.h |
+++ b/webrtc/base/bytebuffer.h |
@@ -21,42 +21,34 @@ namespace rtc { |
class ByteBuffer { |
public: |
- |
enum ByteOrder { |
ORDER_NETWORK = 0, // Default, use network byte order (big endian). |
ORDER_HOST, // Use the native order of the host. |
}; |
- // |byte_order| defines order of bytes in the buffer. |
- ByteBuffer(); |
- explicit ByteBuffer(ByteOrder byte_order); |
- ByteBuffer(const char* bytes, size_t len); |
- ByteBuffer(const char* bytes, size_t len, ByteOrder byte_order); |
+ explicit ByteBuffer(ByteOrder byte_order) : byte_order_(byte_order) {} |
- // Initializes buffer from a zero-terminated string. |
- explicit ByteBuffer(const char* bytes); |
+ ByteOrder Order() const { return byte_order_; } |
- explicit ByteBuffer(const Buffer& buf); |
+ private: |
+ ByteOrder byte_order_; |
- ~ByteBuffer(); |
+ RTC_DISALLOW_COPY_AND_ASSIGN(ByteBuffer); |
+}; |
+ |
+class ByteBufferWriter : public ByteBuffer { |
+ public: |
+ // |byte_order| defines order of bytes in the buffer. |
+ ByteBufferWriter(); |
+ explicit ByteBufferWriter(ByteOrder byte_order); |
+ ByteBufferWriter(const char* bytes, size_t len); |
+ ByteBufferWriter(const char* bytes, size_t len, ByteOrder byte_order); |
+ |
+ ~ByteBufferWriter(); |
const char* Data() const { return bytes_ + start_; } |
size_t Length() const { return end_ - start_; } |
size_t Capacity() const { return size_ - start_; } |
- ByteOrder Order() const { return byte_order_; } |
- |
- // Read a next value from the buffer. Return false if there isn't |
- // enough data left for the specified type. |
- bool ReadUInt8(uint8_t* val); |
- bool ReadUInt16(uint16_t* val); |
- bool ReadUInt24(uint32_t* val); |
- bool ReadUInt32(uint32_t* val); |
- bool ReadUInt64(uint64_t* val); |
- bool ReadBytes(char* val, size_t len); |
- |
- // Appends next |len| bytes from the buffer to |val|. Returns false |
- // if there is less than |len| bytes left. |
- bool ReadString(std::string* val, size_t len); |
// Write value to the buffer. Resizes the buffer when it is |
// neccessary. |
@@ -70,51 +62,75 @@ class ByteBuffer { |
// Reserves the given number of bytes and returns a char* that can be written |
// into. Useful for functions that require a char* buffer and not a |
- // ByteBuffer. |
+ // ByteBufferWriter. |
char* ReserveWriteBuffer(size_t len); |
- // Resize the buffer to the specified |size|. This invalidates any remembered |
- // seek positions. |
+ // Resize the buffer to the specified |size|. |
void Resize(size_t size); |
- // Moves current position |size| bytes forward. Returns false if |
- // there is less than |size| bytes left in the buffer. Consume doesn't |
- // permanently remove data, so remembered read positions are still valid |
- // after this call. |
- bool Consume(size_t size); |
- |
// Clears the contents of the buffer. After this, Length() will be 0. |
void Clear(); |
- // Used with GetReadPosition/SetReadPosition. |
- class ReadPosition { |
- friend class ByteBuffer; |
- ReadPosition(size_t start, int version) |
- : start_(start), version_(version) { } |
- size_t start_; |
- int version_; |
- }; |
- |
- // Remembers the current read position for a future SetReadPosition. Any |
- // calls to Shift or Resize in the interim will invalidate the position. |
- ReadPosition GetReadPosition() const; |
- |
- // If the given position is still valid, restores that read position. |
- bool SetReadPosition(const ReadPosition &position); |
- |
private: |
- void Construct(const char* bytes, size_t size, ByteOrder byte_order); |
+ void Construct(const char* bytes, size_t size); |
char* bytes_; |
size_t size_; |
size_t start_; |
size_t end_; |
- int version_; |
- ByteOrder byte_order_; |
// There are sensible ways to define these, but they aren't needed in our code |
// base. |
- RTC_DISALLOW_COPY_AND_ASSIGN(ByteBuffer); |
+ RTC_DISALLOW_COPY_AND_ASSIGN(ByteBufferWriter); |
+}; |
+ |
+// The ByteBufferReader references the passed data, i.e. the pointer must be |
+// valid during the lifetime of the reader. |
+class ByteBufferReader : public ByteBuffer { |
+ public: |
+ ByteBufferReader(const char* bytes, size_t len); |
+ ByteBufferReader(const char* bytes, size_t len, ByteOrder byte_order); |
+ |
+ // Initializes buffer from a zero-terminated string. |
+ explicit ByteBufferReader(const char* bytes); |
+ |
+ explicit ByteBufferReader(const Buffer& buf); |
+ |
+ explicit ByteBufferReader(const ByteBufferWriter& buf); |
+ |
+ // Returns start of unprocessed data. |
+ const char* Data() const { return bytes_ + start_; } |
+ // Returns number of unprocessed bytes. |
+ size_t Length() const { return end_ - start_; } |
+ |
+ // Read a next value from the buffer. Return false if there isn't |
+ // enough data left for the specified type. |
+ bool ReadUInt8(uint8_t* val); |
+ bool ReadUInt16(uint16_t* val); |
+ bool ReadUInt24(uint32_t* val); |
+ bool ReadUInt32(uint32_t* val); |
+ bool ReadUInt64(uint64_t* val); |
+ bool ReadBytes(char* val, size_t len); |
+ |
+ // Appends next |len| bytes from the buffer to |val|. Returns false |
+ // if there is less than |len| bytes left. |
+ bool ReadString(std::string* val, size_t len); |
+ |
+ // Moves current position |size| bytes forward. Returns false if |
+ // there is less than |size| bytes left in the buffer. Consume doesn't |
+ // permanently remove data, so remembered read positions are still valid |
+ // after this call. |
+ bool Consume(size_t size); |
+ |
+ private: |
+ void Construct(const char* bytes, size_t size); |
+ |
+ const char* bytes_; |
+ size_t size_; |
+ size_t start_; |
+ size_t end_; |
+ |
+ RTC_DISALLOW_COPY_AND_ASSIGN(ByteBufferReader); |
}; |
} // namespace rtc |