From eb236df735baac851d2b0cd49f127728e2dcd52b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Fri, 15 Apr 2022 19:32:05 +0200 Subject: [PATCH] Add converters --- protogen.lua | 58 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/protogen.lua b/protogen.lua index 9b98280..270ee17 100755 --- a/protogen.lua +++ b/protogen.lua @@ -122,6 +122,8 @@ end -- numeric types +local numeric_types = {} + local function emit_vector(type, l) local name = "v" .. l .. type local box = "aabb" .. l .. type @@ -135,15 +137,6 @@ local function emit_vector(type, l) local typedef, equals, add, sub, clamp, cmp, scale, mix, write, read, send, recv = "", "", "", "", "", "", "", "", "", "", "", "" - typedef = typedef .. "\t" .. type .. " " - equals = equals .. "\treturn " - add = add .. "\treturn (" .. name .. ") {" - sub = sub .. "\treturn (" .. name .. ") {" - clamp = clamp .. "\treturn (" .. name .. ") {" - cmp = cmp .. "\tint i;\n" - scale = scale .. "\treturn (" .. name .. ") {" - mix = mix .. "\treturn (" .. name .. ") {" - for i, c in ipairs(vector_components[l]) do local last = i == l @@ -224,17 +217,17 @@ local function emit_vector(type, l) .. "\tif (!" .. type .. "_recv(peer, &val->" .. c .. "))\n\t\treturn false;\n" end - emit_h("typedef struct {\n" .. typedef .. "} " .. struct_prefix .. name .. ";\n") + emit_h("typedef struct {\n\t" .. type .. " " .. typedef .. "} " .. struct_prefix .. name .. ";\n") - emit(export_prefix .. "bool " .. name .. "_equals(" .. name .. " a, " .. name .. " b)", "{\n" .. equals .. "}\n\n") - emit(export_prefix .. name .. " " .. name .. "_add(" .. name .. " a, " .. name .. " b)", "{\n" .. add .. "}\n\n") - emit(export_prefix .. name .. " " .. name .. "_sub(" .. name .. " a, " .. name .. " b)", "{\n" .. add .. "}\n\n") - emit(export_prefix .. name .. " " .. name .. "_clamp(" .. name .. " val, " .. name .. " min, " .. name .. " max)", "{\n" .. clamp .. "}\n\n") - emit(export_prefix .. "int " .. name .. "_cmp(const void *a, const void *b)", "{\n" .. cmp .. "\treturn 0;\n}\n\n") - emit(export_prefix .. name .. " " .. name .. "_scale(" .. name .. " v, " .. type .. " s)", "{\n" .. scale .. "}\n\n") + emit(export_prefix .. "bool " .. name .. "_equals(" .. name .. " a, " .. name .. " b)", "{\n\treturn " .. equals .. "}\n\n") + emit(export_prefix .. name .. " " .. name .. "_add(" .. name .. " a, " .. name .. " b)", "{\n\treturn (" .. name .. ") {" .. add .. "}\n\n") + emit(export_prefix .. name .. " " .. name .. "_sub(" .. name .. " a, " .. name .. " b)", "{\n\treturn (" .. name .. ") {" .. add .. "}\n\n") + emit(export_prefix .. name .. " " .. name .. "_clamp(" .. name .. " val, " .. name .. " min, " .. name .. " max)", "{\n\treturn (" .. name .. ") {" .. clamp .. "}\n\n") + emit(export_prefix .. "int " .. name .. "_cmp(const void *a, const void *b)", "{\n\tint i;\n" .. cmp .. "\treturn 0;\n}\n\n") + emit(export_prefix .. name .. " " .. name .. "_scale(" .. name .. " v, " .. type .. " s)", "{\n\treturn (" .. name .. ") {" .. scale .. "}\n\n") if type:sub(1, 1) == "f" then - emit(export_prefix .. name .. " " .. name .. "_mix(" .. name .. " a, " .. name .. " b, " .. type .. " f)", "{\n" .. mix .. "}\n\n") + emit(export_prefix .. name .. " " .. name .. "_mix(" .. name .. " a, " .. name .. " b, " .. type .. " f)", "{\n\treturn (" .. name .. ") {" .. mix .. "}\n\n") end emit(export_prefix .. "void " .. name .. "_write(Blob *buffer, " .. name .. " *val)", "{\n" .. write .. "}\n\n") @@ -262,6 +255,7 @@ end local function emit_numeric(class, bits, alias) local name = class .. bits + table.insert(numeric_types, name) existing_types[name] = true has_deallocator[name] = false @@ -316,6 +310,36 @@ for i = 0, 3 do end end +local converters = {} + +for l = 2, 4 do + converters[l] = "" + + for i, c in ipairs(vector_components[l]) do + converters[l] = converters[l] + .. "v." .. c .. + ((i == l) + and "};\n" + or ", " + ) + end +end + +for _, from in ipairs(numeric_types) do + for _, to in ipairs(numeric_types) do + if from ~= to then + for i = 2, 4 do + local v_from = "v" .. i .. from + local v_to = "v" .. i .. to + + emit(export_prefix .. v_to .. " " .. v_from .. "_to_" .. to .. "(" .. v_from .. " v)", "{\n\treturn (" .. v_to .. ") {" .. converters[i] .. "}\n\n") + end + end + end +end + +emit_h("\n") + -- string existing_types.String = true -- 2.44.0