1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #include <stdlib.h>
- #include <string.h>
- #include "FunctionMap.h"
- void fmInit(FunctionMap* fm) {
- fm->capacity = 16;
- fm->entries = 0;
- fm->data = malloc(sizeof(Function) * fm->capacity);
- fm->queueCapacity = 16;
- fm->queueEntries = 0;
- fm->queue = malloc(sizeof(LingeringFunction) * fm->queueCapacity);
- }
- void fmDelete(FunctionMap* fm) {
- free(fm->data);
- free(fm->queue);
- }
- Function* fmSearch(FunctionMap* fm, const char* name, int arguments) {
- for(int i = 0; i < fm->entries; i++) {
- if(fm->data[i].arguments == arguments && strcmp(fm->data[i].name, name) == 0) {
- return fm->data + i;
- }
- }
- return NULL;
- }
- bool fmAdd(FunctionMap* fm, const char* name, int arguments, int address, bool returns) {
- if(fmSearch(fm, name, arguments) != NULL) {
- return false;
- }
- if(fm->entries >= fm->capacity) {
- fm->capacity *= 2;
- fm->data = realloc(fm->data, sizeof(Function) * fm->capacity);
- }
- int index = fm->entries++;
- fm->data[index].name = name;
- fm->data[index].arguments = arguments;
- fm->data[index].address = address;
- fm->data[index].returns = returns;
- return true;
- }
- void fmEnqueue(FunctionMap* fm, const char* name, int arguments, int line, int reserved, bool noReturn) {
- if(fm->queueEntries >= fm->queueCapacity) {
- fm->queueCapacity *= 2;
- fm->queue = realloc(fm->queue, sizeof(LingeringFunction) * fm->queueCapacity);
- }
- int index = fm->queueEntries++;
- fm->queue[index].name = name;
- fm->queue[index].arguments = arguments;
- fm->queue[index].line = line;
- fm->queue[index].reserved = reserved;
- fm->queue[index].noReturn = noReturn;
- }
|