From 8a2e8b48ad906709dd8f1c9ff1aee4aae72ed9e0 Mon Sep 17 00:00:00 2001 From: Andreew Gregory Date: Fri, 21 Nov 2025 01:50:11 +0300 Subject: [PATCH] Collapsed a lot of copypasted code. Hope I didn't broke anything --- src/l1/anne/util_temp_very_base.h | 4 +- src/l1/codegen/util_template_inst.h | 86 +++++-------------- .../buff_rbtree_set_map_template_inst.h | 4 +- src/l2/margaret/vulkan_memory_claire.h | 15 ++-- 4 files changed, 31 insertions(+), 78 deletions(-) diff --git a/src/l1/anne/util_temp_very_base.h b/src/l1/anne/util_temp_very_base.h index afa16ce..8a01f36 100644 --- a/src/l1/anne/util_temp_very_base.h +++ b/src/l1/anne/util_temp_very_base.h @@ -51,9 +51,9 @@ void generate_util_temp_very_base_headers() { generate_guarded_span_company_for_primitive(cstr("l1"), cstr(""), cstr("CSTR"), cstr(""), true, false); - generate_guarded_header_of_result_type_instantiation(cstr("l1"), cstr(""), + generate_ResultType_templ_inst_guarded_header(cstr("l1"), cstr(""), cstr(""), cstr("VecU8"), cstr("#include \"VecAndSpan_U8.h\""), true, false); - generate_guarded_header_of_result_type_instantiation(cstr("l1"), cstr(""), + generate_ResultType_templ_inst_guarded_header(cstr("l1"), cstr(""), cstr(""), cstr("SpanU8"), cstr("#include \"VecAndSpan_U8.h\""), true, true); } diff --git a/src/l1/codegen/util_template_inst.h b/src/l1/codegen/util_template_inst.h index 3e5dbb4..720b6bb 100644 --- a/src/l1/codegen/util_template_inst.h +++ b/src/l1/codegen/util_template_inst.h @@ -478,20 +478,14 @@ NODISCARD VecU8 generate_util_templates_instantiation(util_templates_instantiati NODISCARD VecU8 util_templates_instantiation_get_appropriate_filename(util_templates_instantiation_options op) { util_templates_instantiation_options_fix(&op); - return VecU8_fmt("%s%s%s""%s%s.h", + return VecU8_fmt("%s%s%s""%s%s", op.vec ? cstr("Vec") : cstr(""), op.vec && op.span ? cstr("And") : cstr(""), op.span ? cstr("Span") : cstr(""), (int)op.vec + (int)op.span > 1 ? cstr("_") : cstr(""), op.T); } void generate_util_templ_inst_eve_header(SpanU8 layer, SpanU8 bonus_ns, util_templates_instantiation_options op) { - VecU8 text = VecU8_from_cstr("/* Automatically generated file. Do not edit it.\n" - " * Do not include it in more than one place */\n\n"); - VecU8_append_vec(&text, generate_util_templates_instantiation(op)); - VecU8 filename = util_templates_instantiation_get_appropriate_filename(op); - VecU8 nt_path = VecU8_fmt("%s/eve/%s/%v%c", layer, bonus_ns, filename, 0); - write_whole_file_or_abort((const char*)nt_path.buf, VecU8_to_span(&text)); - VecU8_drop(nt_path); - VecU8_drop(text); + generate_SOME_templ_inst_eve_header(layer, bonus_ns, generate_util_templates_instantiation(op), + util_templates_instantiation_get_appropriate_filename(op)); } void generate_eve_span_company_for_primitive(SpanU8 layer, SpanU8 ns, SpanU8 T, bool with_vector, bool with_span) { @@ -518,21 +512,9 @@ void generate_eve_span_company_for_non_primitive_non_clonable(SpanU8 layer, Span void generate_util_templ_inst_guarded_header( SpanU8 layer, SpanU8 bonus_ns, SpanU8 dependencies, util_templates_instantiation_options op ) { - assert(layer.len > 1); - VecU8 filename = util_templates_instantiation_get_appropriate_filename(op); - VecU8 path = VecU8_fmt("%s/%s%s%s", layer, bonus_ns, bonus_ns.len ? cstr("/") : cstr(""), VecU8_to_span(&filename)); - GeneratedHeader head = begin_header(VecU8_to_span(&path)); - VecU8_drop(path); - VecU8_drop(filename); - VecU8_append_span(&head.result, cstr("#include \"../../")); - int to_my_layer = get_number_of_parts_in_header_namespace(bonus_ns); - for (int i = 0; i < to_my_layer; i++) - VecU8_append_span(&head.result, cstr("../")); - VecU8_append_span(&head.result, cstr("src/l1/core/util.h\"\n")); - VecU8_append_span(&head.result, dependencies); - VecU8_append_span(&head.result, cstr("\n\n")); - VecU8_append_vec(&head.result, generate_util_templates_instantiation(op)); - finish_header(head); + generate_SOME_templ_inst_guarded_header(layer, bonus_ns, VecU8_fmt("%v%s\n", + codegen_include_relative_to_root(bonus_ns, cstr("src/l1/core/util.h")), dependencies), + generate_util_templates_instantiation(op), util_templates_instantiation_get_appropriate_filename(op)); } void generate_guarded_span_company_for_primitive( @@ -623,31 +605,19 @@ NODISCARD VecU8 generate_result_template_inst(SpanU8 OkT, SpanU8 ErrT, bool ok_t return res; } -void generate_eve_header_of_result_type_instantiation( - SpanU8 l, SpanU8 ns, SpanU8 OkT, SpanU8 ErrT, bool ok_t_primitive, bool err_t_primitive +void generate_ResultType_templ_inst_eve_header( + SpanU8 layer, SpanU8 bonus_ns, SpanU8 OkT, SpanU8 ErrT, bool ok_t_primitive, bool err_t_primitive ) { - VecU8 ResultT = get_ResultType_inst_name(OkT, ErrT); - VecU8 nt_filepath = VecU8_fmt("%s/eve/%s/%s.h%c", l, ns, VecU8_to_span(&ResultT), 0); - VecU8 text = generate_result_template_inst(OkT, ErrT, ok_t_primitive, err_t_primitive); - write_whole_file_or_abort((CSTR)text.buf, VecU8_to_span(&text)); - VecU8_drop(text); - VecU8_drop(nt_filepath); - VecU8_drop(ResultT); + generate_SOME_templ_inst_eve_header(layer, bonus_ns, + generate_result_template_inst(OkT, ErrT, ok_t_primitive, err_t_primitive), get_ResultType_inst_name(OkT, ErrT)); } -void generate_guarded_header_of_result_type_instantiation( - SpanU8 layer, SpanU8 bonus_ns, SpanU8 OkT, SpanU8 ErrT, SpanU8 dependencies, bool ok_t_primitive, bool err_t_primitive +void generate_ResultType_templ_inst_guarded_header( + SpanU8 layer, SpanU8 bonus_ns, SpanU8 OkT, SpanU8 ErrT, SpanU8 dependencies, bool ok_t_primitive, bool err_t_primitive ){ - assert(layer.len > 1); - VecU8 filename = get_ResultType_inst_name(OkT, ErrT); - VecU8 path = VecU8_fmt("%s/%s%s%s.h", layer, bonus_ns, bonus_ns.len ? cstr("/") : cstr(""), VecU8_to_span(&filename)); - GeneratedHeader head = begin_header(VecU8_to_span(&path)); - VecU8_append_span(&head.result, dependencies); - VecU8_append_span(&head.result, cstr("\n\n")); - VecU8_append_vec(&head.result, generate_result_template_inst(OkT, ErrT, ok_t_primitive, err_t_primitive)); - finish_header(head); - VecU8_drop(path); - VecU8_drop(filename); + generate_SOME_templ_inst_guarded_header(layer, bonus_ns, VecU8_fmt("%v%s\n", + codegen_include_relative_to_root(bonus_ns, cstr("src/l1/core/util.h")), dependencies), + generate_result_template_inst(OkT, ErrT, ok_t_primitive, err_t_primitive), get_ResultType_inst_name(OkT, ErrT)); } typedef struct{ @@ -720,32 +690,16 @@ NODISCARD VecU8 generate_OptionT_struct_and_methods(option_template_instantiatio } void generate_Option_templ_inst_eve_header(SpanU8 layer, SpanU8 bonus_ns, option_template_instantiation_op op) { - VecU8 text = VecU8_from_cstr("/* Automatically generated file. Do not edit it.\n" - " * Do not include it in more than one place */\n\n"); - VecU8_append_vec(&text, generate_OptionT_struct_and_methods(op)); - VecU8 nt_path = VecU8_fmt("%s/eve/%s/Option%s.h%c", layer, bonus_ns, op.T, 0); - write_whole_file_or_abort((const char*)nt_path.buf, VecU8_to_span(&text)); - VecU8_drop(nt_path); - VecU8_drop(text); + generate_SOME_templ_inst_eve_header(layer, bonus_ns, generate_OptionT_struct_and_methods(op), + VecU8_fmt("Option%s", op.T)); } void generate_Option_templ_inst_guarded_header( SpanU8 layer, SpanU8 bonus_ns, SpanU8 dependencies, option_template_instantiation_op op ) { - assert(layer.len > 1); - VecU8 path = VecU8_fmt("%s/%s%sOption%s.h", layer, bonus_ns, bonus_ns.len ? cstr("/") : cstr(""), op.T); - GeneratedHeader head = begin_header(VecU8_to_span(&path)); - VecU8_drop(path); - - VecU8_append_span(&head.result, cstr("#include \"../../")); - int to_my_layer = get_number_of_parts_in_header_namespace(bonus_ns); - for (int i = 0; i < to_my_layer; i++) - VecU8_append_span(&head.result, cstr("../")); - VecU8_append_span(&head.result, cstr("src/l1/core/util.h\"\n")); - VecU8_append_span(&head.result, dependencies); - VecU8_append_span(&head.result, cstr("\n\n")); - VecU8_append_vec(&head.result, generate_OptionT_struct_and_methods(op)); - finish_header(head); + generate_SOME_templ_inst_guarded_header(layer, bonus_ns, VecU8_fmt("%v%s\n", + codegen_include_relative_to_root(bonus_ns, cstr("src/l1/core/util.h")), dependencies), + generate_OptionT_struct_and_methods(op), VecU8_fmt("Option%s", op.T)); } #endif diff --git a/src/l1_5/codegen/buff_rbtree_set_map_template_inst.h b/src/l1_5/codegen/buff_rbtree_set_map_template_inst.h index 7a80f0c..e0db153 100644 --- a/src/l1_5/codegen/buff_rbtree_set_map_template_inst.h +++ b/src/l1_5/codegen/buff_rbtree_set_map_template_inst.h @@ -447,7 +447,7 @@ void generate_buf_rbtree_Set_templ_inst_eve_header(SpanU8 layer, SpanU8 bonus_ns void generate_buf_rbtree_Set_templ_inst_guarded_header( SpanU8 layer, SpanU8 bonus_ns, SpanU8 dependencies, set_instantiation_op op ){ - VecU8 all_dependencies = VecU8_fmt("%v%s", + VecU8 all_dependencies = VecU8_fmt("%v%s\n", codegen_include_relative_to_root(bonus_ns, cstr("src/l1_5/core/buff_rb_tree_node.h")), dependencies); generate_SOME_templ_inst_guarded_header(layer, bonus_ns, all_dependencies, generate_buf_rbtree_Set_template_instantiation(op), get_name_of_buf_rbtree_set_structure(op)); @@ -539,7 +539,7 @@ void generate_buf_rbtree_Map_templ_inst_eve_header(SpanU8 layer, SpanU8 bonus_ns void generate_buf_rbtree_Map_templ_inst_guarded_header( SpanU8 layer, SpanU8 bonus_ns, SpanU8 dependencies, map_instantiation_op op ){ - VecU8 all_dependencies = VecU8_fmt("%v%s", + VecU8 all_dependencies = VecU8_fmt("%v%s\n", codegen_include_relative_to_root(bonus_ns, cstr("src/l1_5/core/buff_rb_tree_node.h")), dependencies); generate_SOME_templ_inst_guarded_header(layer, bonus_ns, all_dependencies, generate_buf_rbtree_Map_template_instantiation(op), get_name_of_buf_rbtree_map_structure(op)); diff --git a/src/l2/margaret/vulkan_memory_claire.h b/src/l2/margaret/vulkan_memory_claire.h index 04f4ced..972c677 100644 --- a/src/l2/margaret/vulkan_memory_claire.h +++ b/src/l2/margaret/vulkan_memory_claire.h @@ -429,10 +429,9 @@ bool MargaretFreeMemSegment_less_resp_align( } #include "../../../gen/l1/eve/margaret/VecMargaretFreeMemSegment.h" -#include "../../../gen/l1/eve/margaret/OptionMargaretFreeMemSegment.h" -#include "../../../gen/l1_5/eve/margaret/BuffRBTreeByLen_SetMargaretFreeMemSegment.h" -#include "../../../gen/l1_5/eve/margaret/BuffRBTreeByLenRespAlign_SetMargaretFreeMemSegment.h" -#include "../../../gen/l1/eve/margaret/OptionBuffRBTreeByLenRespAlign_SetMargaretFreeMemSegment.h" +#include "../../../gen/l1_5/eve/margaret/BufRBTreeByLen_SetMargaretFreeMemSegment.h" +#include "../../../gen/l1_5/eve/margaret/BufRBTreeByLenRespAlign_SetMargaretFreeMemSegment.h" +#include "../../../gen/l1/eve/margaret/OptionBufRBTreeByLenRespAlign_SetMargaretFreeMemSegment.h" typedef struct{ U32 old_mem_block_id; @@ -466,7 +465,7 @@ typedef struct{ /* Superstructure for managing free segments of memory of some type in ALL BLOCKS */ typedef struct { - OptionBuffRBTreeByLenRespAlign_SetMargaretFreeMemSegment free_space_in_memory[MARGARET_ALLOC_LIMIT_ALIGNMENT_EXP]; + OptionBufRBTreeByLenRespAlign_SetMargaretFreeMemSegment free_space_in_memory[MARGARET_ALLOC_LIMIT_ALIGNMENT_EXP]; VecU8 set_present; } MargaretMemFreeSpaceManager; @@ -474,9 +473,9 @@ MargaretMemFreeSpaceManager MargaretMemFreeSpaceManager_new(){ MargaretMemFreeSpaceManager res = {.set_present = VecU8_new_zeroinit(1)}; res.set_present.buf[0] = 3; for (U8 algn = 0; algn < MARGARET_ALLOC_LIMIT_ALIGNMENT_EXP; algn++) - res.free_space_in_memory[algn] = None_BuffRBTreeByLenRespAlign_SetMargaretFreeMemSegment(); - res.free_space_in_memory[3] = Some_BuffRBTreeByLenRespAlign_SetMargaretFreeMemSegment( - BuffRBTreeByLenRespAlign_SetMargaretFreeMemSegment_new_reserved(3, 1)); + res.free_space_in_memory[algn] = None_BufRBTreeByLenRespAlign_SetMargaretFreeMemSegment(); + res.free_space_in_memory[3] = Some_BufRBTreeByLenRespAlign_SetMargaretFreeMemSegment( + BufRBTreeByLenRespAlign_SetMargaretFreeMemSegment_new_reserved(3, 1)); return res; }