36 lines
963 B
C
36 lines
963 B
C
#include "register.h"
|
|
#include "dynarray.h"
|
|
#include "log.h"
|
|
#include "object.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
struct Register *make_register() {
|
|
struct Register *reg = malloc(sizeof(struct Register));
|
|
dyn_array_create_inplace(®->reg);
|
|
return reg;
|
|
}
|
|
|
|
void free_register(struct Register *reg) {
|
|
dyn_array_destroy(®->reg);
|
|
free(reg);
|
|
}
|
|
|
|
void reg_attatch_type(struct Register *reg, char *name,
|
|
void *(*make)(struct Scene *, char *, int len),
|
|
void (*free)(struct Scene *, void *),
|
|
void (*tick)(struct Scene *, void *)) {
|
|
struct Type type = {name, make, free, tick};
|
|
dyn_array_append(®->reg, type);
|
|
}
|
|
|
|
struct Type *reg_get_type(struct Register *reg, char *name) {
|
|
for (int i = 0; i < reg->reg.count; i++) {
|
|
if (strcmp(reg->reg.items[i].name, name) == 0) {
|
|
return ®->reg.items[i];
|
|
}
|
|
}
|
|
meow("did not find %s in register", name);
|
|
return NULL;
|
|
}
|