projects
/
prosody.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
util.stanza: Iterate on childtags instead of all childs.
[prosody.git]
/
util
/
array.lua
diff --git
a/util/array.lua
b/util/array.lua
index ae3a0b5bdf178f247356e093eef15c512a56f64b..6c1f04606642bc5cdb700f36e289a0aa655d319e 100644
(file)
--- a/
util/array.lua
+++ b/
util/array.lua
@@
-1,13
+1,13
@@
-- Prosody IM
-- Prosody IM
--- Copyright (C) 2008-20
09
Matthew Wild
--- Copyright (C) 2008-20
09
Waqas Hussain
+-- Copyright (C) 2008-20
10
Matthew Wild
+-- Copyright (C) 2008-20
10
Waqas Hussain
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
-local t_insert, t_sort, t_remove, t_concat
-
= table.insert, table.sort, table.remove, table.concat;
+local t_insert, t_sort, t_remove, t_concat
+ = table.insert, table.sort, table.remove, table.concat;
local array = {};
local array_base = {};
local array = {};
local array_base = {};
@@
-33,11
+33,22
@@
function array_base.map(outa, ina, func)
end
function array_base.filter(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
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
end
end
+
return outa;
end
return outa;
end
@@
-100,7
+111,6
@@
end
-- Setup methods from array_base
for method, f in pairs(array_base) do
-- Setup methods from array_base
for method, f in pairs(array_base) do
- local method = method; -- Yes, this is necessary :)
local base_method = f;
-- Setup global array method which makes new array
array[method] = function (old_a, ...)
local base_method = f;
-- Setup global array method which makes new array
array[method] = function (old_a, ...)