change DeepCopy(table) to DeepCopy(from,to)

This commit is contained in:
Glenn Maynard
2006-10-15 01:36:50 +00:00
parent f3c949486e
commit f7bb9fe3a4
+24 -12
View File
@@ -62,24 +62,36 @@ function Serialize(t)
end end
-- Recursively deep-copy a table. -- Recursively deep-copy a table.
function DeepCopy(t, already_copied) function DeepCopy(From, To, already_copied)
if not To then To = {} end
already_copied = already_copied or { } already_copied = already_copied or { }
already_copied[From] = To
if type(t) ~= "table" then for a, b in pairs(From) do
return t local aCopy, bCopy
if type(a) ~= "table" then
aCopy = a
elseif already_copied[a] then
aCopy = already_copied[a]
else
aCopy = {}
DeepCopy( a, aCopy, already_copied )
end end
if already_copied[t] then if type(b) ~= "table" then
return already_copied[t] bCopy = b
end elseif already_copied[b] then
already_copied[t] = { } bCopy = already_copied[b]
local ret = already_copied[t] else
bCopy = {}
for a, b in pairs(t) do DeepCopy( b, bCopy, already_copied )
ret[a] = DeepCopy( b, already_copied )
end end
return ret To[aCopy] = bCopy
end
return To
end end
-- (c) 2005 Glenn Maynard -- (c) 2005 Glenn Maynard