#pragma once #include #include #include #include #include #include namespace Execute { enum class ArgumentType { Immediate, Register, Memory }; class ArgumentValue { private: ArgumentType type; ArgumentType memoryValueType; std::variant data; int & GetRegister(State & state) const; std::uint8_t * GetMemory(State & state) const; public: void Write(int const value, State & state) const; int Read(State & state) const; // Returns the size of the argument in bytes std::size_t Parse( std::vector const & memory, std::size_t const pos); }; }