projects
/
prosody.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
96611a6
)
util.array: Improve array:reverse() and make it work as both method and non-mutating...
author
Kim Alvefur
<zash@zash.se>
Sun, 6 Oct 2013 21:18:54 +0000
(23:18 +0200)
committer
Kim Alvefur
<zash@zash.se>
Sun, 6 Oct 2013 21:18:54 +0000
(23:18 +0200)
util/array.lua
patch
|
blob
|
history
diff --git
a/util/array.lua
b/util/array.lua
index 9bf215af72c9d73b0b09e1fb31ccaf95fa8a6f4a..6f2abe0471814a84dee908cf280cc31ae41ce858 100644
(file)
--- a/
util/array.lua
+++ b/
util/array.lua
@@
-11,6
+11,7
@@
local t_insert, t_sort, t_remove, t_concat
local setmetatable = setmetatable;
local math_random = math.random;
local setmetatable = setmetatable;
local math_random = math.random;
+local math_floor = math.floor;
local pairs, ipairs = pairs, ipairs;
local tostring = tostring;
local pairs, ipairs = pairs, ipairs;
local tostring = tostring;
@@
-84,6
+85,25
@@
function array_base.pluck(outa, ina, key)
return outa;
end
return outa;
end
+function array_base.reverse(outa, ina)
+ local len = #ina;
+ if ina == outa then
+ local middle = math_floor(len/2);
+ len = len + 1;
+ local o; -- opposite
+ for i = 1, middle do
+ o = len - i;
+ outa[i], outa[o] = outa[o], outa[i];
+ end
+ else
+ local off = len + 1;
+ for i = 1, len do
+ outa[i] = ina[off - i];
+ end
+ end
+ return outa;
+end
+
--- These methods only mutate the array
function array_methods:shuffle(outa, ina)
local len = #self;
--- These methods only mutate the array
function array_methods:shuffle(outa, ina)
local len = #self;
@@
-94,15
+114,6
@@
function array_methods:shuffle(outa, ina)
return self;
end
return self;
end
-function array_methods:reverse()
- local len = #self-1;
- for i=len,1,-1 do
- self:push(self[i]);
- self:pop(i);
- end
- return self;
-end
-
function array_methods:append(array)
local len,len2 = #self, #array;
for i=1,len2 do
function array_methods:append(array)
local len,len2 = #self, #array;
for i=1,len2 do