New, faster, stanza serialization
[prosody.git] / util / multitable.lua
index f586330efebd5ecbe92c3fd8c041b32d007859f2..1e22c4dddef38a99095d4fa4ad445d9a47d90ad5 100644 (file)
@@ -22,6 +22,7 @@
 local select = select;
 local t_insert = table.insert;
 local pairs = pairs;
+local next = next;
 
 module "multitable"
 
@@ -43,7 +44,7 @@ local function add(self, ...)
                if not tab then tab = {}; t[key] = tab; end
                t = tab;
        end
-       t_insert(t, select(count, ...));
+       t_insert(t, (select(count, ...)));
 end
 
 local function r(t, n, _end, ...)
@@ -55,10 +56,19 @@ local function r(t, n, _end, ...)
        end
        local k = select(n, ...);
        if k then
-               r(t[k], n+1, _end, ...);
+               v = t[k];
+               if v then
+                       r(v, n+1, _end, ...);
+                       if not next(v) then
+                               t[k] = nil;
+                       end
+               end
        else
                for _,b in pairs(t) do
                        r(b, n+1, _end, ...);
+                       if not next(b) then
+                               t[_] = nil;
+                       end
                end
        end
 end