/*
 *  Copyright 2018 The WebRTC Project Authors. All rights reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef RTC_BASE_MESSAGE_BUFFER_READER_H_
#define RTC_BASE_MESSAGE_BUFFER_READER_H_

#include "rtc_base/bytebuffer.h"

namespace webrtc {

// A simple subclass of the ByteBufferReader that exposes the starting address
// of the message and its length, so that we can recall previously parsed data.
class MessageBufferReader : public rtc::ByteBufferReader {
 public:
  MessageBufferReader(const char* bytes, size_t len)
      : rtc::ByteBufferReader(bytes, len) {}
  ~MessageBufferReader() = default;

  // Starting address of the message.
  const char* MessageData() const { return bytes_; }
  // Total length of the message. Note that this is different from Length(),
  // which is the length of the remaining message from the current offset.
  size_t MessageLength() const { return size_; }
  // Current offset in the message.
  size_t CurrentOffset() const { return start_; }
};

}  // namespace webrtc

#endif  // RTC_BASE_MESSAGE_BUFFER_READER_H_
