shaved some milliseconds off split

This commit is contained in:
VorTechnix 2021-07-23 18:05:54 -07:00
parent 6e3b9d99e9
commit af07a158a8

View file

@ -42,13 +42,13 @@ function worldeditadditions.gsplit(text, pattern, plain)
end end
--- Split a string into substrings separated by a pattern. --- Split a string into substrings separated by a pattern. -- Deprecated
-- @param text string The string to iterate over -- @param text string The string to iterate over
-- @param pattern string The separator pattern -- @param pattern string The separator pattern
-- @param plain boolean If true (or truthy), pattern is interpreted as a -- @param plain boolean If true (or truthy), pattern is interpreted as a
-- plain string, not a Lua pattern -- plain string, not a Lua pattern
-- @returns table A sequence table containing the substrings -- @returns table A sequence table containing the substrings
function worldeditadditions.split(text, pattern, plain) function worldeditadditions.dsplit(text, pattern, plain)
local ret = {} local ret = {}
for match in worldeditadditions.gsplit(text, pattern, plain) do for match in worldeditadditions.gsplit(text, pattern, plain) do
table.insert(ret, match) table.insert(ret, match)
@ -62,15 +62,24 @@ end
-- @param plain boolean If true (or truthy), pattern is interpreted as a -- @param plain boolean If true (or truthy), pattern is interpreted as a
-- plain string, not a Lua pattern -- plain string, not a Lua pattern
-- @returns table A sequence table containing the substrings -- @returns table A sequence table containing the substrings
function worldeditadditions.fsplit (str,dlm,plain) function worldeditadditions.split (str,dlm,plain)
local pos, ins = 0, 0 local pos, ret = 0, {}
local ret = {} local ins, i = str:find(dlm,pos,plain)
repeat -- if plain shaves off some time in the while statement
ins = str:find(dlm,pos,plain) if plain then
table.insert(ret,str:sub(pos,ins - 1)) while ins do
pos = ins + #dlm table.insert(ret,str:sub(pos,ins - 1))
until not str:find(dlm,pos,plain) pos = ins + #dlm
print(pos..","..#str) ins = str:find(dlm,pos,true)
end
else
while ins do
table.insert(ret,str:sub(pos,ins - 1))
pos = i + 1
ins, i = str:find(dlm,pos)
end
end
-- print(pos..","..#str)
if str:sub(pos,#str) ~= "" then if str:sub(pos,#str) ~= "" then
table.insert(ret,str:sub(pos,#str)) table.insert(ret,str:sub(pos,#str))
end end