
#ifndef _RIVE_CORE_BINARY_READER_HPP_
#define _RIVE_CORE_BINARY_READER_HPP_

#include <string>
#include <vector>
#include "rive/span.hpp"
#include "rive/core/type_conversions.hpp"

namespace rive {
class BinaryReader {
private:
    Span<const uint8_t> m_Bytes;
    const uint8_t* m_Position;
    bool m_Overflowed;
    bool m_IntRangeError;

    void overflow();
    void intRangeError();

public:
    explicit BinaryReader(Span<const uint8_t>);
    bool didOverflow() const;
    bool didIntRangeError() const;
    bool hasError() const { return m_Overflowed || m_IntRangeError; }
    bool reachedEnd() const;

    size_t lengthInBytes() const;
    const uint8_t* position() const;

    std::string readString();
    Span<const uint8_t> readBytes();
    float readFloat32();
    uint8_t readByte();
    uint32_t readUint32();
    uint64_t readVarUint64(); // Reads a LEB128 encoded uint64_t

    // This will cast the uint read to the requested size, but if the
    // raw value was out-of-range, instead returns 0 and sets the IntRangeError.
    template <typename T> T readVarUintAs() {
        auto value = this->readVarUint64();
        if (!fitsIn<T>(value)) {
            value = 0;
            this->intRangeError();
        }
        return static_cast<T>(value);
    }
};
} // namespace rive

#endif
