/* ZBinaryBufferReader.hpp Author: Chris Ertel , Patrick Baggett Created: 3/6/2013 Purpose: Reads a binary stream from memory. License: TODO */ #pragma once #ifndef _ZBINARYBUFFERREADER_HPP #define _ZBINARYBUFFERREADER_HPP #include #include #include class ZBinaryBufferReader : public ZBinaryReader { private: const char* Data; size_t Size; size_t Offset; //This is typed to char* so pointer arithmetic can occur const char* GetPosition() const { return &Data[Offset]; } public: ZBinaryBufferReader(const void* _data, size_t _size, SST_ByteOrder bo) : ZBinaryReader(bo), Data( (const char*) _data), Size(_size), Offset(0) { } //Subclass implementation uint8_t ReadU8(); //Subclass implementation uint16_t ReadU16(); //Subclass implementation uint32_t ReadU32(); //Subclass implementation uint64_t ReadU64(); //Subclass implementation void ReadU8Array(uint8_t* ptr, size_t count); //Subclass implementation void ReadU16Array(uint16_t* ptr, size_t count); //Subclass implementation void ReadU32Array(uint32_t* ptr, size_t count); //Subclass implementation void ReadU64Array(uint64_t* ptr, size_t count); //Subclass implementation size_t GetLength() const { return Size; } //Subclass implementation size_t GetOffset() const { return Offset; } //Subclass implementation void SeekTo(size_t offset) { Offset = offset; } //New to ZBinaryBufferReader. Returns the current address that would be read by the next ReadXxx() call. //Since 'const void*' is the constructor type, this returns 'const void*' as well. See [private] GetPosition(). const void* GetBufferReadAddress() const { return (const void*)GetPosition(); } //New to ZBinaryBufferReader. Returns the original buffer address const void* GetBufferBaseAddress() const { return (const void*)Data; } //New to ZBinaryBufferReader. Reads a pointer void* ReadPointer(); }; #endif