Software /
code /
prosody
Comparison
util/multitable.lua @ 840:ad842df925c7
util.multitable: Add mt:search(), use nil for wildcard keys
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 26 Feb 2009 16:55:46 +0000 |
parent | 760:90ce865eebd8 |
child | 896:2c0b9e3c11c3 |
comparison
equal
deleted
inserted
replaced
839:c45b5072f773 | 840:ad842df925c7 |
---|---|
80 end | 80 end |
81 r(self.data, 1, _end, ...); | 81 r(self.data, 1, _end, ...); |
82 end | 82 end |
83 | 83 |
84 | 84 |
85 local function s(t, n, results, _end, ...) | |
86 if t == nil then return; end | |
87 local k = select(n, ...); | |
88 if n == _end then | |
89 if k == nil then | |
90 for _, v in pairs(t) do | |
91 t_insert(results, v); | |
92 end | |
93 else | |
94 t_insert(results, t[k]); | |
95 end | |
96 return; | |
97 end | |
98 if k then | |
99 v = t[k]; | |
100 if v then | |
101 s(v, n+1, results, _end, ...); | |
102 end | |
103 else | |
104 for _,b in pairs(t) do | |
105 s(b, n+1, results, _end, ...); | |
106 end | |
107 end | |
108 end | |
109 | |
110 -- Search for keys, nil == wildcard | |
111 local function search(self, ...) | |
112 local _end = select('#', ...); | |
113 for n = _end,1 do | |
114 if select(n, ...) then _end = n; break; end | |
115 end | |
116 local results = {}; | |
117 s(self.data, 1, results, _end, ...); | |
118 return results; | |
119 end | |
120 | |
121 -- Append results to an existing list | |
122 local function search_add(self, results, ...) | |
123 if not results then results = {}; end | |
124 local _end = select('#', ...); | |
125 for n = _end,1 do | |
126 if select(n, ...) then _end = n; break; end | |
127 end | |
128 s(self.data, 1, results, _end, ...); | |
129 return results; | |
130 end | |
131 | |
85 function new() | 132 function new() |
86 return { | 133 return { |
87 data = {}; | 134 data = {}; |
88 get = get; | 135 get = get; |
89 add = add; | 136 add = add; |
90 set = set; | 137 set = set; |
91 remove = remove; | 138 remove = remove; |
139 search = search; | |
140 search_add = search_add; | |
92 }; | 141 }; |
93 end | 142 end |
94 | 143 |
95 return _M; | 144 return _M; |