#include "stdafx.h" #include "state_t.h" #include state_t::state_t() {} #ifdef USE_BOOST_JSON state_t::state_t(const boost::json::object& serialised) { initialise(serialised); assert(initialised()); } state_t::state_t(const boost::json::value& serialised) { assert(serialised.is_object()); initialise(serialised.get_object()); assert(initialised()); } void state_t::initialise(const boost::json::object& serialised) { assert(!initialised()); m_pc = get_uint16(serialised, "pc"); m_s = get_uint8(serialised, "s"); m_a = get_uint8(serialised, "a"); m_x = get_uint8(serialised, "x"); m_y = get_uint8(serialised, "y"); m_p = get_uint8(serialised, "p"); const auto& ram_entries = get_array(serialised, "ram"); for (const auto& ram_entry : ram_entries) { assert(ram_entry.is_array()); const auto& ram_entry_array = ram_entry.as_array(); assert(ram_entry_array.size() == 2); const auto address = get_uint16(ram_entry_array[0]); const auto value = get_uint8(ram_entry_array[1]); m_ram[address] = value; } m_initialised = true; } #endif #ifdef USE_NLOHMANN_JSON state_t::state_t(const nlohmann::json& serialised) { assert(serialised.is_object()); initialise(serialised); assert(initialised()); } void state_t::initialise(const nlohmann::json& serialised) { assert(!initialised()); m_pc = serialised["pc"].get(); m_s = serialised["s"].get(); m_a = serialised["a"].get(); m_x = serialised["x"].get(); m_y = serialised["y"].get(); m_p = serialised["p"].get(); const auto& ram_entries = serialised["ram"]; assert(ram_entries.is_array()); for (const auto& ram_entry : ram_entries) { assert(ram_entry.is_array()); assert(ram_entry.size() == 2); const auto address = ram_entry[0].get(); const auto value = ram_entry[1].get(); m_ram[address] = value; } m_initialised = true; } #endif