#ifndef prototype1_src_l1_5_anne_l1_5_templ_very_base_h
#define prototype1_src_l1_5_anne_l1_5_templ_very_base_h

#include "../codegen/buff_rbtree_set_map_template_inst.h"
#include "../codegen/rbtree_set_map_template_inst.h"

void generate_l1_5_template_instantiation_for_base_types(){
    SpanU8 l = cstr("l1_5"), ns = cstr("");
    generate_buf_rbtree_Set_templ_inst_guarded_header(l, ns, cstr("#include \"../l1/VecAndSpan_U64.h\""),
        (set_instantiation_op){.T = cstr("U64"), .t_integer = true});
    generate_buf_rbtree_Set_templ_inst_guarded_header(l, ns, cstr("#include \"../l1/VecAndSpan_S64.h\""),
        (set_instantiation_op){.T = cstr("S64"), .t_integer = true});

    /* l1/core/utils.h is included in l1_5/core/rb_tree_node.h, hence no additional dependencies needed */
    generate_rbtree_Set_templ_inst_guarded_header(l, ns, cstr(""), (set_instantiation_op){
        .T = cstr("U64"), .t_integer = true }, true);
    generate_rbtree_Set_templ_inst_guarded_header(l, ns, cstr(""), (set_instantiation_op){
        .T = cstr("S64"), .t_integer = true }, true);

    // todo: move vector declaration HERE
    generate_buf_rbtree_Map_templ_inst_guarded_header(l, ns, cstr("#include \"../../gen/l1/VecKVPU64ToU64.h\"\n"),
        (map_instantiation_op){.K = cstr("U64"), .k_integer = true, .V = cstr("U64"), .v_integer = true,});
}

#endif
