minor changes to the serialization process

This commit is contained in:
IonutParau 2025-07-28 19:03:22 +02:00
parent 6499f919d0
commit b7ddf9c34e
3 changed files with 24 additions and 23 deletions

View File

@ -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) {

View File

@ -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

View File

@ -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;
}