hashtable: get entry by offset

This commit is contained in:
Matheus
2022-09-24 17:12:31 -03:00
parent 619b95c7f1
commit ad8ec070be
2 changed files with 23 additions and 0 deletions
+2
View File
@@ -3,6 +3,7 @@
#include <stddef.h>
#include <stdbool.h>
#include <stdint.h>
typedef struct{
void* next;
@@ -16,6 +17,7 @@ typedef struct{
hashtableentry* entries;
} hashtable;
void* hashtable_fromoffset(hashtable*, uintmax_t, char*);
bool hashtable_init(hashtable*, size_t);
bool hashtable_insert(hashtable*, char*, void*);
bool hashtable_remove(hashtable*, char*);
+21
View File
@@ -27,6 +27,27 @@ static inline hashtableentry* getentry(hashtable* table, char* key){
return &table->entries[entryn];
}
void* hashtable_fromoffset(hashtable* table, uintmax_t offset, char* retkey){
for(uintmax_t i = 0; i < table->size; ++i){
hashtableentry* entry = &table->entries[i];
if(!entry->val)
continue;
while(entry){
if(offset-- == 0){
if(retkey)
strcpy(retkey, entry->key);
return entry->val;
}
entry = entry->next;
}
}
return NULL;
}
bool hashtable_insert(hashtable* table, char* key, void* val){