(de-)serialize for memory-object

This commit is contained in:
folkert van heusden 2024-04-25 14:00:34 +02:00
parent 655df33c3c
commit ef166a98e9
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
2 changed files with 38 additions and 2 deletions

View file

@ -27,3 +27,31 @@ void memory::reset()
{ {
memset(m, 0x00, size); memset(m, 0x00, size);
} }
#if IS_POSIX
json_t *memory::serialize()
{
json_t *j = json_object();
json_object_set(j, "size", json_integer(size));
json_t *ja = json_array();
for(size_t i=0; i<size; i++)
json_array_append(ja, json_integer(m[i]));
json_object_set(j, "contents", ja);
return j;
}
memory *memory::deserialize(const json_t *const j)
{
size_t size = json_integer_value(json_object_get(j, "size"));
memory *m = new memory(size);
json_t *ja = json_object_get(j, "contents");
for(size_t i=0; i<size; i++)
m->writeByte(i, json_integer_value(json_array_get(ja, i)));
return m;
}
#endif

View file

@ -1,11 +1,15 @@
// (C) 2018-2023 by Folkert van Heusden // (C) 2018-2024 by Folkert van Heusden
// Released under MIT license // Released under MIT license
#pragma once #pragma once
#include "gen.h"
#include <assert.h> #include <assert.h>
#if IS_POSIX
#include <jansson.h>
#endif
#include <stdint.h> #include <stdint.h>
class memory class memory
{ {
private: private:
@ -17,6 +21,10 @@ public:
~memory(); ~memory();
void reset(); void reset();
#if IS_POSIX
json_t *serialize();
static memory *deserialize(const json_t *const j);
#endif
uint16_t readByte(const uint32_t a) const { return m[a]; } uint16_t readByte(const uint32_t a) const { return m[a]; }
void writeByte(const uint32_t a, const uint16_t v) { assert(a < size); m[a] = v; } void writeByte(const uint32_t a, const uint16_t v) { assert(a < size); m[a] = v; }