#pragma once #include namespace spider { /** * A memory container. * As a reminder, the amount of RAM * is designed by the host. */ class RAM { private: u8* _mem; u64 _size; u8 _oob; // Out of bounds reference public: RAM(u64 length); RAM(const RAM& other); RAM(RAM&& other) noexcept; ~RAM(); public: RAM& operator=(const RAM& other); RAM& operator=(RAM&& other) noexcept; public: // Unsafe access u8& operator[](u64 i); u8 operator[](u64 i) const; public: // managed access (oob = 0) u8& at(u64 i); u8 at(u64 i) const; public: void resize(u64 new_size); u64 size() const; public: u8* begin(); u8* end(); const u8* begin() const; const u8* end() const; }; }