Software /
code /
prosody
Diff
util/stanza.lua @ 829:b01fd698495e
util/stanza: Added clone function
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Fri, 20 Feb 2009 02:18:07 +0500 |
parent | 776:89eb9f59993c |
child | 896:2c0b9e3c11c3 |
line wrap: on
line diff
--- a/util/stanza.lua Fri Feb 20 00:56:14 2009 +0500 +++ b/util/stanza.lua Fri Feb 20 02:18:07 2009 +0500 @@ -12,9 +12,10 @@ local t_remove = table.remove; local t_concat = table.concat; local s_format = string.format; -local s_match = string.match; +local s_match = string.match; local tostring = tostring; local setmetatable = setmetatable; +local getmetatable = getmetatable; local pairs = pairs; local ipairs = ipairs; local type = type; @@ -215,6 +216,24 @@ return stanza; end +function clone(stanza) + local lookup_table = {}; + local function _copy(object) + if type(object) ~= "table" then + return object; + elseif lookup_table[object] then + return lookup_table[object]; + end + local new_table = {}; + lookup_table[object] = new_table; + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value); + end + return setmetatable(new_table, getmetatable(object)); + end + return _copy(stanza) +end + function message(attr, body) if not body then return stanza("message", attr);