Quellcode durchsuchen

prevent unnecessary rehashing at expansion

banana-cakes
Felix Brendel vor 6 Jahren
Ursprung
Commit
3959dd2fc1
2 geänderte Dateien mit 13 neuen und 9 gelöschten Zeilen
  1. +1
    -0
      .gitignore
  2. +12
    -9
      hashmap.hpp

+ 1
- 0
.gitignore Datei anzeigen

@@ -1,2 +1,3 @@
/bin/*
*.report
/ftb

+ 12
- 9
hashmap.hpp Datei anzeigen

@@ -6,12 +6,12 @@
#include "types.hpp"

#define for_hash_map(hm) \
if (decltype(hm.data[0].original) key = 0); else \
if (decltype(hm.data[0].object) value = 0); else \
for(int index = 0; index < hm.current_capacity; ++index) \
if (!((!hm.data[index].deleted) && \
(key = hm.data[index].original) && \
(value = hm.data[index].object))); else
if (decltype((hm).data[0].original) key = 0); else \
if (decltype((hm).data[0].object) value = 0); else \
for(int index = 0; index < (hm).current_capacity; ++index) \
if (!((!(hm).data[index].deleted) && \
(key = (hm).data[index].original) && \
(value = (hm).data[index].object))); else

template <typename key_type, typename value_type>
struct Hash_Map {
@@ -100,8 +100,7 @@ struct Hash_Map {
}
}

void set_object(key_type key, value_type obj) {
u64 hash_val = hm_hash((key_type)key);
void set_object(key_type key, value_type obj, u64 hash_val) {
int index = hash_val % current_capacity;

/* if we the desired cell is just empty, write to it and done :) */
@@ -125,7 +124,7 @@ struct Hash_Map {
for (int i = 0; i < current_capacity/4; ++i) {
auto cell = old_data[i];
if (cell.original) {
set_object(cell.original, cell.object);
set_object(cell.original, cell.object, cell.hash);
}
}
free(old_data);
@@ -159,5 +158,9 @@ struct Hash_Map {
data[index].hash = hash_val;
data[index].object = obj;
}
void set_object(key_type key, value_type obj) {
u64 hash_val = hm_hash((key_type)key);
set_object(key, obj, hash_val);
}

};

Laden…
Abbrechen
Speichern