From f94a89ae999e9c87c94d0f7e3dae3a2f222d526e Mon Sep 17 00:00:00 2001 From: godotg Date: Mon, 29 Jan 2024 18:58:09 +0800 Subject: [PATCH] perf[lua]: convert the array or map of Lua to a normal output string --- .../serializer/lua/GenerateLuaUtils.java | 15 +++++---------- protocol/src/main/resources/lua/ByteBuffer.lua | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java index 14362e44..9fe898ad 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java @@ -276,14 +276,7 @@ public abstract class GenerateLuaUtils { var params = new ArrayList(); for (var field : sequencedFields) { var fieldName = field.getName(); - var fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; - if ((fieldRegistration instanceof ArrayField) || (fieldRegistration instanceof ListField)) { - params.add(StringUtils.format("{}:[%s]", fieldName)); - } else if (fieldRegistration instanceof MapField) { - params.add(StringUtils.format("{}:{%s}", fieldName)); - } else { - params.add(StringUtils.format("{}:%s", fieldName)); - } + params.add(StringUtils.format("{}:%s", fieldName)); } luaBuilder.append(StringUtils.joinWith(", ", params.toArray())); luaBuilder.append("}"); @@ -303,8 +296,10 @@ public abstract class GenerateLuaUtils { for (var field : sequencedFields) { var fieldName = field.getName(); var fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; - if ((fieldRegistration instanceof ArrayField) || (fieldRegistration instanceof ListField) || (fieldRegistration instanceof MapField)) { - params.add(StringUtils.format("table.concat(self.{}, \", \")", fieldName)); + if ((fieldRegistration instanceof ArrayField) || (fieldRegistration instanceof ListField)) { + params.add(StringUtils.format("table.arrayToString(self.{})", fieldName)); + } else if (fieldRegistration instanceof MapField) { + params.add(StringUtils.format("table.mapToString(self.{})", fieldName)); } else { params.add(StringUtils.format("self.{}", fieldName)); } diff --git a/protocol/src/main/resources/lua/ByteBuffer.lua b/protocol/src/main/resources/lua/ByteBuffer.lua index f187c710..d3865342 100644 --- a/protocol/src/main/resources/lua/ByteBuffer.lua +++ b/protocol/src/main/resources/lua/ByteBuffer.lua @@ -17,6 +17,24 @@ local ByteBuffer = {} local trueBooleanStrValue = string.char(1) local falseBooleanStrValue = string.char(0) +function table.arrayToString(array) + local items = {} + for index, element in pairs(array) do + table.insert(items, tostring(element)) + end + local result = table.concat(items, ", ") + return "[" .. result .. "]"; +end + +function table.mapToString(map) + local items = {} + for key, value in pairs(map) do + table.insert(items, key .. ":" .. value) + end + local result = table.concat(items, ", ") + return "{" .. result .. "}"; +end + -------------------------------------构造器------------------------------------- function ByteBuffer:new() --buffer里的每一个元素为一个长度为1的字符串