#include "Memory.h" #include #include #include #include "Assembly.h" Memory::Memory() noexcept : content {} {} void Memory::apply(AssemblyContext ctx) { ctx.bind("/read", [&](std::size_t len, std::size_t off) -> std::vector { return read(len, off); }); ctx.bind("/write", [&](const std::vector data, std::size_t off) -> bool { return write(data, off); }); } auto Memory::read(std::size_t len, std::size_t off) const -> std::vector { if (content.size() < off) return {}; auto real_len = std::min(len, content.size() - off); auto data = content.data() + off; return {data, data + real_len}; } bool Memory::write(const std::vector data, std::size_t off) { if (content.size() < off || data.empty()) return false; std::size_t in_data = 0; std::size_t in_content = off; for (; in_data < data.size() && in_content < content.size(); ++in_data, ++in_content) content[in_content] = data[in_data]; return true; }