diff --git a/CMakeLists.txt b/CMakeLists.txt index a652cbc..3d2dcdc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,8 +15,8 @@ add_compile_options(-fno-trapping-math) add_executable(0_test src/l1/tests/t0.c) add_executable(1_test src/l1/tests/t1.c) -#add_executable(codegen_l2 src/l2/codegen/codegen.c) -# +add_executable(codegen_l2 src/l2/codegen/codegen.c) + #add_executable(0_render_test src/l2/tests/r0/r0.c) #target_link_libraries(0_render_test -lvulkan -lX11 -lm) # diff --git a/Makefile b/Makefile index 72a3b8e..92629ee 100644 --- a/Makefile +++ b/Makefile @@ -33,18 +33,22 @@ out/l1/t1: src/l1/tests/t1.c $(HEADERS_gen_l1) $(HEADERS_src_l1) +out/l2/codegen: src/l2/codegen/codegen.c $(HEADERS_src_l2) $(HEADERS_gen_l1) $(HEADERS_src_l1) + mkdir -p out/l2 + $(cc) $(cflags) -o $@ $< -#out/l2/codegen_l2: src/l2/codegen/codegen.c $(HEADERS_src_l2) $(HEADERS_gen_l1) $(HEADERS_src_l1) -# mkdir -p out/l2 -# $(cc) $(cflags) -o $@ $< -# -#gen/l_wl_protocols/xdg-shell-client.h: $(wl_protocols)/stable/xdg-shell/xdg-shell.xml -# mkdir -p gen/l_wl_protocols -# wayland-scanner client-header $< $@ -# -#gen/l_wl_protocols/xdg-shell-private.c: $(wl_protocols)/stable/xdg-shell/xdg-shell.xml -# mkdir -p gen/l_wl_protocols -# wayland-scanner private-code $< $@ +.PHONY: essence_gen_l2 +essence_gen_l2: out/l2/codegen + mkdir -p gen + cd gen && ../out/l2/codegen + +gen/l_wl_protocols/xdg-shell-client.h: $(wl_protocols)/stable/xdg-shell/xdg-shell.xml + mkdir -p gen/l_wl_protocols + wayland-scanner client-header $< $@ + +gen/l_wl_protocols/xdg-shell-private.c: $(wl_protocols)/stable/xdg-shell/xdg-shell.xml + mkdir -p gen/l_wl_protocols + wayland-scanner private-code $< $@ # # # diff --git a/src/l1/codegen/codegen.c b/src/l1/codegen/codegen.c index 4670a9c..70e05da 100644 --- a/src/l1/codegen/codegen.c +++ b/src/l1/codegen/codegen.c @@ -30,7 +30,7 @@ int main() { { VecU8 head = begin_header(cstr("PROTOTYPE1_L1_VECANDSPAN_SPAN_INT_PRIMITIVES_H")); VecU8_append_span(&head, cstr("#include \"VecAndSpanAndOption_int_primitives.h\"\n\n")); - SpanU8 T[4] = {cstr("VecU8")}; + SpanU8 T[1] = {cstr("SpanU8")}; for (size_t i = 0; i < ARRAY_SIZE(T); i++) { VecU8_append_vec(&head, generate_util_templates_instantiation(T[i], (util_templates_instantiation_options){ .t_primitive = true, .vec = true, .vec_equal = true, .span = true, .mut_span = true, diff --git a/src/l1/codegen/codegen.h b/src/l1/codegen/codegen.h index 5b655e5..6150238 100644 --- a/src/l1/codegen/codegen.h +++ b/src/l1/codegen/codegen.h @@ -18,7 +18,7 @@ NODISCARD VecU8 begin_header(SpanU8 guard) { /* Codegen script's working directory should be `gen` */ void finish_header(VecU8 text_before_endif, const char* filename) { VecU8_append_span(&text_before_endif, cstr("#endif\n")); - write_whole_file_or_abort(filename, VecU8_to_SpanU8(&text_before_endif)); + write_whole_file_or_abort(filename, VecU8_to_span(&text_before_endif)); VecU8_drop(text_before_endif); } diff --git a/src/l1/codegen/util_template_inst.h b/src/l1/codegen/util_template_inst.h index c6ce7ab..15ee0c8 100644 --- a/src/l1/codegen/util_template_inst.h +++ b/src/l1/codegen/util_template_inst.h @@ -6,7 +6,7 @@ /* if !primitive, requires methods T_clone, T_drop */ NODISCARD VecU8 generate_VecT_struct_and_base_methods(SpanU8 T, bool primitive) { VecU8 g_VecT = VecU8_fmt("Vec%s", T); - SpanU8 VecT = VecU8_to_SpanU8(&g_VecT); + SpanU8 VecT = VecU8_to_span(&g_VecT); VecU8 res = VecU8_fmt( "typedef struct {\n" SPACE4 "%s* buf;\n" @@ -98,7 +98,7 @@ NODISCARD VecU8 generate_VecT_struct_and_base_methods(SpanU8 T, bool primitive) /* if !primitive, requires methods T_clone, T_drop */ NODISCARD VecU8 generate_VecT_trivmove_extended_methods(SpanU8 T, bool primitive) { VecU8 g_VecT = VecU8_fmt("Vec%s", T); - SpanU8 VecT = VecU8_to_SpanU8(&g_VecT); + SpanU8 VecT = VecU8_to_span(&g_VecT); VecU8 res = VecU8_new(); VecU8_append_vec(&res, VecU8_fmt( @@ -147,7 +147,7 @@ NODISCARD VecU8 generate_VecT_trivmove_extended_methods(SpanU8 T, bool primitive /* if !integer requires method T_equal_T */ NODISCARD VecU8 generate_VecT_equal_method(SpanU8 T, bool integer) { VecU8 g_VecT = VecU8_fmt("Vec%s", T); - SpanU8 VecT = VecU8_to_SpanU8(&g_VecT); + SpanU8 VecT = VecU8_to_span(&g_VecT); VecU8 res = VecU8_fmt( "bool %s_equal_%s(const %s* A, const %s* B) {\n" SPACE4 "if (A->len != B->len)\n" @@ -172,7 +172,7 @@ NODISCARD VecU8 generate_VecT_equal_method(SpanU8 T, bool integer) { /* requires method T_new */ NODISCARD VecU8 generate_VecT_new_of_size_method(SpanU8 T) { VecU8 g_VecT = VecU8_fmt("Vec%s", T); - SpanU8 VecT = VecU8_to_SpanU8(&g_VecT); + SpanU8 VecT = VecU8_to_span(&g_VecT); VecU8 res = VecU8_fmt( "NODISCARD %s %s_new_of_size(size_t len) {\n" SPACE4 "%s res = (%s){.buf = safe_calloc(len, sizeof(%s)), .len = len, .capacity = len};\n" @@ -188,7 +188,7 @@ NODISCARD VecU8 generate_VecT_new_of_size_method(SpanU8 T) { /* helper function. SpanT is either SpanT or MutSpanT */ void codegen_append_some_span_equal_method(VecU8* res, SpanU8 SpanT) { VecU8_append_vec(res, VecU8_fmt( - "bool %s_%s(%s A, %s B) {\n" + "bool %s_equal_%s(%s A, %s B) {\n" SPACE4 "return A->data == B->data && A->len == B->len;\n" "}\n\n", SpanT, SpanT, SpanT, SpanT)); } @@ -230,8 +230,8 @@ NODISCARD VecU8 generate_SpanT_struct_and_methods( ) { VecU8 g_SpanT = VecU8_fmt("Span%s", T); VecU8 g_MutSpanT = VecU8_fmt("MutSpan%s", T); - SpanU8 SpanT = VecU8_to_SpanU8(&g_SpanT); - SpanU8 MutSpanT = VecU8_to_SpanU8(&g_MutSpanT); + SpanU8 SpanT = VecU8_to_span(&g_SpanT); + SpanU8 MutSpanT = VecU8_to_span(&g_MutSpanT); VecU8 res = VecU8_new(); codegen_append_some_span_struct(&res, T, SpanT, cstr("const ")); @@ -288,9 +288,9 @@ NODISCARD VecU8 generate_SpanT_VecT_trivmove_collab(SpanU8 T, bool primitive, bo VecU8 g_SpanT = VecU8_fmt("Span%s", T); VecU8 g_MutSpanT = VecU8_fmt("MutSpan%s", T); VecU8 g_VecT = VecU8_fmt("Vec%s", T); - SpanU8 SpanT = VecU8_to_SpanU8(&g_SpanT); - SpanU8 MutSpanT = VecU8_to_SpanU8(&g_MutSpanT); - SpanU8 VecT = VecU8_to_SpanU8(&g_VecT); + SpanU8 SpanT = VecU8_to_span(&g_SpanT); + SpanU8 MutSpanT = VecU8_to_span(&g_MutSpanT); + SpanU8 VecT = VecU8_to_span(&g_VecT); VecU8 res = VecU8_new(); VecU8_append_vec(&res, VecU8_fmt( @@ -361,7 +361,7 @@ NODISCARD VecU8 generate_SpanT_VecT_trivmove_collab(SpanU8 T, bool primitive, bo NODISCARD VecU8 generate_OptionT_struct_and_methods(SpanU8 T, bool primitive) { VecU8 g_OptionT = VecU8_fmt("Option%s", T); - SpanU8 OptionT = VecU8_to_SpanU8(&g_OptionT); + SpanU8 OptionT = VecU8_to_span(&g_OptionT); VecU8 res = VecU8_fmt( "typedef struct {\n" @@ -490,7 +490,7 @@ void generate_eve_header(SpanU8 layer, SpanU8 bonus_ns, SpanU8 T, util_templates cstr(op.span && op.option ? "And" : ""), cstr(op.option ? "Option" : ""), cstr((int)op.vec + (int)op.span + (int)op.option > 1 ? "_" : ""), T); VecU8_append(&filename, 0); - write_whole_file_or_abort((const char*)filename.buf, VecU8_to_SpanU8(&text)); + write_whole_file_or_abort((const char*)filename.buf, VecU8_to_span(&text)); VecU8_drop(filename); VecU8_drop(text); } diff --git a/src/l1/core/chicken_VecU8.h b/src/l1/core/chicken_VecU8.h index aacadd3..a510a5f 100644 --- a/src/l1/core/chicken_VecU8.h +++ b/src/l1/core/chicken_VecU8.h @@ -82,7 +82,7 @@ NODISCARD VecU8 VecU8_from_span(SpanU8 src) { return res; } -SpanU8 VecU8_to_SpanU8(const VecU8* vec) { +SpanU8 VecU8_to_span(const VecU8* vec) { return (SpanU8){vec->buf, vec->len}; } diff --git a/src/l2/codegen/clipping.h b/src/l2/codegen/clipping.h index efa6f87..550290c 100644 --- a/src/l2/codegen/clipping.h +++ b/src/l2/codegen/clipping.h @@ -2,9 +2,10 @@ #define PROTOTYPE1_SRC_L2_CODEGEN_CLIPPING_H #include "../../l1/codegen/codegen.h" -#include "../../l1/core/Span_Span_int_primitives.h" +#include "../../../gen/l1/VecAndSpan_Span_int_primitives.h" // todo: move all of this to marie namespace +// todo: instead of returning triangles, return points of convex polygon typedef struct { int order; @@ -93,12 +94,12 @@ void append_intersection_eol_stmt(VecU8* str, char tr1, int A1, int B1, char tr2 tr1, A1, tr1, B1, tr2, A2, tr2, B2)); } -ConstSpanU8 marie_names_of_two_clipping_triangles[6] = { +SpanU8 marie_names_of_two_clipping_triangles[6] = { {"C.v0", 4}, {"C.v1", 4}, {"C.v2", 4}, {"T.v0", 4}, {"T.v1", 4}, {"T.v2", 4}, }; -NODISCARD ConstSpanU8 get_firstborn_vertex_stmt(char tr, int id) { +NODISCARD SpanU8 get_firstborn_vertex_stmt(char tr, int id) { assert(0 <= id && id < 3); if (tr == 'C') return marie_names_of_two_clipping_triangles[id]; @@ -107,7 +108,7 @@ NODISCARD ConstSpanU8 get_firstborn_vertex_stmt(char tr, int id) { abortf("Wrong triangle"); } -void append_triangle_registration_stmt(VecU8* str, ConstSpanU8 P0, ConstSpanU8 P1, ConstSpanU8 P2) { +void append_triangle_registration_stmt(VecU8* str, SpanU8 P0, SpanU8 P1, SpanU8 P2) { VecU8_append_span(str, cstr("VecMarieTriangle_append(pile, (MarieTriangle){")); VecU8_append_span(str, P0); VecU8_append_span(str, cstr(", ")); @@ -117,14 +118,14 @@ void append_triangle_registration_stmt(VecU8* str, ConstSpanU8 P0, ConstSpanU8 P VecU8_append_span(str, cstr("});\n")); } -void append_answering_stmt(VecU8* res, ConstSpanConstSpanU8 vertices, int tabulation_lvl) { +void append_answering_stmt(VecU8* res, SpanSpanU8 vertices, int tabulation_lvl) { size_t n = vertices.len; assert(n >= 3); for (int i = 0; i < n - 2; i++) { for (int sp = 0; sp < tabulation_lvl; sp++) VecU8_append(res, ' '); - append_triangle_registration_stmt(res, *ConstSpanConstSpanU8_at(vertices, i), - *ConstSpanConstSpanU8_at(vertices, i + 1), *ConstSpanConstSpanU8_at(vertices, n - 1)); + append_triangle_registration_stmt(res, *SpanSpanU8_at(vertices, i), + *SpanSpanU8_at(vertices, i + 1), *SpanSpanU8_at(vertices, n - 1)); } for (int sp = 0; sp < tabulation_lvl; sp++) VecU8_append(res, ' '); @@ -187,9 +188,9 @@ void generate_func_clip_triang_on_triang_case_where_some_vertex_stuck(VecU8* res append_intersection_eol_stmt(res, tC, sc, mod3_inc(sc), tT, ti, TB); VecU8_append_span(res, cstr(SPACE16 "vec2 PA = ")); append_intersection_eol_stmt(res, tC, sc, mod3_inc(sc), tT, ti, TA); - ConstSpanU8 quad[4] = { + SpanU8 quad[4] = { get_firstborn_vertex_stmt(tT, TB), cstr("PB"), cstr("PA"), get_firstborn_vertex_stmt(tT, TA) }; - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = quad, .len = ARRAY_SIZE(quad)}, 16); + append_answering_stmt(res, (SpanSpanU8){.data = quad, .len = ARRAY_SIZE(quad)}, 16); } VecU8_append_span(res, cstr(SPACE12 "}\n")); if (!tables_turned) { @@ -204,9 +205,9 @@ void generate_func_clip_triang_on_triang_case_where_some_vertex_stuck(VecU8* res append_intersection_eol_stmt(res, tC, sc, mod3_dec(sc), tT, ti, TB); VecU8_append_span(res, cstr(SPACE16 "vec2 PA = ")); append_intersection_eol_stmt(res, tC, sc, mod3_inc(sc), tT, ti, TA); - ConstSpanU8 pentagon[5] = { get_firstborn_vertex_stmt(tT, TB), cstr("PB"), + SpanU8 pentagon[5] = { get_firstborn_vertex_stmt(tT, TB), cstr("PB"), get_firstborn_vertex_stmt(tC, sc), cstr("PA"), get_firstborn_vertex_stmt(tT, TA)}; - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = pentagon, .len = ARRAY_SIZE(pentagon)}, 16); + append_answering_stmt(res, (SpanSpanU8){.data = pentagon, .len = ARRAY_SIZE(pentagon)}, 16); } VecU8_append_span(res, cstr(SPACE12 "}\n")); } @@ -244,8 +245,8 @@ void generate_func_clip_triang_on_triang_case_where_some_vertex_stuck(VecU8* res append_intersection_eol_stmt(res, tT, pl, TA, tC, cr, mod3_inc(cr)); VecU8_append_span(res, cstr(SPACE12 "vec2 PB = ")); append_intersection_eol_stmt(res, tT, pl, TB, tC, cr, mod3_inc(cr)); - ConstSpanU8 trig[3] = {get_firstborn_vertex_stmt(tT, pl), cstr("PA"), cstr("PB")}; - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = trig, .len = ARRAY_SIZE(trig)}, 12); + SpanU8 trig[3] = {get_firstborn_vertex_stmt(tT, pl), cstr("PA"), cstr("PB")}; + append_answering_stmt(res, (SpanSpanU8){.data = trig, .len = ARRAY_SIZE(trig)}, 12); } VecU8_append_span(res, cstr(SPACE8 "}\n")); } @@ -274,8 +275,8 @@ void generate_func_clip_triang_on_triang_case_where_some_vertex_stuck(VecU8* res append_intersection_eol_stmt(res, tT, TA, TB, tC, mod3_inc(rc), mod3_dec(rc)); VecU8_append_span(res, cstr(SPACE16 "vec2 PB = ")); append_intersection_eol_stmt(res, tT, pl, TB, tC, mod3_inc(rc), mod3_dec(rc)); - ConstSpanU8 pent[5] = {get_firstborn_vertex_stmt(tT, pl), cstr("PA"), cstr("QA"), cstr("QB"), cstr("PB")}; - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = pent, .len = ARRAY_SIZE(pent)}, 16); + SpanU8 pent[5] = {get_firstborn_vertex_stmt(tT, pl), cstr("PA"), cstr("QA"), cstr("QB"), cstr("PB")}; + append_answering_stmt(res, (SpanSpanU8){.data = pent, .len = ARRAY_SIZE(pent)}, 16); } VecU8_append_span(res, cstr(SPACE12 "}")); if (!tables_turned) { @@ -286,9 +287,9 @@ void generate_func_clip_triang_on_triang_case_where_some_vertex_stuck(VecU8* res append_intersection_eol_stmt(res, tT, pl, TA, tC, rc, mod3_inc(rc)); VecU8_append_span(res, cstr(SPACE16 "vec2 PB = ")); append_intersection_eol_stmt(res, tT, pl, TB, tC, mod3_inc(rc), mod3_dec(rc)); - ConstSpanU8 quad[4] = {get_firstborn_vertex_stmt(tT, pl), cstr("PA"), + SpanU8 quad[4] = {get_firstborn_vertex_stmt(tT, pl), cstr("PA"), get_firstborn_vertex_stmt(tC, mod3_inc(rc)), cstr("PB")}; - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = quad, .len = ARRAY_SIZE(quad)}, 16); + append_answering_stmt(res, (SpanSpanU8){.data = quad, .len = ARRAY_SIZE(quad)}, 16); VecU8_append_span(res, cstr(SPACE12 "}")); } VecU8_append_span(res, cstr("\n")); @@ -335,7 +336,7 @@ void generate_func_clip_triang_on_triang_case_boring(VecU8* res) { append_on_the_left_stmt(res, 'C', cf, 'C', (cf + 2) % 3, 'T', (ti + 2) % 3); VecU8_append_span(res, cstr(") {\n")); { - ConstSpanU8 quad[4] = {cstr("PA"), cstr("PB"), cstr("PC"), cstr("PD")}; + SpanU8 quad[4] = {cstr("PA"), cstr("PB"), cstr("PC"), cstr("PD")}; /* case A */ VecU8_append_span(res, cstr(SPACE8 "if (")); append_on_the_left_stmt(res, 'T', ti, 'T', mod3_dec(ti), 'C', mod3_inc(cf)); @@ -353,7 +354,7 @@ void generate_func_clip_triang_on_triang_case_boring(VecU8* res) { append_intersection_eol_stmt(res, 'T', mod3_inc(ti), mod3_dec(ti), 'C', mod3_dec(cf), cf); VecU8_append_span(res, cstr(SPACE12 "vec2 PD = ")); append_intersection_eol_stmt(res, 'T', mod3_dec(ti), ti, 'C', mod3_dec(cf), cf); - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = quad, ARRAY_SIZE(quad)}, 12); + append_answering_stmt(res, (SpanSpanU8){.data = quad, ARRAY_SIZE(quad)}, 12); } VecU8_append_span(res, cstr(SPACE8 "}\n")); /* case B */ @@ -373,7 +374,7 @@ void generate_func_clip_triang_on_triang_case_boring(VecU8* res) { append_intersection_eol_stmt(res, 'T', mod3_inc(ti), mod3_dec(ti), 'C', mod3_dec(cf), cf); VecU8_append_span(res, cstr(SPACE12 "vec2 PD = ")); append_intersection_eol_stmt(res, 'T', mod3_dec(ti), ti, 'C', mod3_dec(cf), cf); - append_answering_stmt(res, (ConstSpanConstSpanU8){.data = quad, ARRAY_SIZE(quad)}, 12); + append_answering_stmt(res, (SpanSpanU8){.data = quad, ARRAY_SIZE(quad)}, 12); } VecU8_append_span(res, cstr(SPACE8 "}\n")); } diff --git a/src/l2/codegen/codegen.c b/src/l2/codegen/codegen.c index c78485d..203c41d 100644 --- a/src/l2/codegen/codegen.c +++ b/src/l2/codegen/codegen.c @@ -3,6 +3,9 @@ #include "clipping.h" #include "../../l1/system/fsmanip.h" +// todo: generate here lyndas + +//todo + generate here cvec34 vectors and vec2, vec3, vec4 vectors + int main() { make_dir_nofail("l2"); generate_geom_header(); diff --git a/src/l2/codegen/geom.h b/src/l2/codegen/geom.h index 31cb916..4f5253a 100644 --- a/src/l2/codegen/geom.h +++ b/src/l2/codegen/geom.h @@ -9,12 +9,12 @@ void string_append_vec_field_name(VecU8* str, int ci) { VecU8_append(str, ci == 3 ? 'w' : 'x' + ci); } -void string_append_xvecy(VecU8* str, ConstSpanU8 xvec, int cc) { +void string_append_xvecy(VecU8* str, SpanU8 xvec, int cc) { VecU8_append_span(str, xvec); VecU8_append(str, '0' + cc); } -NODISCARD VecU8 generate_xvecy_struct_definition(ConstSpanU8 xvec, ConstSpanU8 member, int cc) { +NODISCARD VecU8 generate_xvecy_struct_definition(SpanU8 xvec, SpanU8 member, int cc) { assert(2 <= cc && cc <= 4); VecU8 res = VecU8_new(); VecU8_append_span(&res, cstr("typedef struct {\n")); @@ -33,7 +33,7 @@ NODISCARD VecU8 generate_xvecy_struct_definition(ConstSpanU8 xvec, ConstSpanU8 m return res; } -NODISCARD VecU8 generate_xvecy_method_add_xvecy(ConstSpanU8 xvec, ConstSpanU8 member, int cc) { +NODISCARD VecU8 generate_xvecy_method_add_xvecy(SpanU8 xvec, SpanU8 member, int cc) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, cc); VecU8_append_span(&res, cstr(" ")); @@ -59,7 +59,7 @@ NODISCARD VecU8 generate_xvecy_method_add_xvecy(ConstSpanU8 xvec, ConstSpanU8 me return res; } -NODISCARD VecU8 generate_xvecy_method_minus_xvecy(ConstSpanU8 xvec, ConstSpanU8 member, int cc) { +NODISCARD VecU8 generate_xvecy_method_minus_xvecy(SpanU8 xvec, SpanU8 member, int cc) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, cc); VecU8_append_span(&res, cstr(" ")); @@ -86,7 +86,7 @@ NODISCARD VecU8 generate_xvecy_method_minus_xvecy(ConstSpanU8 xvec, ConstSpanU8 } -NODISCARD VecU8 generate_xvecy_method_minus(ConstSpanU8 xvec, ConstSpanU8 member, int cc) { +NODISCARD VecU8 generate_xvecy_method_minus(SpanU8 xvec, SpanU8 member, int cc) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, cc); VecU8_append_span(&res, cstr(" ")); @@ -106,7 +106,7 @@ NODISCARD VecU8 generate_xvecy_method_minus(ConstSpanU8 xvec, ConstSpanU8 member return res; } -NODISCARD VecU8 generate_xvecy_method_mul_scal(ConstSpanU8 xvec, ConstSpanU8 member, int cc) { +NODISCARD VecU8 generate_xvecy_method_mul_scal(SpanU8 xvec, SpanU8 member, int cc) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, cc); VecU8_append_span(&res, cstr(" ")); @@ -129,7 +129,7 @@ NODISCARD VecU8 generate_xvecy_method_mul_scal(ConstSpanU8 xvec, ConstSpanU8 mem return res; } -NODISCARD VecU8 generate_xvecy_method_div_by_scal(ConstSpanU8 xvec, ConstSpanU8 member, int cc) { +NODISCARD VecU8 generate_xvecy_method_div_by_scal(SpanU8 xvec, SpanU8 member, int cc) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, cc); VecU8_append_span(&res, cstr(" ")); @@ -144,7 +144,7 @@ NODISCARD VecU8 generate_xvecy_method_div_by_scal(ConstSpanU8 xvec, ConstSpanU8 return res; } -NODISCARD VecU8 generate_xvecy_method_mul_xvecy(ConstSpanU8 xvec, ConstSpanU8 member, int n) { +NODISCARD VecU8 generate_xvecy_method_mul_xvecy(SpanU8 xvec, SpanU8 member, int n) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, n); VecU8_append_span(&res, cstr(" ")); @@ -170,7 +170,7 @@ NODISCARD VecU8 generate_xvecy_method_mul_xvecy(ConstSpanU8 xvec, ConstSpanU8 me return res; } -NODISCARD VecU8 generate_xvecy_method_and_one(ConstSpanU8 xvec, int n) { +NODISCARD VecU8 generate_xvecy_method_and_one(SpanU8 xvec, int n) { assert(2 <= n && n < 4); VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, n + 1); @@ -190,7 +190,7 @@ NODISCARD VecU8 generate_xvecy_method_and_one(ConstSpanU8 xvec, int n) { return res; } -NODISCARD VecU8 generate_xvecy_method_dot(ConstSpanU8 xvec, ConstSpanU8 member, int n) { +NODISCARD VecU8 generate_xvecy_method_dot(SpanU8 xvec, SpanU8 member, int n) { VecU8 res = VecU8_from_span(member); VecU8_append(&res, ' '); string_append_xvecy(&res, xvec, n); @@ -211,7 +211,7 @@ NODISCARD VecU8 generate_xvecy_method_dot(ConstSpanU8 xvec, ConstSpanU8 member, return res; } -NODISCARD VecU8 generate_xvec3_method_cross(ConstSpanU8 xvec) { +NODISCARD VecU8 generate_xvec3_method_cross(SpanU8 xvec) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, 3); VecU8_append(&res, ' '); @@ -227,7 +227,7 @@ NODISCARD VecU8 generate_xvec3_method_cross(ConstSpanU8 xvec) { } -void string_append_xmatnm(VecU8* str, ConstSpanU8 xmat, int cols, int rows) { +void string_append_xmatnm(VecU8* str, SpanU8 xmat, int cols, int rows) { VecU8_append_span(str, xmat); VecU8_append(str, '0' + cols); if (rows != cols) { @@ -237,7 +237,7 @@ void string_append_xmatnm(VecU8* str, ConstSpanU8 xmat, int cols, int rows) { } /* With columns padded to 16 bytes (for std140, std140 is our everything) */ -NODISCARD VecU8 generate_xmatnm_structure_definition(ConstSpanU8 xmat, ConstSpanU8 xvec, int cols, int rows, int sizeof_member) { +NODISCARD VecU8 generate_xmatnm_structure_definition(SpanU8 xmat, SpanU8 xvec, int cols, int rows, int sizeof_member) { int sv = (rows * sizeof_member) % 16; VecU8 res = VecU8_from_cstr("typedef struct {\n"); for (int x = 0; x < cols; x++) { @@ -269,7 +269,7 @@ void string_append_mat_el_access(VecU8* str, int x, int y) { string_append_vec_field_name(str, y); } -NODISCARD VecU8 generate_xmatnm_method_new(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int cols, int rows) { +NODISCARD VecU8 generate_xmatnm_method_new(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int cols, int rows) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, cols, rows); VecU8_append(&res, ' '); @@ -305,7 +305,7 @@ NODISCARD VecU8 generate_xmatnm_method_new(ConstSpanU8 xmat, ConstSpanU8 xvec, C return res; } -NODISCARD VecU8 generate_square_xmatnn_E_definition(ConstSpanU8 xmat, int n) { +NODISCARD VecU8 generate_square_xmatnn_E_definition(SpanU8 xmat, int n) { VecU8 res = VecU8_from_cstr("const "); string_append_xmatnm(&res, xmat, n, n); VecU8_append(&res, ' '); @@ -327,7 +327,7 @@ NODISCARD VecU8 generate_square_xmatnn_E_definition(ConstSpanU8 xmat, int n) { return res; } -NODISCARD VecU8 generate_xmatnm_method_add_xmatnm(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int cols, int rows) { +NODISCARD VecU8 generate_xmatnm_method_add_xmatnm(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int cols, int rows) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, cols, rows); VecU8_append(&res, ' '); @@ -358,7 +358,7 @@ NODISCARD VecU8 generate_xmatnm_method_add_xmatnm(ConstSpanU8 xmat, ConstSpanU8 return res; } -NODISCARD VecU8 generate_xmatnm_method_minus_xmatnm(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int cols, int rows) { +NODISCARD VecU8 generate_xmatnm_method_minus_xmatnm(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int cols, int rows) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, cols, rows); VecU8_append(&res, ' '); @@ -389,7 +389,7 @@ NODISCARD VecU8 generate_xmatnm_method_minus_xmatnm(ConstSpanU8 xmat, ConstSpanU return res; } -NODISCARD VecU8 generate_xmatnm_method_minus(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int cols, int rows) { +NODISCARD VecU8 generate_xmatnm_method_minus(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int cols, int rows) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, cols, rows); VecU8_append(&res, ' '); @@ -412,7 +412,7 @@ NODISCARD VecU8 generate_xmatnm_method_minus(ConstSpanU8 xmat, ConstSpanU8 xvec, return res; } -NODISCARD VecU8 generate_xmatnm_method_mul_scal(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int cols, int rows) { +NODISCARD VecU8 generate_xmatnm_method_mul_scal(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int cols, int rows) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, cols, rows); VecU8_append(&res, ' '); @@ -437,7 +437,7 @@ NODISCARD VecU8 generate_xmatnm_method_mul_scal(ConstSpanU8 xmat, ConstSpanU8 xv return res; } -NODISCARD VecU8 generate_xmatnm_method_div_by_scal(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int cols, int rows) { +NODISCARD VecU8 generate_xmatnm_method_div_by_scal(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int cols, int rows) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, cols, rows); VecU8_append(&res, ' '); @@ -452,7 +452,7 @@ NODISCARD VecU8 generate_xmatnm_method_div_by_scal(ConstSpanU8 xmat, ConstSpanU8 return res; } -NODISCARD VecU8 generate_xmatnm_method_mul_xvecn(ConstSpanU8 xmat, ConstSpanU8 xvec, int n, int m) { +NODISCARD VecU8 generate_xmatnm_method_mul_xvecn(SpanU8 xmat, SpanU8 xvec, int n, int m) { VecU8 res = VecU8_new(); string_append_xvecy(&res, xvec, m); VecU8_append(&res, ' '); @@ -483,7 +483,7 @@ NODISCARD VecU8 generate_xmatnm_method_mul_xvecn(ConstSpanU8 xmat, ConstSpanU8 x return res; } -NODISCARD VecU8 generate_xmatnm_method_mul_xmatkn(ConstSpanU8 xmat, int n, int m, int k) { +NODISCARD VecU8 generate_xmatnm_method_mul_xmatkn(SpanU8 xmat, int n, int m, int k) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, k, m); VecU8_append(&res, ' '); @@ -521,7 +521,7 @@ NODISCARD VecU8 generate_xmatnm_method_mul_xmatkn(ConstSpanU8 xmat, int n, int m return res; } -VecU8 generate_xmatnm_method_transpose(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int n, int m) { +VecU8 generate_xmatnm_method_transpose(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int n, int m) { VecU8 res = VecU8_new(); string_append_xmatnm(&res, xmat, m, n); VecU8_append(&res, ' '); @@ -548,7 +548,7 @@ VecU8 generate_xmatnm_method_transpose(ConstSpanU8 xmat, ConstSpanU8 xvec, Const return res; } -NODISCARD VecU8 generate_xvec234_structs_and_important_methods(ConstSpanU8 xvec, ConstSpanU8 member) { +NODISCARD VecU8 generate_xvec234_structs_and_important_methods(SpanU8 xvec, SpanU8 member) { VecU8 res = VecU8_new(); for (int cc = 2; cc <= 4; cc++) { VecU8_append_vec(&res, generate_xvecy_struct_definition(xvec, member, cc)); @@ -559,7 +559,7 @@ NODISCARD VecU8 generate_xvec234_structs_and_important_methods(ConstSpanU8 xvec, return res; } -NODISCARD VecU8 generate_xvec234_structs_and_methods(ConstSpanU8 xvec, ConstSpanU8 member) { +NODISCARD VecU8 generate_xvec234_structs_and_methods(SpanU8 xvec, SpanU8 member) { VecU8 res = generate_xvec234_structs_and_important_methods(xvec, member); for (int cc = 2; cc <= 4; cc++) { VecU8_append_vec(&res, generate_xvecy_method_mul_scal(xvec, member, cc)); @@ -573,7 +573,7 @@ NODISCARD VecU8 generate_xvec234_structs_and_methods(ConstSpanU8 xvec, ConstSpan return res; } -NODISCARD VecU8 generate_xmat234x234_structs_and_methods(ConstSpanU8 xmat, ConstSpanU8 xvec, ConstSpanU8 member, int sizeof_member) { +NODISCARD VecU8 generate_xmat234x234_structs_and_methods(SpanU8 xmat, SpanU8 xvec, SpanU8 member, int sizeof_member) { VecU8 res = VecU8_new(); for (int cols = 2; cols <= 4; cols++) { for (int rows = 2; rows <= 4; rows++) { diff --git a/src/l2/codegen/pixel_masses.h b/src/l2/codegen/pixel_masses.h index 96ccd01..5777d64 100644 --- a/src/l2/codegen/pixel_masses.h +++ b/src/l2/codegen/pixel_masses.h @@ -3,14 +3,14 @@ #include "../../l1/codegen/codegen.h" -void VecU8_append_resoftexdatat(VecU8* str, ConstSpanU8 texdatat) { +void VecU8_append_resoftexdatat(VecU8* str, SpanU8 texdatat) { VecU8_append_span(str, cstr("Result")); VecU8_append_span(str, texdatat); - VecU8_append_span(str, cstr("OrConstSpanU8")); + VecU8_append_span(str, cstr("OrSpanU8")); } /* Used to generate both _at() and _cat() methods */ -VecU8 generate_texture_data_method_at(ConstSpanU8 texdatat, ConstSpanU8 member, bool const_access) { +VecU8 generate_texture_data_method_at(SpanU8 texdatat, SpanU8 member, bool const_access) { VecU8 res = VecU8_from_span(member); VecU8_append_span(&res, cstr("* ")); VecU8_append_span(&res, texdatat); @@ -25,7 +25,7 @@ VecU8 generate_texture_data_method_at(ConstSpanU8 texdatat, ConstSpanU8 member, return res; } -VecU8 generate_texture_data_struct_and_necc_methods(ConstSpanU8 texdatat, ConstSpanU8 member) { +VecU8 generate_texture_data_struct_and_necc_methods(SpanU8 texdatat, SpanU8 member) { VecU8 res = VecU8_from_cstr("typedef struct {\n" SPACE4); VecU8_append_vecoft(&res, member); VecU8_append_span(&res, cstr(" pixels;\n" SPACE4 "size_t width;\n} ")); @@ -99,13 +99,13 @@ VecU8 generate_texture_data_struct_and_necc_methods(ConstSpanU8 texdatat, ConstS VecU8_append_span(&res, cstr("* self, const char* path) {\n" SPACE4 "VecU8 data = ")); VecU8_append_span(&res, texdatat); VecU8_append_span(&res, cstr("_to_bitmap_text(self);\n" - SPACE4 "write_whole_file_or_abort(path, VecU8_to_ConstSpanU8(&data));\n" + SPACE4 "write_whole_file_or_abort(path, VecU8_to_SpanU8(&data));\n" SPACE4 "VecU8_drop(data);\n" "}\n\n")); - /* Result stucture */ + /* Result stucture */ VecU8_append_span(&res, cstr("typedef struct {\n" SPACE4 "Result_variant variant;\n" SPACE4 "union {\n" SPACE8 )); VecU8_append_span(&res, texdatat); - VecU8_append_span(&res, cstr(" ok;\n" SPACE4 SPACE4 "ConstSpanU8 err;\n" SPACE4 "};\n} ")); + VecU8_append_span(&res, cstr(" ok;\n" SPACE4 SPACE4 "SpanU8 err;\n" SPACE4 "};\n} ")); VecU8_append_resoftexdatat(&res, texdatat); VecU8_append_span(&res, cstr(";\n\n")); /* Method _from_bitmap_text() @@ -114,7 +114,7 @@ VecU8 generate_texture_data_struct_and_necc_methods(ConstSpanU8 texdatat, ConstS VecU8_append_resoftexdatat(&res, texdatat); VecU8_append(&res, ' '); VecU8_append_span(&res, texdatat); - VecU8_append_span(&res, cstr("_from_bitmap_text(ConstSpanU8 text) {\n" + VecU8_append_span(&res, cstr("_from_bitmap_text(SpanU8 text) {\n" SPACE4 "if (text.len < 8)\n" SPACE4 SPACE4 "return (")); VecU8_append_resoftexdatat(&res, texdatat); @@ -122,9 +122,9 @@ VecU8 generate_texture_data_struct_and_necc_methods(ConstSpanU8 texdatat, ConstS ".err = cstr(\"No header *crying emoji*\")};\n" SPACE4 "size_t width = 0, height = 0;\n" SPACE4 "for (int i = 0; i < 4; i++)\n" - SPACE4 SPACE4 "width |= (((size_t)*ConstSpanU8_at(text, 0 + i)) << (8 * i));\n" + SPACE4 SPACE4 "width |= (((size_t)*SpanU8_at(text, 0 + i)) << (8 * i));\n" SPACE4 "for (int i = 0; i < 4; i++)\n" - SPACE4 SPACE4 "height |= (((size_t)*ConstSpanU8_at(text, 4 + i)) << (8 * i));\n" + SPACE4 SPACE4 "height |= (((size_t)*SpanU8_at(text, 4 + i)) << (8 * i));\n" SPACE4 "if (SIZE_MAX / width / height < 100 || UINT32_MAX / width < 10 || UINT32_MAX / height < 10)\n" SPACE4 SPACE4 "return (")); VecU8_append_resoftexdatat(&res, texdatat); @@ -155,10 +155,10 @@ VecU8 generate_texture_data_struct_and_necc_methods(ConstSpanU8 texdatat, ConstS VecU8_append_resoftexdatat(&res, texdatat); VecU8_append_span(&res, cstr(" res = ")); VecU8_append_span(&res, texdatat); - VecU8_append_span(&res, cstr("_from_bitmap_text(VecU8_to_ConstSpanU8(&data));\n" + VecU8_append_span(&res, cstr("_from_bitmap_text(VecU8_to_SpanU8(&data));\n" SPACE4 "if (res.variant != Result_Ok) {\n" SPACE8 "fprintf(stderr, \"Tried loading bitmap texture from file, but encountered decoding error: \");\n" - SPACE8 "ConstSpanU8_fprint(res.err, stderr);\n" + SPACE8 "SpanU8_fprint(res.err, stderr);\n" SPACE8 "abortf(\"\\n\");\n" SPACE4 "}\n" SPACE4 "VecU8_drop(data);\n" SPACE4 "return res.ok;\n}\n\n")); /* Method _is_inside() */ VecU8_append_span(&res, cstr("bool ")); @@ -176,8 +176,7 @@ void generate_pixel_masses_header() { VecU8_append_span(&res, cstr("#include \"geom.h\"\n\n")); VecU8_append_span(&res, cstr("#include \"../../src/l1/core/VecSpan_int_primitives.h\"\n\n")); VecU8_append_span(&res, cstr("#include \"../../src/l1/system/fileio.h\"\n\n")); - VecU8_append_vec(&res, generate_type_triv_methods_and_vec(cstr("cvec3"))); - VecU8_append_vec(&res, generate_type_triv_methods_and_vec(cstr("cvec4"))); + /// todo: include generated (by l2/codegen) headers with cvec3,4 Vec VecU8_append_vec(&res, generate_texture_data_struct_and_necc_methods(cstr("TextureDataR8"), cstr("U8"))); VecU8_append_vec(&res, generate_texture_data_struct_and_necc_methods(cstr("TextureDataR8G8B8"), cstr("cvec3"))); VecU8_append_vec(&res, generate_texture_data_struct_and_necc_methods(cstr("TextureDataR8G8B8A8"), cstr("cvec4")));