[map] overhaul the maps, fewer parts, fewer paths, fewer knobs; same great results

This commit is contained in:
Allen Webster
2021-06-06 20:15:48 -07:00
parent d390326e17
commit fb999476fa
9 changed files with 274 additions and 335 deletions
+17 -17
View File
@@ -6,10 +6,10 @@
static MD_Map MapFromChildren(MD_Node *node)
{
MD_Map result = {0};
MD_Map result = MD_MapMake();
for(MD_EachNodeRef(child, node->first_child))
{
MD_StringMap_Insert(&result, MD_MapCollisionRule_Chain, child->string, child);
MD_MapInsert(&result, MD_MapKeyStr(child->string), child);
}
return result;
}
@@ -23,7 +23,7 @@ OutputType_C_LHS_Namespace(FILE *file, MD_Map *user_defined_types, MD_String8 pr
{
MD_Node *node = type->node;
if(MD_StringMap_Lookup(user_defined_types, type->node->string))
if(MD_MapLookup(user_defined_types, MD_MapKeyStr(node->string)))
{
fprintf(file, "%.*s", MD_StringExpand(prefix));
}
@@ -156,10 +156,10 @@ static void AppendConversionCode(FILE *f, MD_Map *user_defined_types, MD_Node *n
for(MD_EachNode(member, old_element->first_child))
{
MD_MapSlot *slot = MD_StringMap_Lookup(&new_element_map, member->string);
MD_MapSlot *slot = MD_MapLookup(&new_element_map, MD_MapKeyStr(member->string));
if(slot)
{
AppendConversionCode(f, user_defined_types, member, slot->value, extended_member_path);
AppendConversionCode(f, user_defined_types, member, slot->val, extended_member_path);
}
else
{
@@ -177,7 +177,7 @@ static void AppendConversionCode(FILE *f, MD_Map *user_defined_types, MD_Node *n
MD_String8 extended_member_path = MD_PushStringF("%.*s.%.*s", MD_StringExpand(member_path),
MD_StringExpand(old_element->string));
if(MD_StringMap_Lookup(user_defined_types, type_name))
if(MD_MapLookup(user_defined_types, MD_MapKeyStr(type_name)))
{
fprintf(f, " result%.*s = %.*sFromV1(v%.*s);\n",
MD_StringExpand(extended_member_path), MD_StringExpand(type_name),
@@ -236,7 +236,7 @@ int main(int argument_count, char **arguments)
// NOTE(mal): Old types get "v1_" as a prefix
fprintf(f, "// V1\n");
MD_Node *v1 = MD_StringMap_Lookup(&ns_map, MD_S8Lit("v1"))->value;
MD_Node *v1 = MD_MapLookup(&ns_map, MD_MapKeyStr(MD_S8Lit("v1")))->val;
MD_Map v1_map = MapFromChildren(v1);
for(MD_EachNodeRef(node, v1->first_child))
{
@@ -247,7 +247,7 @@ int main(int argument_count, char **arguments)
fprintf(f, "// V2\n");
MD_Map empty_map = {0};
MD_Node *v2 = MD_StringMap_Lookup(&ns_map, MD_S8Lit("v2"))->value;
MD_Node *v2 = MD_MapLookup(&ns_map, MD_MapKeyStr(MD_S8Lit("v2")))->val;
for(MD_EachNodeRef(node, v2->first_child))
{
OutputPrefixedType(f, &empty_map, MD_S8Lit(""), node, 0);
@@ -258,8 +258,8 @@ int main(int argument_count, char **arguments)
MD_Map v2_map = MapFromChildren(v2);
for(MD_EachNodeRef(node, v1->first_child))
{
MD_MapSlot *slot = MD_StringMap_Lookup(&v2_map, node->string);
MD_Node *v2_type = slot->value;
MD_MapSlot *slot = MD_MapLookup(&v2_map, MD_MapKeyStr(node->string));
MD_Node *v2_type = slot->val;
MD_Map children_map = MapFromChildren(v2_type);
fprintf(f, "static %.*s %.*sFromV1(v1_%.*s v)\n{\n",
@@ -274,10 +274,10 @@ int main(int argument_count, char **arguments)
{
fprintf(f, " case v1_%.*s_%.*s: ",
MD_StringExpand(node->string), MD_StringExpand(enumerand->string));
MD_MapSlot *slot = MD_StringMap_Lookup(&children_map, enumerand->string);
MD_MapSlot *slot = MD_MapLookup(&children_map, MD_MapKeyStr(enumerand->string));
if(slot)
{
MD_Node *v2_enumerand = slot->value;
MD_Node *v2_enumerand = slot->val;
fprintf(f, "result = %.*s_%.*s; break;\n",
MD_StringExpand(node->string), MD_StringExpand(v2_enumerand->string));
}
@@ -305,7 +305,7 @@ int main(int argument_count, char **arguments)
{
fprintf(f, " if(v & v1_%.*s_%.*s) ",
MD_StringExpand(singular_flag_type_name), MD_StringExpand(flag->string));
MD_MapSlot *slot = MD_StringMap_Lookup(&children_map, flag->string);
MD_MapSlot *slot = MD_MapLookup(&children_map, MD_MapKeyStr(flag->string));
if(slot)
{
fprintf(f, "result |= %.*s_%.*s;\n",
@@ -332,10 +332,10 @@ int main(int argument_count, char **arguments)
}
MD_Map v1_children_map = MapFromChildren(node);
MD_MapSlot *v1_member_slot = MD_StringMap_Lookup(&v1_children_map, authoritative_member->string);
MD_MapSlot *v1_member_slot = MD_MapLookup(&v1_children_map, MD_MapKeyStr(authoritative_member->string));
if(v1_member_slot)
{
AppendConversionCode(f, &v2_map, authoritative_member, v1_member_slot->value, MD_S8Lit(""));
AppendConversionCode(f, &v2_map, authoritative_member, v1_member_slot->val, MD_S8Lit(""));
}
else
{
@@ -348,10 +348,10 @@ int main(int argument_count, char **arguments)
MD_Map v1_children_map = MapFromChildren(node);
for(MD_EachNode(member, v2_type->first_child))
{
MD_MapSlot *v1_member_slot = MD_StringMap_Lookup(&v1_children_map, member->string);
MD_MapSlot *v1_member_slot = MD_MapLookup(&v1_children_map, MD_MapKeyStr(member->string));
if(v1_member_slot)
{
AppendConversionCode(f, &v2_map, member, v1_member_slot->value, MD_S8Lit(""));
AppendConversionCode(f, &v2_map, member, v1_member_slot->val, MD_S8Lit(""));
}
else
{
@@ -25,36 +25,6 @@
</div>
<div class="page_content">
<h1 class="title">Blog</h1><input autofocus id="lister_search_0" class="lister_search" oninput="SearchInput(event, 0)" onkeydown="SearchKeyDown(event, 0)" placeholder="Filter..."></input><ul id="lister_0" class="lister">
<a class="lister_item_link" href="blog1.html">
<li class="lister_item">
<div class="lister_item_text">
<div class="lister_item_title">
Test Blog #1
</div>
<div class="lister_item_date">
30 November 2020
</div>
<div class="lister_item_desc">
This is my test blog.
</div>
</div>
</a>
</li>
<a class="lister_item_link" href="blog2.html">
<li class="lister_item">
<div class="lister_item_text">
<div class="lister_item_title">
Hello, Again!
</div>
<div class="lister_item_date">
28 November 2020
</div>
<div class="lister_item_desc">
This is another test blog.
</div>
</div>
</a>
</li>
</ul>
</div>
@@ -92,7 +92,7 @@ int main(int argument_count, char **arguments)
{
for(MD_EachNode(index_string, node->first_child))
{
MD_StringMap_Insert(&index_table, MD_MapCollisionRule_Chain, index_string->string, root);
MD_MapInsert(&index_table, MD_MapKeyStr(index_string->string), root);
}
goto end_index_build;
}
@@ -515,14 +515,15 @@ GeneratePageContent(MD_Map *index_table, SiteInfo *site_info, PageInfo *page_inf
MD_Node *index_string = 0;
for(MD_u64 idx = 0; !MD_NodeIsNil(index_string = MD_ChildFromIndex(node, idx)); idx += 1)
{
for(MD_MapSlot *slot = MD_StringMap_Lookup(index_table, index_string->string);
for(MD_MapSlot *slot = MD_MapLookup(index_table, MD_MapKeyStr(index_string->string));
slot; slot = slot->next)
{
if(slot->value)
if(slot->val)
{
PageInfo info = ParsePageInfo((MD_Node *)slot->value);
MD_Node *node = slot->val;
PageInfo info = ParsePageInfo(node);
MD_String8 filename = ((MD_Node *)slot->value)->filename;
MD_String8 filename = node->filename;
MD_String8 filename_no_ext = MD_ChopExtension(MD_SkipFolder(filename));
MD_String8 link = MD_PushStringF("%.*s.html", MD_StringExpand(filename_no_ext));
MD_String8 name = info.title->string;
+4 -4
View File
@@ -49,7 +49,7 @@ InsertValueToNamespace(NamespaceNode *ns, MD_String8 string, Value v)
{
Value *v_store = malloc(sizeof(*v_store));
*v_store = v;
MD_StringMap_Insert(&ns->symbol_map, MD_MapCollisionRule_Overwrite, string, v_store);
MD_MapInsert(&ns->symbol_map, MD_MapKeyStr(string), v_store);
}
static Value
@@ -58,10 +58,10 @@ ValueFromString(NamespaceNode *ns, MD_String8 string)
Value v = {0};
for(NamespaceNode *n = ns; n; n = n->parent)
{
MD_MapSlot *slot = MD_StringMap_Lookup(&n->symbol_map, string);
if(slot && slot->value)
MD_MapSlot *slot = MD_MapLookup(&n->symbol_map, MD_MapKeyStr(string));
if(slot && slot->val)
{
v = *(Value *)slot->value;
v = *(Value *)slot->val;
break;
}
}