Software /
code /
prosody
Comparison
util/multitable.lua @ 4895:36df30395c44
util.multitable: No longer use table.remove to drop elements from the stack, when key is nil immediately (on empty tables) the previous stack entry's key gets removed instead
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 19 May 2012 15:35:49 +0100 |
parent | 4894:c874dc4ccbd7 |
child | 4901:05ea6c1ae393 |
comparison
equal
deleted
inserted
replaced
4894:c874dc4ccbd7 | 4895:36df30395c44 |
---|---|
5 -- This project is MIT/X11 licensed. Please see the | 5 -- This project is MIT/X11 licensed. Please see the |
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 select = select; | 9 local select = select; |
10 local t_insert, t_remove = table.insert, table.remove; | 10 local t_insert = table.insert; |
11 local unpack, pairs, next, type = unpack, pairs, next, type; | 11 local unpack, pairs, next, type = unpack, pairs, next, type; |
12 | 12 |
13 module "multitable" | 13 module "multitable" |
14 | 14 |
15 local function get(self, ...) | 15 local function get(self, ...) |
133 local keys = { }; | 133 local keys = { }; |
134 local function it(self) | 134 local function it(self) |
135 local depth = #stack; | 135 local depth = #stack; |
136 local key = next(stack[depth], keys[depth]); | 136 local key = next(stack[depth], keys[depth]); |
137 if key == nil then -- Go up the stack | 137 if key == nil then -- Go up the stack |
138 t_remove(stack); | 138 stack[depth], keys[depth] = nil, nil; |
139 t_remove(keys); | |
140 if depth > 1 then | 139 if depth > 1 then |
141 return it(self); | 140 return it(self); |
142 end | 141 end |
143 return; -- The end | 142 return; -- The end |
144 else | 143 else |