#ifndef PROTOTYPE1_SRC_L1_ANNE_MARGARET_MARGARET_MISC_H
#define PROTOTYPE1_SRC_L1_ANNE_MARGARET_MARGARET_MISC_H

#include "../../codegen/util_template_inst.h"
#include "../../codegen/list_template_inst.h"

void generate_margaret_eve_for_vulkan_utils() {
    SpanU8 l = cstr("l1");
    SpanU8 ns = cstr("margaret");
    mkdir_nofail("l1/margaret");
    mkdir_nofail("l1/eve/margaret");
    generate_util_templ_inst_eve_header(l, ns, (util_templates_instantiation_options){
        .T = cstr("MargaretScoredPhysicalDevice"), .t_primitive = true, .vec = true, .sort = true
    });

    /* For l2/margaret/{ vulkan_img_claire.h , vulkan_buffer_claire.h } */
    generate_eve_span_company_for_primitive(l, ns, cstr("MargaretIAFreeSegment"), true, false);
    generate_Option_templ_inst_eve_header(l, ns, (option_template_instantiation_op){
        .T = cstr("MargaretIAFreeSegment"), .t_primitive = true});
    // todo: add to BufRBTree instantiator option to create necessary crrp by itself
    generate_eve_span_company_for_primitive(l, ns, cstr("MargaretBAFreeSegment"), true, false);
    generate_Option_templ_inst_eve_header(l, ns, (option_template_instantiation_op){
        .T = cstr("MargaretBAFreeSegment"), .t_primitive = true});

    generate_Option_templ_inst_eve_header(l, ns, (option_template_instantiation_op){
        .T = cstr("BufRBTreeByLenRespAlign_SetMargaretIAFreeSegment")});

    generate_eve_span_company_for_non_primitive_non_clonable(l, ns, cstr("MargaretImgAllocatorOneBlock"), true, false);
    generate_List_templ_inst_eve_header(l, ns, (list_instantiation_op){.T = cstr("MargaretBufAllocatorOneBlock")}, true);
}


#endif