mirror of
https://github.com/NeoFlock/neonucleus.git
synced 2026-02-15 04:03:49 +01:00
82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
#ifndef NN_MODEL_H
|
|
#define NN_MODEL_H
|
|
|
|
#include "neonucleus.h"
|
|
|
|
typedef enum nn_BuiltinComponent {
|
|
NN_BUILTIN_GPU = 0,
|
|
NN_BUILTIN_SCREEN,
|
|
NN_BUILTIN_KEYBOARD,
|
|
NN_BUILTIN_FILESYSTEM,
|
|
|
|
// to determine array size
|
|
NN_BUILTIN_COUNT,
|
|
} nn_BuiltinComponent;
|
|
|
|
typedef struct nn_Universe {
|
|
nn_Context ctx;
|
|
nn_ComponentType *types[NN_BUILTIN_COUNT];
|
|
} nn_Universe;
|
|
|
|
typedef struct nn_Component {
|
|
char *address;
|
|
} nn_Component;
|
|
|
|
// the values
|
|
typedef enum nn_ValueType {
|
|
NN_VAL_NULL,
|
|
NN_VAL_BOOL,
|
|
NN_VAL_NUM,
|
|
NN_VAL_STR,
|
|
NN_VAL_USERDATA,
|
|
NN_VAL_TABLE,
|
|
} nn_ValueType;
|
|
|
|
typedef struct nn_String {
|
|
nn_Context ctx;
|
|
size_t refc;
|
|
size_t len;
|
|
char data[];
|
|
} nn_String;
|
|
|
|
typedef struct nn_Value {
|
|
nn_ValueType type;
|
|
union {
|
|
bool boolean;
|
|
double number;
|
|
nn_String *string;
|
|
size_t userdataIdx;
|
|
struct nn_Table *table;
|
|
};
|
|
} nn_Value;
|
|
|
|
typedef struct nn_Table {
|
|
nn_Context ctx;
|
|
size_t refc;
|
|
size_t len;
|
|
nn_Value vals[];
|
|
} nn_Table;
|
|
|
|
typedef struct nn_Computer {
|
|
nn_ComputerState state;
|
|
nn_Universe *universe;
|
|
char *address;
|
|
nn_Architecture *arch;
|
|
nn_Architecture *desiredArch;
|
|
size_t componentCap;
|
|
size_t componentLen;
|
|
nn_Component *components;
|
|
size_t deviceInfoCap;
|
|
size_t deviceInfoLen;
|
|
nn_DeviceInfo *deviceInfo;
|
|
double totalEnergy;
|
|
double energy;
|
|
size_t totalMemory;
|
|
double creationTimestamp;
|
|
size_t stackSize;
|
|
nn_Value callstack[NN_MAX_STACK];
|
|
char errorBuffer[NN_MAX_ERROR_SIZE];
|
|
} nn_Computer;
|
|
|
|
#endif
|