mirror of
https://github.com/NeoFlock/neonucleus.git
synced 2025-09-24 09:03:32 +02:00
minor changes to the serialization process
This commit is contained in:
parent
6499f919d0
commit
b7ddf9c34e
@ -473,20 +473,20 @@ nn_size_t nn_getReturnCount(nn_computer *computer) {
|
|||||||
return computer->retc;
|
return computer->retc;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *nn_serializeProgram(nn_computer *computer, nn_size_t *len) {
|
char *nn_serializeProgram(nn_computer *computer, nn_Alloc *alloc, nn_size_t *len) {
|
||||||
return computer->arch->serialize(computer, computer->archState, computer->arch->userdata, 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) {
|
void nn_deserializeProgram(nn_computer *computer, const char *memory, nn_size_t len) {
|
||||||
computer->arch->deserialize(computer, memory, len, computer->archState, computer->arch->userdata);
|
computer->arch->deserialize(computer, memory, len, computer->archState, computer->arch->userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nn_lockComputer(nn_computer *computer) {
|
nn_Context *nn_getComputerContext(nn_computer *computer) {
|
||||||
nn_lock(&computer->universe->ctx, computer->lock);
|
return &computer->universe->ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nn_unlockComputer(nn_computer *computer) {
|
nn_guard *nn_getComputerLock(nn_computer *computer) {
|
||||||
nn_unlock(&computer->universe->ctx, computer->lock);
|
return computer->lock;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nn_return_nil(nn_computer *computer) {
|
void nn_return_nil(nn_computer *computer) {
|
||||||
|
@ -140,18 +140,6 @@ typedef struct nn_universe nn_universe;
|
|||||||
typedef struct nn_computer nn_computer;
|
typedef struct nn_computer nn_computer;
|
||||||
typedef struct nn_component nn_component;
|
typedef struct nn_component nn_component;
|
||||||
typedef struct nn_componentTable nn_componentTable;
|
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 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.
|
// 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_AllocProc *proc;
|
||||||
} nn_Alloc;
|
} 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_DEFAULT 0
|
||||||
#define NN_LOCK_IMMEDIATE 1
|
#define NN_LOCK_IMMEDIATE 1
|
||||||
|
|
||||||
@ -436,12 +437,12 @@ double nn_getCallCost(nn_computer *computer);
|
|||||||
nn_bool_t nn_isOverworked(nn_computer *computer);
|
nn_bool_t nn_isOverworked(nn_computer *computer);
|
||||||
void nn_triggerIndirect(nn_computer *computer);
|
void nn_triggerIndirect(nn_computer *computer);
|
||||||
|
|
||||||
/* The memory returned can be freed with nn_free() */
|
/* The memory returned can be freed with nn_dealloc() */
|
||||||
char *nn_serializeProgram(nn_computer *computer, nn_size_t *len);
|
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_deserializeProgram(nn_computer *computer, const char *memory, nn_size_t len);
|
||||||
|
|
||||||
void nn_lockComputer(nn_computer *computer);
|
nn_Context *nn_getComputerContext(nn_computer *computer);
|
||||||
void nn_unlockComputer(nn_computer *computer);
|
nn_guard *nn_getComputerLock(nn_computer *computer);
|
||||||
|
|
||||||
/// This means the computer has not yet started.
|
/// This means the computer has not yet started.
|
||||||
#define NN_STATE_SETUP 0
|
#define NN_STATE_SETUP 0
|
||||||
|
@ -704,7 +704,7 @@ size_t testLuaArch_getMemoryUsage(nn_computer *computer, testLuaArch *arch, void
|
|||||||
return arch->memoryUsed;
|
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;
|
*len = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user