X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Farray.lua;h=bbf26f3214ae4992beda62004503641df6ca04d4;hb=c74074db2b9eb54e855a73e0b6301a877cec1867;hp=ae3a0b5bdf178f247356e093eef15c512a56f64b;hpb=2eca5d2f1d4fd9e8db1784ee2277804613a12337;p=prosody.git diff --git a/util/array.lua b/util/array.lua index ae3a0b5b..bbf26f32 100644 --- a/util/array.lua +++ b/util/array.lua @@ -33,11 +33,22 @@ function array_base.map(outa, ina, func) end function array_base.filter(outa, ina, func) - for k,v in ipairs(ina) do + local inplace, start_length = ina == outa, #ina; + local write = 1; + for read=1,start_length do + local v = ina[read]; if func(v) then - outa:push(v); + outa[write] = v; + write = write + 1; + end + end + + if inplace and write < start_length then + for i=write,start_length do + outa[i] = nil; end end + return outa; end