summaryrefslogtreecommitdiff
path: root/czzc/table.lua
diff options
context:
space:
mode:
Diffstat (limited to 'czzc/table.lua')
-rw-r--r--czzc/table.lua33
1 files changed, 33 insertions, 0 deletions
diff --git a/czzc/table.lua b/czzc/table.lua
new file mode 100644
index 0000000..bb34f2f
--- /dev/null
+++ b/czzc/table.lua
@@ -0,0 +1,33 @@
+local M = {}
+
+-- shallow copies a table, dst optional.
+M.copy = function(src, dst)
+ dst = dst or {}
+ for k, v in pairs(src) do
+ dst[k] = v
+ end
+ return dst
+end
+
+-- recursively copies a table, dst optional.
+-- might implode for infinitely nested tables.
+M.deepcopy = function(src, dst)
+ dst = dst or {}
+ -- convenience.
+ if type(src) ~= "table" then return src end
+ for k, v in pairs(src) do
+ dst[k] = M.deepcopy(v)
+ end
+ return dst
+end
+
+-- replaces all values of a table with fn(value).
+M.map = function(fn, tbl)
+ local res = M.copy(tbl)
+ for k, v in pairs(tbl) do
+ res[k] = fn(v)
+ end
+ return res
+end
+
+return M