From 58679a328b51b36fb61824dcb7c782fa6b12e4b8 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Sat, 14 Mar 2009 17:19:47 +0100 Subject: [PATCH] otable: Lua implementation Signed-off-by: Julien Danjou --- lib/otable.lua.in | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/otable.lua.in diff --git a/lib/otable.lua.in b/lib/otable.lua.in new file mode 100644 index 000000000..a79a76d51 --- /dev/null +++ b/lib/otable.lua.in @@ -0,0 +1,38 @@ +---------------------------------------------------------------------------- +-- @author Julien Danjou <julien@danjou.info> +-- @copyright 2009 Julien Danjou +-- @release @AWESOME_VERSION@ +---------------------------------------------------------------------------- + +local setmetatable = setmetatable +local pairs = pairs +local rawset = rawset + +--- Special object table +module("otable") + +local function newindex(t, k, v) + for tk, tv in pairs(t) do + if tk == k then + rawset(t, tk, v) + return + end + end + rawset(t, k, v) +end + +local function index(t, k) + for tk, tv in pairs(t) do + if tk == k then + return tv + end + end +end + +local function new() + return setmetatable({}, { __newindex = newindex, __index = index }) +end + +setmetatable(_M, { __call = new }) + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80