architure

i hate everything
This commit is contained in:
Julia 2024-03-26 19:49:15 -05:00
parent a8b50a2e94
commit f14ee5eab2

View file

@ -194,13 +194,15 @@ struct ctrl_bkt *get_bind_bkt(Ctrl *ctrl, size_t i)
return &ctrl->binds.bkts[i]; return &ctrl->binds.bkts[i];
} }
struct code_bkt *find_code(Ctrl *ctrl, hashtype hash) struct code_bkt *find_code_or_set_empty(Ctrl *ctrl, u16 code, )
{ {
const size_t index = hash % ctrl->codes.capacity; const size_t index = hash % ctrl->codes.capacity;
size_t i = index; size_t i = index;
while (i != index - 1) { while (i != index - 1) {
struct code_bkt *bkt = get_code_bkt(ctrl, i); struct code_bkt *bkt = get_code_bkt(ctrl, i);
if (bkt->hash == search)
return bkt;
if (bkt->hash == 0) if (bkt->hash == 0)
return bkt; return bkt;
@ -209,7 +211,7 @@ struct code_bkt *find_code(Ctrl *ctrl, hashtype hash)
return nullptr; return nullptr;
} }
struct ctrl_bkt *find_bind(Ctrl *ctrl, hashtype hash) struct ctrl_bkt *find_bind(Ctrl *ctrl, hashtype hash, hashtype search)
{ {
const size_t index = hash % ctrl->binds.capacity; const size_t index = hash % ctrl->binds.capacity;
size_t i = index; size_t i = index;
@ -229,13 +231,11 @@ bool CtrlMap(Ctrl *ctrl, u16f bind, u16f code, enum InputType type)
if (ctrl->binds.filled == ctrl->binds.capacity) if (ctrl->binds.filled == ctrl->binds.capacity)
return false; return false;
hashtype code_hash = hash_ident(code, type); struct code_bkt *code_bkt = find_code_or_set_empty(ctrl, code, type);
struct code_bkt *code_bkt = find_code(ctrl, code_hash); assert(code_bkt != nullptr);
code_bkt->hash = code_hash;
code_bkt->code = code;
hashtype bind_hash = hash_ident(bind, type); hashtype bind_hash = hash_ident(bind, type);
struct bind_bkt *bind_bkt = find_bind(ctrl, bind_hash); struct bind_bkt *bind_bkt = find_bind(ctrl, bind_hash, bind_hash);
bind_bkt->hash = bind_hash; bind_bkt->hash = bind_hash;
bind_bkt->bind = bind; bind_bkt->bind = bind;
bind_bkt->axis = &code_bkt->axis; bind_bkt->axis = &code_bkt->axis;