Software /
code /
prosody
Comparison
util/array.lua @ 12403:42b2713ab818
util.array: Take advantage of table.move()
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 18 Mar 2022 15:22:00 +0000 |
parent | 11787:3ae6fa901a8b |
child | 12975:d10957394a3c |
comparison
equal
deleted
inserted
replaced
12402:8deb401a21f6 | 12403:42b2713ab818 |
---|---|
6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
7 -- | 7 -- |
8 | 8 |
9 local t_insert, t_sort, t_remove, t_concat | 9 local t_insert, t_sort, t_remove, t_concat |
10 = table.insert, table.sort, table.remove, table.concat; | 10 = table.insert, table.sort, table.remove, table.concat; |
11 local t_move = require "util.table".move; | |
11 | 12 |
12 local setmetatable = setmetatable; | 13 local setmetatable = setmetatable; |
13 local getmetatable = getmetatable; | 14 local getmetatable = getmetatable; |
14 local math_random = math.random; | 15 local math_random = math.random; |
15 local math_floor = math.floor; | 16 local math_floor = math.floor; |
135 outa[idx] = nil; | 136 outa[idx] = nil; |
136 end | 137 end |
137 return outa; | 138 return outa; |
138 end | 139 end |
139 | 140 |
140 for idx = 1, 1+j-i do | 141 |
141 outa[idx] = ina[i+(idx-1)]; | 142 t_move(ina, i, j, 1, outa); |
142 end | |
143 if ina == outa then | 143 if ina == outa then |
144 for idx = 2+j-i, #outa do | 144 -- Clear (nil) remainder of range |
145 outa[idx] = nil; | 145 t_move(ina, #outa+1, #outa*2, 2+j-i, ina); |
146 end | |
147 end | 146 end |
148 return outa; | 147 return outa; |
149 end | 148 end |
150 | 149 |
151 function array_base.sort(outa, ina, ...) | 150 function array_base.sort(outa, ina, ...) |
207 end | 206 end |
208 return self; | 207 return self; |
209 end | 208 end |
210 | 209 |
211 function array_methods:append(ina) | 210 function array_methods:append(ina) |
212 local len, len2 = #self, #ina; | 211 t_move(ina, 1, #ina, #self+1, self); |
213 for i = 1, len2 do | |
214 self[len+i] = ina[i]; | |
215 end | |
216 return self; | 212 return self; |
217 end | 213 end |
218 | 214 |
219 function array_methods:push(x) | 215 function array_methods:push(x) |
220 t_insert(self, x); | 216 t_insert(self, x); |