From b7ddf9c34e1032a5143dff9a4622b9a3bfae9c81 Mon Sep 17 00:00:00 2001 From: IonutParau Date: Mon, 28 Jul 2025 19:03:22 +0200 Subject: [PATCH] minor changes to the serialization process --- src/computer.c | 12 ++++++------ src/neonucleus.h | 33 +++++++++++++++++---------------- src/testLuaArch.c | 2 +- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/computer.c b/src/computer.c index b52b726..e6b45bf 100644 --- a/src/computer.c +++ b/src/computer.c @@ -473,20 +473,20 @@ nn_size_t nn_getReturnCount(nn_computer *computer) { return computer->retc; } -char *nn_serializeProgram(nn_computer *computer, nn_size_t *len) { - return computer->arch->serialize(computer, computer->archState, computer->arch->userdata, len); +char *nn_serializeProgram(nn_computer *computer, nn_Alloc *alloc, nn_size_t *len) { + return computer->arch->serialize(computer, alloc, computer->archState, computer->arch->userdata, len); } void nn_deserializeProgram(nn_computer *computer, const char *memory, nn_size_t len) { computer->arch->deserialize(computer, memory, len, computer->archState, computer->arch->userdata); } -void nn_lockComputer(nn_computer *computer) { - nn_lock(&computer->universe->ctx, computer->lock); +nn_Context *nn_getComputerContext(nn_computer *computer) { + return &computer->universe->ctx; } -void nn_unlockComputer(nn_computer *computer) { - nn_unlock(&computer->universe->ctx, computer->lock); +nn_guard *nn_getComputerLock(nn_computer *computer) { + return computer->lock; } void nn_return_nil(nn_computer *computer) { diff --git a/src/neonucleus.h b/src/neonucleus.h index 1e8493a..fcc86ba 100644 --- a/src/neonucleus.h +++ b/src/neonucleus.h @@ -140,18 +140,6 @@ typedef struct nn_universe nn_universe; typedef struct nn_computer nn_computer; typedef struct nn_component nn_component; typedef struct nn_componentTable nn_componentTable; -typedef struct nn_architecture { - void *userdata; - const char *archName; - void *(*setup)(nn_computer *computer, void *userdata); - void (*teardown)(nn_computer *computer, void *state, void *userdata); - nn_size_t (*getMemoryUsage)(nn_computer *computer, void *state, void *userdata); - void (*tick)(nn_computer *computer, void *state, void *userdata); - /* Pointer returned should be allocated with nn_malloc or nn_realloc, so it can be freed with nn_free */ - char *(*serialize)(nn_computer *computer, void *state, void *userdata, nn_size_t *len); - void (*deserialize)(nn_computer *computer, const char *data, nn_size_t len, void *state, void *userdata); -} nn_architecture; -typedef char *nn_address; // A non-zero malloc is a null ptr, with a 0 oldSize, but a non-0 newSize. // A zero malloc is never called, the proc address itself is returned, which is ignored when freeing. @@ -164,6 +152,19 @@ typedef struct nn_Alloc { nn_AllocProc *proc; } nn_Alloc; +typedef struct nn_architecture { + void *userdata; + const char *archName; + void *(*setup)(nn_computer *computer, void *userdata); + void (*teardown)(nn_computer *computer, void *state, void *userdata); + nn_size_t (*getMemoryUsage)(nn_computer *computer, void *state, void *userdata); + void (*tick)(nn_computer *computer, void *state, void *userdata); + /* Pointer returned should be allocated with nn_malloc or nn_realloc, so it can be freed with nn_free */ + char *(*serialize)(nn_computer *computer, nn_Alloc *alloc, void *state, void *userdata, nn_size_t *len); + void (*deserialize)(nn_computer *computer, const char *data, nn_size_t len, void *state, void *userdata); +} nn_architecture; +typedef char *nn_address; + #define NN_LOCK_DEFAULT 0 #define NN_LOCK_IMMEDIATE 1 @@ -436,12 +437,12 @@ double nn_getCallCost(nn_computer *computer); nn_bool_t nn_isOverworked(nn_computer *computer); void nn_triggerIndirect(nn_computer *computer); -/* The memory returned can be freed with nn_free() */ -char *nn_serializeProgram(nn_computer *computer, nn_size_t *len); +/* The memory returned can be freed with nn_dealloc() */ +char *nn_serializeProgram(nn_computer *computer, nn_Alloc *alloc, nn_size_t *len); void nn_deserializeProgram(nn_computer *computer, const char *memory, nn_size_t len); -void nn_lockComputer(nn_computer *computer); -void nn_unlockComputer(nn_computer *computer); +nn_Context *nn_getComputerContext(nn_computer *computer); +nn_guard *nn_getComputerLock(nn_computer *computer); /// This means the computer has not yet started. #define NN_STATE_SETUP 0 diff --git a/src/testLuaArch.c b/src/testLuaArch.c index 638eeb3..654c7ff 100644 --- a/src/testLuaArch.c +++ b/src/testLuaArch.c @@ -704,7 +704,7 @@ size_t testLuaArch_getMemoryUsage(nn_computer *computer, testLuaArch *arch, void return arch->memoryUsed; } -char *testLuaArch_serialize(nn_computer *computer, testLuaArch *arch, void *_, size_t *len) { +char *testLuaArch_serialize(nn_computer *computer, nn_Alloc *alloc, testLuaArch *arch, void *_, size_t *len) { *len = 0; return NULL; }