comparison classes/Bar.lua @ 241:09c8e9baa35a

Collect table utility functions
author Flick
date Fri, 25 Mar 2011 16:50:43 -0700
parents 704f4a05a1d7
children b56cff349bd6
comparison
equal deleted inserted replaced
240:98d7ad4a1158 241:09c8e9baa35a
5 local _G = _G 5 local _G = _G
6 local CreateFrame = CreateFrame 6 local CreateFrame = CreateFrame
7 local floor = math.floor 7 local floor = math.floor
8 local fmod = math.fmod 8 local fmod = math.fmod
9 local format = string.format 9 local format = string.format
10 local tfetch = addonTable.tfetch
11 local fieldsort = addonTable.fieldsort
10 12
11 local LSG = LibStub("ReAction-LibShowActionGrid-1.0") 13 local LSG = LibStub("ReAction-LibShowActionGrid-1.0")
12 14
13 ---- Secure snippets ---- 15 ---- Secure snippets ----
14 local _reaction_init = 16 local _reaction_init =
142 scale = true, 144 scale = true,
143 enableAlpha = true, 145 enableAlpha = true,
144 alpha = true, 146 alpha = true,
145 } 147 }
146 148
147
148 ---- Utility functions ----
149
150 -- traverse a table tree by key list and fetch the result or first nil
151 local function tfetch(t, ...)
152 for i = 1, select('#', ...) do
153 t = t and t[select(i, ...)]
154 end
155 return t
156 end
157
158 -- traverse a table tree by key list and build tree as necessary
159 local function tbuild(t, ...)
160 for i = 1, select('#', ...) do
161 local key = select(i, ...)
162 if not t[key] then t[key] = { } end
163 t = t[key]
164 end
165 return t
166 end
167
168 -- return a new array of keys of table 't', sorted by comparing
169 -- sub-fields (obtained via tfetch) of the table values
170 local function fieldsort( t, ... )
171 local r = { }
172 for k in pairs(t) do
173 table.insert(r,k)
174 end
175 local path = { ... }
176 table.sort(r, function(lhs, rhs)
177 local olhs = tfetch(t[lhs], unpack(path)) or 0
178 local orhs = tfetch(t[rhs], unpack(path)) or 0
179 return olhs < orhs
180 end)
181 return r
182 end
183 149
184 150
185 ---- Bar class ---- 151 ---- Bar class ----
186 local Bar = { } 152 local Bar = { }
187 local frameList = { } 153 local frameList = { }