diff options
author | dec05eba <dec05eba@protonmail.com> | 2020-01-26 08:02:17 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-01-26 08:03:53 +0100 |
commit | 31519e8a586791d60e6e56e558c2a3bf973cc1f9 (patch) | |
tree | 9195b99953568103fe58025d5888960a48a0c051 /include/std_gc | |
parent | 5df950e0b35207930c645e8ce0c3e9ed1c9fcea5 (diff) |
Implement plus operator and indexing of strings
Diffstat (limited to 'include/std_gc')
-rw-r--r-- | include/std_gc/hash_map.h | 33 | ||||
-rw-r--r-- | include/std_gc/list.h | 2 |
2 files changed, 32 insertions, 3 deletions
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 <stdint.h> #include <stddef.h> +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 */ |