From 31519e8a586791d60e6e56e558c2a3bf973cc1f9 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 26 Jan 2020 08:02:17 +0100 Subject: Implement plus operator and indexing of strings --- include/std_gc/hash_map.h | 33 +++++++++++++++++++++++++++++++-- include/std_gc/list.h | 2 +- 2 files changed, 32 insertions(+), 3 deletions(-) (limited to 'include/std_gc') diff --git a/include/std_gc/hash_map.h b/include/std_gc/hash_map.h index e1a016d..fb6221b 100644 --- a/include/std_gc/hash_map.h +++ b/include/std_gc/hash_map.h @@ -2,15 +2,30 @@ #define TSL_HASH_MAP_H #include "../forward_decl.h" +#include "../value.h" #include #include +typedef struct TslHashMapNode TslHashMapNode; +struct TslHashMapNode { + uint64_t hash; + TslValue key; + TslValue value; + TslHashMapNode *next; +}; + /* TODO: Optimize small hash map by using the members of the struct instead of allocating on heap */ -typedef struct { +struct TslHashMap { void *buckets_data; /* value=TslHashMapNode */ size_t buckets_size; size_t buckets_capacity; -} TslHashMap; +}; + +typedef struct { + TslHashMap *hash_map; + size_t index; + TslHashMapNode *node; +} TslHashMapIterator; void tsl_hash_map_init(TslHashMap *self); @@ -27,4 +42,18 @@ TslValue* tsl_hash_map_get(TslHashMap *self, const TslValue *key); */ TslValue* tsl_hash_map_get_or_create(TslHashMap *self, const TslValue *key); +/* + How to use the iterator: + + TslHashMapIterator iterator; + tsl_hash_map_create_iterator(hash_map, &iterator); + while(tsl_hash_map_iterator_next(&iterator)) { + TslValue *key = &iterator.node->key; + TslValue *value = &iterator.node->value; + } +*/ + +void tsl_hash_map_create_iterator(TslHashMap *self, TslHashMapIterator *iterator); +int tsl_hash_map_iterator_next(TslHashMapIterator *self); + #endif /* TSL_HASH_MAP_H */ diff --git a/include/std_gc/list.h b/include/std_gc/list.h index 469f585..a97f311 100644 --- a/include/std_gc/list.h +++ b/include/std_gc/list.h @@ -16,6 +16,6 @@ int tsl_list_set_capacity_hint(TslList *self, size_t capacity); TslValue* tsl_list_begin(TslList *self); TslValue* tsl_list_end(TslList *self); /* Returns NULL if index is out of bounds of the list */ -TslValue* tsl_list_get(TslList *self, double index); +TslValue* tsl_list_get(const TslList *self, double index); #endif /* TSL_LIST_H */ -- cgit v1.2.3