diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-04-26 13:39:13 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-04-26 14:18:06 +0300 |
commit | 22dbd9c5bf56b083311431bb11fb2d988740e3b8 (patch) | |
tree | 0ffe4b274215688c2a66a639bdd924071857f47d | |
parent | a56c4cadafcda273706203d2bc12145a8294409b (diff) | |
download | aconf-22dbd9c5bf56b083311431bb11fb2d988740e3b8.tar.bz2 aconf-22dbd9c5bf56b083311431bb11fb2d988740e3b8.tar.xz |
ipairs function for TreeNode objects
-rw-r--r-- | acf/model/node.lua | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/acf/model/node.lua b/acf/model/node.lua index 7852c9e..8028bcb 100644 --- a/acf/model/node.lua +++ b/acf/model/node.lua @@ -156,11 +156,23 @@ validate = meta_func('validate') local rawpairs = pairs +local rawipairs = ipairs function pairs(tbl) if not object.isinstance(tbl, TreeNode) then return rawpairs(tbl) end local mt = getmetatable(tbl) local res = {} - for _, member in ipairs(mt.members()) do res[member] = mt.load(member) end + for _, member in rawipairs(mt.members()) do res[member] = mt.load(member) end return rawpairs(res) end + +local function _ipairs(mt, i) + i = i + 1 + local v = mt.load(i) + if v == nil then return end + return i, v +end +function ipairs(tbl) + if not object.isinstance(tbl, TreeNode) then return rawipairs(tbl) end + return _ipairs, getmetatable(tbl), 0 +end |