(de-)serialize for memory-object
This commit is contained in:
parent
655df33c3c
commit
ef166a98e9
2 changed files with 38 additions and 2 deletions
28
memory.cpp
28
memory.cpp
|
@ -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
|
||||||
|
|
12
memory.h
12
memory.h
|
@ -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; }
|
||||||
|
|
Loading…
Add table
Reference in a new issue