diff options
author | Tyler Murphy <tylerm@tylerm.dev> | 2023-04-14 22:55:43 -0400 |
---|---|---|
committer | Tyler Murphy <tylerm@tylerm.dev> | 2023-04-14 22:55:43 -0400 |
commit | cb76bcf7d2358ad04281d123141acfa175e31841 (patch) | |
tree | 98d770bbc21b9767ae2b7b5186cfe9c445f40236 /src/types.h | |
parent | thing (diff) | |
download | brainfucked-cb76bcf7d2358ad04281d123141acfa175e31841.tar.gz brainfucked-cb76bcf7d2358ad04281d123141acfa175e31841.tar.bz2 brainfucked-cb76bcf7d2358ad04281d123141acfa175e31841.zip |
i made things faster
Diffstat (limited to '')
-rw-r--r-- | src/types.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/types.h b/src/types.h new file mode 100644 index 0000000..413d313 --- /dev/null +++ b/src/types.h @@ -0,0 +1,73 @@ +#pragma once + +#include <stdint.h> +#include <stdio.h> + +typedef enum { + MoveLeft, + MoveRight, + Increment, + Decrement, + StartLoop, + EndLoop, + PutChar, + GetChar, + Allocate, + Free, + EnterTape, + LeaveTape, + PutString, + GetString, + Clear, + Eof +} Symbol; + +typedef struct { + uint32_t len; + uint32_t index; + struct instruction { + Symbol s; + uint32_t j; + } * data; +} Program; + +void program_init(Program* program, FILE* file); +void program_get(Program* program, Symbol* symbol); +uint32_t program_get_jump(Program* program); +void program_next(Program* program); +void program_seek(Program* program, uint32_t index); +void program_free(Program* program); + +typedef struct { + uint32_t len; + uint32_t index; + union stored { + void* p; + uint32_t i; + } * data; +} Stack; + +void stack_init(Stack* stack, uint32_t len); +void stack_push(Stack* stack, void* value); +void* stack_pop(Stack* stack); +void stack_pushi(Stack* stack, uint32_t value); +uint32_t stack_popi(Stack* stack); +void stack_free(Stack* stack); + +typedef struct { + uint8_t len; + uint8_t index; + uint8_t* data; +} Tape; + +void tape_init(Tape* tape, uint8_t len); +void tape_free(Tape* tape); +void tape_left(Tape* tape); +void tape_right(Tape* tape); +void tape_increment(Tape* tape); +void tape_decrement(Tape* tape); +uint8_t tape_get(Tape* tape); +void tape_set(Tape* tape, uint8_t value); +void* tape_ptr(Tape* tape); + +void interpret(Program* program); |