mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2024-09-29 15:56:19 +00:00
Tidy up the code a little (including removing some no longer needed code).
Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
This commit is contained in:
parent
4892ea95d3
commit
500e65b895
@ -161,7 +161,6 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="json_t.cpp" />
|
|
||||||
<ClCompile Include="opcode_test_suite_t.cpp" />
|
<ClCompile Include="opcode_test_suite_t.cpp" />
|
||||||
<ClCompile Include="simdjson\simdjson.cpp">
|
<ClCompile Include="simdjson\simdjson.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
@ -181,7 +180,6 @@
|
|||||||
<ClCompile Include="test_t.cpp" />
|
<ClCompile Include="test_t.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="json_t.h" />
|
|
||||||
<ClInclude Include="nlohmann\json.hpp" />
|
<ClInclude Include="nlohmann\json.hpp" />
|
||||||
<ClInclude Include="opcode_test_suite_t.h" />
|
<ClInclude Include="opcode_test_suite_t.h" />
|
||||||
<ClInclude Include="simdjson\simdjson.h" />
|
<ClInclude Include="simdjson\simdjson.h" />
|
||||||
|
@ -23,9 +23,6 @@
|
|||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="json_t.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="state_t.cpp">
|
<ClCompile Include="state_t.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -46,9 +43,6 @@
|
|||||||
<ClInclude Include="stdafx.h">
|
<ClInclude Include="stdafx.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="json_t.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="state_t.h">
|
<ClInclude Include="state_t.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -40,7 +40,6 @@ private:
|
|||||||
|
|
||||||
bool check(std::string what, uint16_t address, uint8_t expected, uint8_t actual);
|
bool check(std::string what, uint16_t address, uint8_t expected, uint8_t actual);
|
||||||
|
|
||||||
|
|
||||||
void addActualEvent(test_t::action action, uint16_t address, uint8_t value);
|
void addActualEvent(test_t::action action, uint16_t address, uint8_t value);
|
||||||
|
|
||||||
void dumpEvents(std::string which, const test_t::events_t& events);
|
void dumpEvents(std::string which, const test_t::events_t& events);
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
#include "stdafx.h"
|
|
||||||
#include "json_t.h"
|
|
||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
const boost::json::value& json_t::get_value(const boost::json::object& object, std::string key) {
|
|
||||||
auto* value = object.if_contains(key);
|
|
||||||
assert(value != nullptr);
|
|
||||||
return *value;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64_t json_t::get_int64(const boost::json::value& value) {
|
|
||||||
assert(value.is_number());
|
|
||||||
assert(value.is_int64());
|
|
||||||
return value.get_int64();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t json_t::get_uint16(const boost::json::value& value) {
|
|
||||||
return static_cast<uint16_t>(get_int64(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t json_t::get_uint8(const boost::json::value& value) {
|
|
||||||
return static_cast<uint8_t>(get_int64(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
int64_t json_t::get_int64(const boost::json::object& object, std::string key) {
|
|
||||||
return get_int64(get_value(object, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t json_t::get_uint16(const boost::json::object& object, std::string key) {
|
|
||||||
return static_cast<uint16_t>(get_int64(object, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t json_t::get_uint8(const boost::json::object& object, std::string key) {
|
|
||||||
return static_cast<uint8_t>(get_int64(object, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
const boost::json::array& json_t::get_array(const boost::json::value& value) {
|
|
||||||
assert(value.is_array());
|
|
||||||
return value.get_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
const boost::json::array& json_t::get_array(const boost::json::object& object, std::string key) {
|
|
||||||
return get_array(get_value(object, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
const boost::json::string& json_t::get_string(const boost::json::value& value) {
|
|
||||||
assert(value.is_string());
|
|
||||||
return value.get_string();
|
|
||||||
}
|
|
||||||
|
|
||||||
const boost::json::string& json_t::get_string(const boost::json::object& object, std::string key) {
|
|
||||||
return get_string(get_value(object, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,28 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
|
||||||
# include <cstdint>
|
|
||||||
# include <string>
|
|
||||||
# include <boost/json.hpp>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class json_t {
|
|
||||||
#ifdef USE_BOOST_JSON
|
|
||||||
protected:
|
|
||||||
[[nodiscard]] static const boost::json::value& get_value(const boost::json::object& object, std::string key);
|
|
||||||
|
|
||||||
[[nodiscard]] static int64_t get_int64(const boost::json::value& value);
|
|
||||||
[[nodiscard]] static uint16_t get_uint16(const boost::json::value& value);
|
|
||||||
[[nodiscard]] static uint8_t get_uint8(const boost::json::value& value);
|
|
||||||
|
|
||||||
[[nodiscard]] static int64_t get_int64(const boost::json::object& object, std::string key);
|
|
||||||
[[nodiscard]] static uint16_t get_uint16(const boost::json::object& object, std::string key);
|
|
||||||
[[nodiscard]] static uint8_t get_uint8(const boost::json::object& object, std::string key);
|
|
||||||
|
|
||||||
[[nodiscard]] static const boost::json::array& get_array(const boost::json::value& value);
|
|
||||||
[[nodiscard]] static const boost::json::array& get_array(const boost::json::object& object, std::string key);
|
|
||||||
|
|
||||||
[[nodiscard]] static const boost::json::string& get_string(const boost::json::value& value);
|
|
||||||
[[nodiscard]] static const boost::json::string& get_string(const boost::json::object& object, std::string key);
|
|
||||||
#endif
|
|
||||||
};
|
|
@ -32,11 +32,6 @@ void opcode_test_suite_t::load() {
|
|||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
#ifdef USE_BOOST_JSON
|
||||||
|
|
||||||
const boost::json::array& opcode_test_suite_t::get_array() const noexcept {
|
|
||||||
assert(raw().is_array());
|
|
||||||
return raw().get_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
void opcode_test_suite_t::parse() {
|
void opcode_test_suite_t::parse() {
|
||||||
m_raw = boost::json::parse(m_contents);
|
m_raw = boost::json::parse(m_contents);
|
||||||
m_contents.clear();
|
m_contents.clear();
|
||||||
|
@ -65,10 +65,6 @@ public:
|
|||||||
[[nodiscard]] constexpr const auto& raw() const noexcept { return m_raw; }
|
[[nodiscard]] constexpr const auto& raw() const noexcept { return m_raw; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
|
||||||
[[nodiscard]] const boost::json::array& get_array() const noexcept;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void load(); // Reads into contents
|
void load(); // Reads into contents
|
||||||
void parse(); // Parse the contents
|
void parse(); // Parse the contents
|
||||||
};
|
};
|
||||||
|
@ -12,8 +12,7 @@ state_t::state_t(const boost::json::object& serialised) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
state_t::state_t(const boost::json::value& serialised) {
|
state_t::state_t(const boost::json::value& serialised) {
|
||||||
assert(serialised.is_object());
|
initialise(serialised.as_object());
|
||||||
initialise(serialised.get_object());
|
|
||||||
assert(initialised());
|
assert(initialised());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,20 +20,19 @@ void state_t::initialise(const boost::json::object& serialised) {
|
|||||||
|
|
||||||
assert(!initialised());
|
assert(!initialised());
|
||||||
|
|
||||||
m_pc = get_uint16(serialised, "pc");
|
m_pc = (uint16_t)serialised.at("pc").as_int64();
|
||||||
m_s = get_uint8(serialised, "s");
|
m_s = (uint8_t)serialised.at("s").as_int64();
|
||||||
m_a = get_uint8(serialised, "a");
|
m_a = (uint8_t)serialised.at("a").as_int64();
|
||||||
m_x = get_uint8(serialised, "x");
|
m_x = (uint8_t)serialised.at("x").as_int64();
|
||||||
m_y = get_uint8(serialised, "y");
|
m_y = (uint8_t)serialised.at("y").as_int64();
|
||||||
m_p = get_uint8(serialised, "p");
|
m_p = (uint8_t)serialised.at("p").as_int64();
|
||||||
|
|
||||||
const auto& ram_entries = get_array(serialised, "ram");
|
const auto& ram_entries = serialised.at("ram").as_array();
|
||||||
for (const auto& ram_entry : ram_entries) {
|
for (const auto& ram_entry : ram_entries) {
|
||||||
assert(ram_entry.is_array());
|
|
||||||
const auto& ram_entry_array = ram_entry.as_array();
|
const auto& ram_entry_array = ram_entry.as_array();
|
||||||
assert(ram_entry_array.size() == 2);
|
assert(ram_entry_array.size() == 2);
|
||||||
const auto address = get_uint16(ram_entry_array[0]);
|
const auto address = (uint16_t)ram_entry_array[0].as_int64();
|
||||||
const auto value = get_uint8(ram_entry_array[1]);
|
const auto value = (uint8_t)ram_entry_array[1].as_int64();
|
||||||
m_ram[address] = value;
|
m_ram[address] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <unordered_map>
|
#include <map>
|
||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
#ifdef USE_BOOST_JSON
|
||||||
# include <boost/json.hpp>
|
# include <boost/json.hpp>
|
||||||
@ -19,9 +19,7 @@
|
|||||||
# include "simdjson/simdjson.h"
|
# include "simdjson/simdjson.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "json_t.h"
|
class state_t final {
|
||||||
|
|
||||||
class state_t final : public json_t {
|
|
||||||
private:
|
private:
|
||||||
bool m_initialised = false;
|
bool m_initialised = false;
|
||||||
|
|
||||||
@ -31,7 +29,7 @@ private:
|
|||||||
uint8_t m_x = 0xff;
|
uint8_t m_x = 0xff;
|
||||||
uint8_t m_y = 0xff;
|
uint8_t m_y = 0xff;
|
||||||
uint8_t m_p = 0xff;
|
uint8_t m_p = 0xff;
|
||||||
std::unordered_map<uint16_t, uint8_t> m_ram;
|
std::map<uint16_t, uint8_t> m_ram;
|
||||||
|
|
||||||
[[nodiscard]] constexpr auto initialised() const noexcept { return m_initialised; }
|
[[nodiscard]] constexpr auto initialised() const noexcept { return m_initialised; }
|
||||||
|
|
||||||
|
@ -8,15 +8,15 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <unordered_map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
//#define TEST_JSON_PERFORMANCE
|
//#define TEST_JSON_PERFORMANCE
|
||||||
|
|
||||||
#define USE_SIMDJSON_JSON // 15 seconds
|
#define USE_SIMDJSON_JSON // 16 seconds
|
||||||
//#define USE_BOOST_JSON // 32 seconds
|
//#define USE_BOOST_JSON // 31 seconds
|
||||||
//#define USE_NLOHMANN_JSON // 58 seconds
|
//#define USE_NLOHMANN_JSON // 73 seconds
|
||||||
//#define USE_JSONCPP_JSON // 88 seconds
|
//#define USE_JSONCPP_JSON // 105 seconds
|
||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
#ifdef USE_BOOST_JSON
|
||||||
# include <boost/json.hpp>
|
# include <boost/json.hpp>
|
||||||
|
@ -26,25 +26,24 @@ test_t::test_t(const boost::json::object& serialised) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test_t::test_t(const boost::json::value& serialised) {
|
test_t::test_t(const boost::json::value& serialised) {
|
||||||
assert(serialised.is_object());
|
initialise(serialised.as_object());
|
||||||
initialise(serialised.get_object());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_t::initialise(const boost::json::object& serialised) {
|
void test_t::initialise(const boost::json::object& serialised) {
|
||||||
|
|
||||||
m_name = get_string(serialised, "name");
|
m_name = serialised.at("name").as_string();
|
||||||
m_initial_state = state_t(get_value(serialised, "initial"));
|
m_initial_state = state_t(serialised.at("initial"));
|
||||||
m_final_state = state_t(get_value(serialised, "final"));
|
m_final_state = state_t(serialised.at("final"));
|
||||||
|
|
||||||
const auto& cycles_array = get_array(serialised, "cycles");
|
const auto& cycles_array = serialised.at("cycles").as_array();
|
||||||
m_cycles.reserve(cycles_array.size());
|
m_cycles.reserve(cycles_array.size());
|
||||||
|
|
||||||
for (const auto& cycles_entry : cycles_array) {
|
for (const auto& cycles_entry : cycles_array) {
|
||||||
const auto& cycle_array = get_array(cycles_entry);
|
const auto& cycle_array = cycles_entry.as_array();
|
||||||
assert(cycle_array.size() == 3);
|
assert(cycle_array.size() == 3);
|
||||||
const auto address = get_uint16(cycle_array[0]);
|
const auto address = (uint16_t)cycle_array[0].as_int64();
|
||||||
const auto contents = get_uint8(cycle_array[1]);
|
const auto contents = (uint8_t)cycle_array[1].as_int64();
|
||||||
const auto action = to_action((std::string)get_string(cycle_array[2]));
|
const auto action = to_action((std::string)cycle_array[2].as_string());
|
||||||
m_cycles.push_back({ address, contents, action });
|
m_cycles.push_back({ address, contents, action });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "state_t.h"
|
#include "state_t.h"
|
||||||
#include "json_t.h"
|
|
||||||
|
|
||||||
class test_t final : public json_t {
|
class test_t final {
|
||||||
public:
|
public:
|
||||||
enum class action { read, write };
|
enum class action { read, write };
|
||||||
|
|
||||||
|
@ -24,12 +24,15 @@ int main() {
|
|||||||
opcode.parse();
|
opcode.parse();
|
||||||
|
|
||||||
#ifdef USE_BOOST_JSON
|
#ifdef USE_BOOST_JSON
|
||||||
const auto& opcode_test_array = opcode.get_array();
|
assert(opcode.raw().is_array());
|
||||||
|
const auto& opcode_test_array = opcode.raw().as_array();
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_NLOHMANN_JSON
|
#ifdef USE_NLOHMANN_JSON
|
||||||
|
assert(opcode.raw().is_array());
|
||||||
const auto& opcode_test_array = opcode.raw();
|
const auto& opcode_test_array = opcode.raw();
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_JSONCPP_JSON
|
#ifdef USE_JSONCPP_JSON
|
||||||
|
assert(opcode.raw().is_array());
|
||||||
const auto& opcode_test_array = opcode.raw();
|
const auto& opcode_test_array = opcode.raw();
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_SIMDJSON_JSON
|
#ifdef USE_SIMDJSON_JSON
|
||||||
|
Loading…
Reference in New Issue
Block a user