memory new serialization

This commit is contained in:
folkert van heusden 2024-05-14 07:57:47 +02:00
parent 798d69fc7a
commit a53634e541
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
2 changed files with 15 additions and 16 deletions

View file

@ -40,30 +40,29 @@ void memory::reset()
memset(m, 0x00, size); memset(m, 0x00, size);
} }
#if IS_POSIX JsonDocument memory::serialize() const
json_t *memory::serialize() const
{ {
json_t *j = json_object(); JsonDocument j;
json_object_set(j, "size", json_integer(size)); j["size"] = size;
json_t *ja = json_array(); JsonArray ja;
for(size_t i=0; i<size; i++) for(size_t i=0; i<size; i++)
json_array_append(ja, json_integer(m[i])); ja.add(m[i]);
json_object_set(j, "contents", ja); j["contents"] = ja;
return j; return j;
} }
memory *memory::deserialize(const json_t *const j) memory *memory::deserialize(const json_t *const j)
{ {
size_t size = json_integer_value(json_object_get(j, "size")); size_t size = j["size"];
memory *m = new memory(size); memory *m = new memory(size);
json_t *ja = json_object_get(j, "contents"); JsonArray ja = j["contents"];
for(size_t i=0; i<size; i++) uint32_t i = 0;
m->m[i] = json_integer_value(json_array_get(ja, i)); for(auto v: ja)
m->m[i++] = v;
return m; return m;
} }
#endif

View file

@ -2,6 +2,7 @@
// Released under MIT license // Released under MIT license
#pragma once #pragma once
#include <ArduinoJson.h>
#include <cstdint> #include <cstdint>
#include "gen.h" #include "gen.h"
@ -20,10 +21,9 @@ public:
uint32_t get_memory_size() const { return size; } uint32_t get_memory_size() const { return size; }
void reset(); void reset();
#if IS_POSIX
json_t *serialize() const; JsonDocument serialize() const;
static memory *deserialize(const json_t *const j); static memory *deserialize(const JsonDocument j);
#endif
uint16_t read_byte(const uint32_t a) const { return m[a]; } uint16_t read_byte(const uint32_t a) const { return m[a]; }
void write_byte(const uint32_t a, const uint16_t v) { if (a < size) m[a] = v; } void write_byte(const uint32_t a, const uint16_t v) { if (a < size) m[a] = v; }