Files
lang-assm/src/dictionary.c
T

59 lines
1.3 KiB
C

#include "../includes/dictionary.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFAULT_DICT_SIZE 64
struct _dictionary {
int Capacity;
int Size;
KeyValPair** Pairs;
};
struct _dictionary* DictionaryCreate(void) {
struct _dictionary* dict = calloc(1, sizeof(Dictionary));
dict->Pairs = calloc(sizeof(KeyValPair*), DEFAULT_DICT_SIZE);
dict->Capacity = DEFAULT_DICT_SIZE;
return dict;
}
KeyValPair* KeyValPairCreate(const char* key, void* value) {
KeyValPair* pair = calloc(1, sizeof(KeyValPair));
pair->Key = key;
pair->Value = value;
return pair;
}
int DictionaryAdd(struct _dictionary* dict, const char* key, void* value) {
if (!dict) return 0;
if (dict->Size == dict->Capacity) {
dict->Pairs = realloc(dict->Pairs, sizeof(KeyValPair*) * dict->Capacity * 2);
dict->Capacity *= 2;
}
dict->Pairs[dict->Size] = KeyValPairCreate(key, value);
dict->Size++;
return 1;
}
void* DictionaryGetValue(const struct _dictionary* dict, const char* key) {
if (!dict) return NULL;
for(int i = 0; i < dict->Size; i++) {
KeyValPair* pair = dict->Pairs[i];
if (strcmp(pair->Key, key) == 0) {
return pair->Value;
}
}
return NULL;
}