Comparison

util/multitable.lua @ 4901:05ea6c1ae393

util.multitable: Some fixes for iter()... always match against query, and pass value after path results
author Matthew Wild <mwild1@gmail.com>
date Tue, 22 May 2012 14:31:19 +0100
parent 4895:36df30395c44
child 5776:bd0ff8ae98a8
comparison
equal deleted inserted replaced
4900:d885ca14362d 4901:05ea6c1ae393
142 return; -- The end 142 return; -- The end
143 else 143 else
144 keys[depth] = key; 144 keys[depth] = key;
145 end 145 end
146 local value = stack[depth][key]; 146 local value = stack[depth][key];
147 if depth == maxdepth then -- Result 147 if query[depth] == nil or key == query[depth] then
148 local result = {}; -- Collect keys forming path to result 148 if depth == maxdepth then -- Result
149 for i = 1, depth do 149 local result = {}; -- Collect keys forming path to result
150 result[i] = keys[i]; 150 for i = 1, depth do
151 result[i] = keys[i];
152 end
153 result[depth+1] = value;
154 return unpack(result, 1, depth+1);
155 elseif type(value) == "table" then
156 t_insert(stack, value); -- Descend
151 end 157 end
152 return unpack(result, 1, depth);
153 else
154 if (query[depth] == nil or key == query[depth]) and type(value) == "table" then -- Descend
155 t_insert(stack, value);
156 end
157 return it(self);
158 end 158 end
159 return it(self);
159 end; 160 end;
160 return it, self; 161 return it, self;
161 end 162 end
162 163
163 function new() 164 function new()