util/multitable.lua
changeset 650 674531bcb5c4
parent 615 4ae3e81513f3
child 758 b1885732e979
--- a/util/multitable.lua	Fri Dec 26 21:48:08 2008 +0500
+++ b/util/multitable.lua	Sat Dec 27 08:27:26 2008 +0500
@@ -47,14 +47,25 @@
 	t_insert(t, (select(count, ...)));
 end
 
+local function set(self, ...)
+	local t = self.data;
+	local count = select('#', ...);
+	for n = 1,count-2 do
+		local key = select(n, ...);
+		local tab = t[key];
+		if not tab then tab = {}; t[key] = tab; end
+		t = tab;
+	end
+	t[(select(count-1, ...))] = (select(count, ...));
+end
+
 local function r(t, n, _end, ...)
 	if t == nil then return; end
-	if n > _end then
-		for key in pairs(t) do
-			t[key] = nil;
-		end
+	local k = select(n, ...);
+	if n == _end then
+		t[k] = nil;
+		return;
 	end
-	local k = select(n, ...);
 	if k then
 		v = t[k];
 		if v then
@@ -87,6 +98,7 @@
 		data = {};
 		get = get;
 		add = add;
+		set = set;
 		remove = remove;
 	};
 end