2020-08-22 23:30:17 -04:00
|
|
|
#ifndef JAK_V2_BINARYREADER_H
|
|
|
|
#define JAK_V2_BINARYREADER_H
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
#include <cassert>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
class BinaryReader {
|
2020-08-26 01:21:33 -04:00
|
|
|
public:
|
|
|
|
BinaryReader(uint8_t* _buffer, uint32_t _size) : buffer(_buffer), size(_size) {}
|
2020-08-22 23:30:17 -04:00
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
explicit BinaryReader(std::vector<uint8_t>& _buffer)
|
|
|
|
: buffer((uint8_t*)_buffer.data()), size(_buffer.size()) {}
|
2020-08-22 23:30:17 -04:00
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
template <typename T>
|
2020-08-22 23:30:17 -04:00
|
|
|
T read() {
|
|
|
|
assert(seek + sizeof(T) <= size);
|
|
|
|
T& obj = *(T*)(buffer + seek);
|
|
|
|
seek += sizeof(T);
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ffwd(int amount) {
|
|
|
|
seek += amount;
|
|
|
|
assert(seek <= size);
|
|
|
|
}
|
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
uint32_t bytes_left() const { return size - seek; }
|
2020-08-22 23:30:17 -04:00
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
uint8_t* here() { return buffer + seek; }
|
2020-08-22 23:30:17 -04:00
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
uint32_t get_seek() { return seek; }
|
2020-08-22 23:30:17 -04:00
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
private:
|
2020-08-22 23:30:17 -04:00
|
|
|
uint8_t* buffer;
|
|
|
|
uint32_t size;
|
|
|
|
uint32_t seek = 0;
|
|
|
|
};
|
|
|
|
|
2020-08-26 01:21:33 -04:00
|
|
|
#endif // JAK_V2_BINARYREADER_H
|