kuroko/table.h

33 lines
1.1 KiB
C

#pragma once
/*
* I was going to just use the ToaruOS hashmap library, but to make following
* the book easier, let's just start from their Table implementation; it has
* an advantage of using stored entries and fixed arrays, so it has some nice
* properties despite being chained internally...
*/
#include <stdlib.h>
#include "kuroko.h"
#include "value.h"
typedef struct {
KrkValue key;
KrkValue value;
} KrkTableEntry;
typedef struct {
size_t count;
size_t capacity;
KrkTableEntry * entries;
} KrkTable;
extern void krk_initTable(KrkTable * table);
extern void krk_freeTable(KrkTable * table);
extern void krk_tableAddAll(KrkTable * from, KrkTable * to);
extern KrkString * krk_tableFindString(KrkTable * table, const char * chars, size_t length, uint32_t hash);
extern int krk_tableSet(KrkTable * table, KrkValue key, KrkValue value);
extern int krk_tableGet(KrkTable * table, KrkValue key, KrkValue * value);
extern int krk_tableDelete(KrkTable * table, KrkValue key);
extern KrkTableEntry * krk_findEntry(KrkTableEntry * entries, size_t capacity, KrkValue key);