Mercurial > prosody-hg
comparison util/array.lua @ 1921:5ac99cd46545
util.array: Fix for array:filter() (in-place filtering)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 05 Oct 2009 17:56:31 +0100 |
| parents | dd35d07d673f |
| children | d5fe0f9b377a |
comparison
equal
deleted
inserted
replaced
| 1920:c06945b9cc52 | 1921:5ac99cd46545 |
|---|---|
| 31 end | 31 end |
| 32 return outa; | 32 return outa; |
| 33 end | 33 end |
| 34 | 34 |
| 35 function array_base.filter(outa, ina, func) | 35 function array_base.filter(outa, ina, func) |
| 36 for k,v in ipairs(ina) do | 36 local inplace, start_length = ina == outa, #ina; |
| 37 local write = 1; | |
| 38 for read=1,start_length do | |
| 39 local v = ina[read]; | |
| 37 if func(v) then | 40 if func(v) then |
| 38 outa:push(v); | 41 outa[write] = v; |
| 42 write = write + 1; | |
| 39 end | 43 end |
| 40 end | 44 end |
| 45 | |
| 46 if inplace and write < start_length then | |
| 47 for i=write,start_length do | |
| 48 outa[i] = nil; | |
| 49 end | |
| 50 end | |
| 51 | |
| 41 return outa; | 52 return outa; |
| 42 end | 53 end |
| 43 | 54 |
| 44 function array_base.sort(outa, ina, ...) | 55 function array_base.sort(outa, ina, ...) |
| 45 if ina ~= outa then | 56 if ina ~= outa then |
