mirror of
https://github.com/CPunch/Cosmo.git
synced 2024-11-21 23:10:05 +00:00
41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
#ifndef CTABLE_H
|
|
#define CTABLE_H
|
|
|
|
/* TODO: rewrite this table implementation. compared to other languages (including python!) this
|
|
* table is verrryyyy slow */
|
|
|
|
#include "cosmo.h"
|
|
#include "cvalue.h"
|
|
|
|
typedef struct CTableEntry
|
|
{
|
|
CValue key;
|
|
CValue val;
|
|
} CTableEntry;
|
|
|
|
typedef struct CTable
|
|
{
|
|
int count;
|
|
int capacityMask; // +1 to get the capacity
|
|
int tombstones;
|
|
int tombThreshold;
|
|
CTableEntry *table;
|
|
} CTable;
|
|
|
|
#define cosmoT_getCapacity(tbl) ((tbl)->capacityMask + 1)
|
|
|
|
COSMO_API void cosmoT_initTable(CState *state, CTable *tbl, int startCap);
|
|
COSMO_API void cosmoT_clearTable(CState *state, CTable *tbl);
|
|
COSMO_API int cosmoT_count(CTable *tbl);
|
|
|
|
bool cosmoT_checkShrink(CState *state, CTable *tbl);
|
|
|
|
CObjString *cosmoT_lookupString(CTable *tbl, const char *str, int length, uint32_t hash);
|
|
CValue *cosmoT_insert(CState *state, CTable *tbl, CValue key);
|
|
bool cosmoT_get(CState *state, CTable *tbl, CValue key, CValue *val);
|
|
bool cosmoT_remove(CState *state, CTable *tbl, CValue key);
|
|
|
|
void cosmoT_printTable(CTable *tbl, const char *name);
|
|
|
|
#endif
|