| 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 | 
|  |