aboutsummaryrefslogtreecommitdiff
path: root/src/docs_writer.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-11-05 17:03:02 +0000
committergingerBill <bill@gingerbill.org>2021-11-05 17:03:02 +0000
commit6646348e1a0086d9a2341d0866f787ffc2608c8f (patch)
treee213ed15493bd353c27387d5514e309dc29a3491 /src/docs_writer.cpp
parentc38d6dc9592cff3bfd21c45076cd82df2d763eb2 (diff)
Increase usage of `PtrMap`
Diffstat (limited to 'src/docs_writer.cpp')
-rw-r--r--src/docs_writer.cpp44
1 files changed, 17 insertions, 27 deletions
diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp
index 1603ca22c..e7254e16b 100644
--- a/src/docs_writer.cpp
+++ b/src/docs_writer.cpp
@@ -26,12 +26,10 @@ struct OdinDocWriter {
StringMap<OdinDocString> string_cache;
- Map<OdinDocFileIndex> file_cache; // Key: AstFile *
- Map<OdinDocPkgIndex> pkg_cache; // Key: AstPackage *
- Map<OdinDocEntityIndex> entity_cache; // Key: Entity *
- Map<Entity *> entity_id_cache; // Key: OdinDocEntityIndex
- Map<OdinDocTypeIndex> type_cache; // Key: Type *
- Map<Type *> type_id_cache; // Key: OdinDocTypeIndex
+ PtrMap<AstFile *, OdinDocFileIndex> file_cache;
+ PtrMap<AstPackage *, OdinDocPkgIndex> pkg_cache;
+ PtrMap<Entity *, OdinDocEntityIndex> entity_cache;
+ PtrMap<Type *, OdinDocTypeIndex> type_cache;
OdinDocWriterItemTracker<OdinDocFile> files;
OdinDocWriterItemTracker<OdinDocPkg> pkgs;
@@ -61,9 +59,7 @@ void odin_doc_writer_prepare(OdinDocWriter *w) {
map_init(&w->file_cache, a);
map_init(&w->pkg_cache, a);
map_init(&w->entity_cache, a);
- map_init(&w->entity_id_cache, a);
map_init(&w->type_cache, a);
- map_init(&w->type_id_cache, a);
odin_doc_writer_item_tracker_init(&w->files, 1);
odin_doc_writer_item_tracker_init(&w->pkgs, 1);
@@ -81,9 +77,7 @@ void odin_doc_writer_destroy(OdinDocWriter *w) {
map_destroy(&w->file_cache);
map_destroy(&w->pkg_cache);
map_destroy(&w->entity_cache);
- map_destroy(&w->entity_id_cache);
map_destroy(&w->type_cache);
- map_destroy(&w->type_id_cache);
}
@@ -115,9 +109,7 @@ void odin_doc_writer_start_writing(OdinDocWriter *w) {
map_clear(&w->file_cache);
map_clear(&w->pkg_cache);
map_clear(&w->entity_cache);
- map_clear(&w->entity_id_cache);
map_clear(&w->type_cache);
- map_clear(&w->type_id_cache);
isize total_size = odin_doc_writer_calc_total_size(w);
total_size = align_formula_isize(total_size, 8);
@@ -267,7 +259,7 @@ OdinDocPosition odin_doc_token_pos_cast(OdinDocWriter *w, TokenPos const &pos) {
if (pos.file_id != 0) {
AstFile *file = get_ast_file_from_id(pos.file_id);
if (file != nullptr) {
- OdinDocFileIndex *file_index_found = map_get(&w->file_cache, hash_pointer(file));
+ OdinDocFileIndex *file_index_found = map_get(&w->file_cache, file);
GB_ASSERT(file_index_found != nullptr);
file_index = *file_index_found;
}
@@ -483,16 +475,16 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) {
if (type == nullptr) {
return 0;
}
- OdinDocTypeIndex *found = map_get(&w->type_cache, hash_pointer(type));
+ OdinDocTypeIndex *found = map_get(&w->type_cache, type);
if (found) {
return *found;
}
for_array(i, w->type_cache.entries) {
// NOTE(bill): THIS IS SLOW
- Type *other = cast(Type *)cast(uintptr)w->type_cache.entries[i].key.key;
+ Type *other = w->type_cache.entries[i].key;
if (are_types_identical(type, other)) {
OdinDocTypeIndex index = w->type_cache.entries[i].value;
- map_set(&w->type_cache, hash_pointer(type), index);
+ map_set(&w->type_cache, type, index);
return index;
}
}
@@ -502,8 +494,7 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) {
OdinDocType doc_type = {};
OdinDocTypeIndex type_index = 0;
type_index = odin_doc_write_item(w, &w->types, &doc_type, &dst);
- map_set(&w->type_cache, hash_pointer(type), type_index);
- map_set(&w->type_id_cache, hash_integer(type_index), type);
+ map_set(&w->type_cache, type, type_index);
switch (type->kind) {
case Type_Basic:
@@ -776,12 +767,12 @@ OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e) {
return 0;
}
- OdinDocEntityIndex *prev_index = map_get(&w->entity_cache, hash_pointer(e));
+ OdinDocEntityIndex *prev_index = map_get(&w->entity_cache, e);
if (prev_index) {
return *prev_index;
}
- if (e->pkg != nullptr && map_get(&w->pkg_cache, hash_pointer(e->pkg)) == nullptr) {
+ if (e->pkg != nullptr && map_get(&w->pkg_cache, e->pkg) == nullptr) {
return 0;
}
@@ -789,8 +780,7 @@ OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e) {
OdinDocEntity* dst = nullptr;
OdinDocEntityIndex doc_entity_index = odin_doc_write_item(w, &w->entities, &doc_entity, &dst);
- map_set(&w->entity_cache, hash_pointer(e), doc_entity_index);
- map_set(&w->entity_id_cache, hash_integer(doc_entity_index), e);
+ map_set(&w->entity_cache, e, doc_entity_index);
Ast *type_expr = nullptr;
@@ -901,7 +891,7 @@ void odin_doc_update_entities(OdinDocWriter *w) {
defer (array_free(&entities));
for_array(i, w->entity_cache.entries) {
- Entity *e = cast(Entity *)cast(uintptr)w->entity_cache.entries[i].key.key;
+ Entity *e = w->entity_cache.entries[i].key;
entities[i] = e;
}
for_array(i, entities) {
@@ -912,7 +902,7 @@ void odin_doc_update_entities(OdinDocWriter *w) {
}
for_array(i, w->entity_cache.entries) {
- Entity *e = cast(Entity *)cast(uintptr)w->entity_cache.entries[i].key.key;
+ Entity *e = w->entity_cache.entries[i].key;
OdinDocEntityIndex entity_index = w->entity_cache.entries[i].value;
OdinDocTypeIndex type_index = odin_doc_type(w, e->type);
@@ -955,7 +945,7 @@ OdinDocArray<OdinDocEntityIndex> odin_doc_add_pkg_entities(OdinDocWriter *w, Ast
if (pkg->scope == nullptr) {
return {};
}
- if (map_get(&w->pkg_cache, hash_pointer(pkg)) == nullptr) {
+ if (map_get(&w->pkg_cache, pkg) == nullptr) {
return {};
}
@@ -1056,7 +1046,7 @@ void odin_doc_write_docs(OdinDocWriter *w) {
OdinDocPkg *dst = nullptr;
OdinDocPkgIndex pkg_index = odin_doc_write_item(w, &w->pkgs, &doc_pkg, &dst);
- map_set(&w->pkg_cache, hash_pointer(pkg), pkg_index);
+ map_set(&w->pkg_cache, pkg, pkg_index);
auto file_indices = array_make<OdinDocFileIndex>(heap_allocator(), 0, pkg->files.count);
defer (array_free(&file_indices));
@@ -1067,7 +1057,7 @@ void odin_doc_write_docs(OdinDocWriter *w) {
doc_file.pkg = pkg_index;
doc_file.name = odin_doc_write_string(w, file->fullpath);
OdinDocFileIndex file_index = odin_doc_write_item(w, &w->files, &doc_file);
- map_set(&w->file_cache, hash_pointer(file), file_index);
+ map_set(&w->file_cache, file, file_index);
array_add(&file_indices, file_index);
}