-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
---
+--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local select = select;
local t_insert = table.insert;
-local unpack, pairs, next, type = unpack, pairs, next, type;
+local pairs, next, type = pairs, next, type;
+local unpack = table.unpack or unpack; --luacheck: ignore 113
-module "multitable"
+local _ENV = nil;
local function get(self, ...)
local t = self.data;
return results;
end
-function iter(self, ...)
+local function iter(self, ...)
local query = { ... };
local maxdepth = select("#", ...);
local stack = { self.data };
keys[depth] = key;
end
local value = stack[depth][key];
- if depth == maxdepth then -- Result
- local result = {}; -- Collect keys forming path to result
- for i = 1, depth do
- result[i] = keys[i];
- end
- return unpack(result, 1, depth);
- else
- if (query[depth] == nil or key == query[depth]) and type(value) == "table" then -- Descend
- t_insert(stack, value);
+ if query[depth] == nil or key == query[depth] then
+ if depth == maxdepth then -- Result
+ local result = {}; -- Collect keys forming path to result
+ for i = 1, depth do
+ result[i] = keys[i];
+ end
+ result[depth+1] = value;
+ return unpack(result, 1, depth+1);
+ elseif type(value) == "table" then
+ t_insert(stack, value); -- Descend
end
- return it(self);
end
+ return it(self);
end;
return it, self;
end
-function new()
+local function new()
return {
data = {};
get = get;
};
end
-return _M;
+return {
+ iter = iter;
+ new = new;
+};