diff options
author | Matthew Wild <mwild1@gmail.com> | 2009-10-05 17:57:59 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2009-10-05 17:57:59 +0100 |
commit | ae795496e307f5f162231af2bbc98a2828482698 (patch) | |
tree | 67c29436216c0e2fe8e472d19d88081cce1cc5f4 /util/array.lua | |
parent | 6fa482aafafe1eb58bcb5c520652e16938dcfd06 (diff) | |
parent | 59c937eb4308af90eb88dd4f82c328084191aff2 (diff) | |
download | prosody-ae795496e307f5f162231af2bbc98a2828482698.tar.gz prosody-ae795496e307f5f162231af2bbc98a2828482698.zip |
Merge with 0.5
Diffstat (limited to 'util/array.lua')
-rw-r--r-- | util/array.lua | 15 |
1 files changed, 13 insertions, 2 deletions
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 |