mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-29 01:14:40 +00:00
gb_internal a lot
This commit is contained in:
@@ -3,7 +3,7 @@ struct StringHashKey {
|
||||
String string;
|
||||
};
|
||||
|
||||
gb_inline StringHashKey string_hash_string(String const &s) {
|
||||
gb_internal gb_inline StringHashKey string_hash_string(String const &s) {
|
||||
StringHashKey hash_key = {};
|
||||
hash_key.hash = fnv32a(s.text, s.len);
|
||||
hash_key.string = s;
|
||||
@@ -11,15 +11,15 @@ gb_inline StringHashKey string_hash_string(String const &s) {
|
||||
}
|
||||
|
||||
|
||||
bool string_hash_key_equal(StringHashKey const &a, StringHashKey const &b) {
|
||||
gb_internal gb_inline bool string_hash_key_equal(StringHashKey const &a, StringHashKey const &b) {
|
||||
if (a.hash == b.hash) {
|
||||
// NOTE(bill): If two string's hashes collide, compare the strings themselves
|
||||
return a.string == b.string;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool operator==(StringHashKey const &a, StringHashKey const &b) { return string_hash_key_equal(a, b); }
|
||||
bool operator!=(StringHashKey const &a, StringHashKey const &b) { return !string_hash_key_equal(a, b); }
|
||||
gb_internal bool operator==(StringHashKey const &a, StringHashKey const &b) { return string_hash_key_equal(a, b); }
|
||||
gb_internal bool operator!=(StringHashKey const &a, StringHashKey const &b) { return !string_hash_key_equal(a, b); }
|
||||
|
||||
template <typename T>
|
||||
struct StringMapEntry {
|
||||
@@ -37,29 +37,29 @@ struct StringMap {
|
||||
};
|
||||
|
||||
|
||||
template <typename T> void string_map_init (StringMap<T> *h, gbAllocator a, isize capacity = 16);
|
||||
template <typename T> void string_map_destroy (StringMap<T> *h);
|
||||
template <typename T> gb_internal void string_map_init (StringMap<T> *h, gbAllocator a, isize capacity = 16);
|
||||
template <typename T> gb_internal void string_map_destroy (StringMap<T> *h);
|
||||
|
||||
template <typename T> T * string_map_get (StringMap<T> *h, char const *key);
|
||||
template <typename T> T * string_map_get (StringMap<T> *h, String const &key);
|
||||
template <typename T> T * string_map_get (StringMap<T> *h, StringHashKey const &key);
|
||||
template <typename T> gb_internal T * string_map_get (StringMap<T> *h, char const *key);
|
||||
template <typename T> gb_internal T * string_map_get (StringMap<T> *h, String const &key);
|
||||
template <typename T> gb_internal T * string_map_get (StringMap<T> *h, StringHashKey const &key);
|
||||
|
||||
template <typename T> T & string_map_must_get (StringMap<T> *h, char const *key);
|
||||
template <typename T> T & string_map_must_get (StringMap<T> *h, String const &key);
|
||||
template <typename T> T & string_map_must_get (StringMap<T> *h, StringHashKey const &key);
|
||||
template <typename T> gb_internal T & string_map_must_get (StringMap<T> *h, char const *key);
|
||||
template <typename T> gb_internal T & string_map_must_get (StringMap<T> *h, String const &key);
|
||||
template <typename T> gb_internal T & string_map_must_get (StringMap<T> *h, StringHashKey const &key);
|
||||
|
||||
template <typename T> void string_map_set (StringMap<T> *h, StringHashKey const &key, T const &value);
|
||||
template <typename T> void string_map_set (StringMap<T> *h, String const &key, T const &value);
|
||||
template <typename T> void string_map_set (StringMap<T> *h, char const *key, T const &value);
|
||||
template <typename T> gb_internal void string_map_set (StringMap<T> *h, StringHashKey const &key, T const &value);
|
||||
template <typename T> gb_internal void string_map_set (StringMap<T> *h, String const &key, T const &value);
|
||||
template <typename T> gb_internal void string_map_set (StringMap<T> *h, char const *key, T const &value);
|
||||
|
||||
template <typename T> void string_map_remove (StringMap<T> *h, StringHashKey const &key);
|
||||
template <typename T> void string_map_clear (StringMap<T> *h);
|
||||
template <typename T> void string_map_grow (StringMap<T> *h);
|
||||
template <typename T> void string_map_rehash (StringMap<T> *h, isize new_count);
|
||||
template <typename T> void string_map_reserve (StringMap<T> *h, isize cap);
|
||||
template <typename T> gb_internal void string_map_remove (StringMap<T> *h, StringHashKey const &key);
|
||||
template <typename T> gb_internal void string_map_clear (StringMap<T> *h);
|
||||
template <typename T> gb_internal void string_map_grow (StringMap<T> *h);
|
||||
template <typename T> gb_internal void string_map_rehash (StringMap<T> *h, isize new_count);
|
||||
template <typename T> gb_internal void string_map_reserve (StringMap<T> *h, isize cap);
|
||||
|
||||
template <typename T>
|
||||
gb_inline void string_map_init(StringMap<T> *h, gbAllocator a, isize capacity) {
|
||||
gb_internal gb_inline void string_map_init(StringMap<T> *h, gbAllocator a, isize capacity) {
|
||||
capacity = next_pow2_isize(capacity);
|
||||
slice_init(&h->hashes, a, capacity);
|
||||
array_init(&h->entries, a, 0, capacity);
|
||||
@@ -69,7 +69,7 @@ gb_inline void string_map_init(StringMap<T> *h, gbAllocator a, isize capacity) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline void string_map_destroy(StringMap<T> *h) {
|
||||
gb_internal gb_inline void string_map_destroy(StringMap<T> *h) {
|
||||
slice_free(&h->hashes, h->entries.allocator);
|
||||
array_free(&h->entries);
|
||||
}
|
||||
@@ -130,7 +130,7 @@ gb_inline void string_map_grow(StringMap<T> *h) {
|
||||
|
||||
|
||||
template <typename T>
|
||||
void string_map_reset_entries(StringMap<T> *h) {
|
||||
gb_internal void string_map_reset_entries(StringMap<T> *h) {
|
||||
for (isize i = 0; i < h->hashes.count; i++) {
|
||||
h->hashes.data[i] = MAP_SENTINEL;
|
||||
}
|
||||
@@ -148,7 +148,7 @@ void string_map_reset_entries(StringMap<T> *h) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void string_map_reserve(StringMap<T> *h, isize cap) {
|
||||
gb_internal void string_map_reserve(StringMap<T> *h, isize cap) {
|
||||
array_reserve(&h->entries, cap);
|
||||
if (h->entries.count*2 < h->hashes.count) {
|
||||
return;
|
||||
@@ -159,12 +159,12 @@ void string_map_reserve(StringMap<T> *h, isize cap) {
|
||||
|
||||
|
||||
template <typename T>
|
||||
void string_map_rehash(StringMap<T> *h, isize new_count) {
|
||||
gb_internal void string_map_rehash(StringMap<T> *h, isize new_count) {
|
||||
string_map_reserve(h, new_count);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T *string_map_get(StringMap<T> *h, StringHashKey const &key) {
|
||||
gb_internal T *string_map_get(StringMap<T> *h, StringHashKey const &key) {
|
||||
isize index = string_map__find(h, key).entry_index;
|
||||
if (index != MAP_SENTINEL) {
|
||||
return &h->entries.data[index].value;
|
||||
@@ -173,34 +173,34 @@ T *string_map_get(StringMap<T> *h, StringHashKey const &key) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline T *string_map_get(StringMap<T> *h, String const &key) {
|
||||
gb_internal gb_inline T *string_map_get(StringMap<T> *h, String const &key) {
|
||||
return string_map_get(h, string_hash_string(key));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline T *string_map_get(StringMap<T> *h, char const *key) {
|
||||
gb_internal gb_inline T *string_map_get(StringMap<T> *h, char const *key) {
|
||||
return string_map_get(h, string_hash_string(make_string_c(key)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T &string_map_must_get(StringMap<T> *h, StringHashKey const &key) {
|
||||
gb_internal T &string_map_must_get(StringMap<T> *h, StringHashKey const &key) {
|
||||
isize index = string_map__find(h, key).entry_index;
|
||||
GB_ASSERT(index != MAP_SENTINEL);
|
||||
return h->entries.data[index].value;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline T &string_map_must_get(StringMap<T> *h, String const &key) {
|
||||
gb_internal gb_inline T &string_map_must_get(StringMap<T> *h, String const &key) {
|
||||
return string_map_must_get(h, string_hash_string(key));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline T &string_map_must_get(StringMap<T> *h, char const *key) {
|
||||
gb_internal gb_inline T &string_map_must_get(StringMap<T> *h, char const *key) {
|
||||
return string_map_must_get(h, string_hash_string(make_string_c(key)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void string_map_set(StringMap<T> *h, StringHashKey const &key, T const &value) {
|
||||
gb_internal void string_map_set(StringMap<T> *h, StringHashKey const &key, T const &value) {
|
||||
MapIndex index;
|
||||
MapFindResult fr;
|
||||
if (h->hashes.count == 0) {
|
||||
@@ -225,18 +225,18 @@ void string_map_set(StringMap<T> *h, StringHashKey const &key, T const &value) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline void string_map_set(StringMap<T> *h, String const &key, T const &value) {
|
||||
gb_internal gb_inline void string_map_set(StringMap<T> *h, String const &key, T const &value) {
|
||||
string_map_set(h, string_hash_string(key), value);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline void string_map_set(StringMap<T> *h, char const *key, T const &value) {
|
||||
gb_internal gb_inline void string_map_set(StringMap<T> *h, char const *key, T const &value) {
|
||||
string_map_set(h, string_hash_string(make_string_c(key)), value);
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
void string_map__erase(StringMap<T> *h, MapFindResult const &fr) {
|
||||
gb_internal void string_map__erase(StringMap<T> *h, MapFindResult const &fr) {
|
||||
MapFindResult last;
|
||||
if (fr.entry_prev == MAP_SENTINEL) {
|
||||
h->hashes.data[fr.hash_index] = h->entries.data[fr.entry_index].next;
|
||||
@@ -257,7 +257,7 @@ void string_map__erase(StringMap<T> *h, MapFindResult const &fr) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void string_map_remove(StringMap<T> *h, StringHashKey const &key) {
|
||||
gb_internal void string_map_remove(StringMap<T> *h, StringHashKey const &key) {
|
||||
MapFindResult fr = string_map__find(h, key);
|
||||
if (fr.entry_index != MAP_SENTINEL) {
|
||||
string_map__erase(h, fr);
|
||||
@@ -265,7 +265,7 @@ void string_map_remove(StringMap<T> *h, StringHashKey const &key) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
gb_inline void string_map_clear(StringMap<T> *h) {
|
||||
gb_internal gb_inline void string_map_clear(StringMap<T> *h) {
|
||||
array_clear(&h->entries);
|
||||
for (isize i = 0; i < h->hashes.count; i++) {
|
||||
h->hashes.data[i] = MAP_SENTINEL;
|
||||
@@ -275,21 +275,21 @@ gb_inline void string_map_clear(StringMap<T> *h) {
|
||||
|
||||
|
||||
template <typename T>
|
||||
StringMapEntry<T> *begin(StringMap<T> &m) {
|
||||
gb_internal StringMapEntry<T> *begin(StringMap<T> &m) {
|
||||
return m.entries.data;
|
||||
}
|
||||
template <typename T>
|
||||
StringMapEntry<T> const *begin(StringMap<T> const &m) {
|
||||
gb_internal StringMapEntry<T> const *begin(StringMap<T> const &m) {
|
||||
return m.entries.data;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
StringMapEntry<T> *end(StringMap<T> &m) {
|
||||
gb_internal StringMapEntry<T> *end(StringMap<T> &m) {
|
||||
return m.entries.data + m.entries.count;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
StringMapEntry<T> const *end(StringMap<T> const &m) {
|
||||
gb_internal StringMapEntry<T> const *end(StringMap<T> const &m) {
|
||||
return m.entries.data + m.entries.count;
|
||||
}
|
||||
Reference in New Issue
Block a user