#ifndef PKMNLIB_FILEBYTECODESTREAM_HPP #define PKMNLIB_FILEBYTECODESTREAM_HPP #include #include #include "IPkmnBinaryStream.hpp" class FileByteCodeStream : public IPkmnBinaryStream { private: FILE* non_null _file; size_t _readPosition = 0; public: explicit FileByteCodeStream(FILE* non_null file, size_t bound) : IPkmnBinaryStream(bound), _file(file) {} int Write(const void* non_null ptr, asUINT size) override { if (size == 0) return 0; return fwrite(ptr, size, 1, _file); } int Read(void* non_null ptr, asUINT size) override { if (size == 0) return 0; if (_readPosition + size >= _angelScriptBound) { size = _angelScriptBound - _readPosition; } auto diff = fread(ptr, size, 1, _file); _readPosition += diff; return diff; } }; #endif // PKMNLIB_FILEBYTECODESTREAM_HPP