Mercurial > wow > reaction
comparison classes/State.lua @ 241:09c8e9baa35a
Collect table utility functions
| author | Flick |
|---|---|
| date | Fri, 25 Mar 2011 16:50:43 -0700 |
| parents | 98d7ad4a1158 |
| children | b56cff349bd6 |
comparison
equal
deleted
inserted
replaced
| 240:98d7ad4a1158 | 241:09c8e9baa35a |
|---|---|
| 9 local L = ReAction.L | 9 local L = ReAction.L |
| 10 local _G = _G | 10 local _G = _G |
| 11 local format = string.format | 11 local format = string.format |
| 12 local InCombatLockdown = InCombatLockdown | 12 local InCombatLockdown = InCombatLockdown |
| 13 local RegisterStateDriver = RegisterStateDriver | 13 local RegisterStateDriver = RegisterStateDriver |
| 14 local tfetch = addonTable.tfetch | |
| 15 local tbuild = addonTable.tbuild | |
| 14 | 16 |
| 15 -- module declaration | 17 -- module declaration |
| 16 local moduleID = "State" | 18 local moduleID = "State" |
| 17 local module = ReAction:NewModule( moduleID, "AceEvent-3.0" ) | 19 local module = ReAction:NewModule( moduleID, "AceEvent-3.0" ) |
| 18 | 20 |
| 19 -- Utility -- | 21 -- Utility -- |
| 20 | 22 |
| 21 -- traverse a table tree by key list and fetch the result or first nil | |
| 22 local function tfetch(t, ...) | |
| 23 for i = 1, select('#', ...) do | |
| 24 t = t and t[select(i, ...)] | |
| 25 end | |
| 26 return t | |
| 27 end | |
| 28 | |
| 29 -- traverse a table tree by key list and build tree as necessary | |
| 30 local function tbuild(t, ...) | |
| 31 for i = 1, select('#', ...) do | |
| 32 local key = select(i, ...) | |
| 33 if not t[key] then t[key] = { } end | |
| 34 t = t[key] | |
| 35 end | |
| 36 return t | |
| 37 end | |
| 38 | |
| 39 -- return a new array of keys of table 't', sorted by comparing | |
| 40 -- sub-fields (obtained via tfetch) of the table values | |
| 41 local function fieldsort( t, ... ) | |
| 42 local r = { } | |
| 43 for k in pairs(t) do | |
| 44 table.insert(r,k) | |
| 45 end | |
| 46 local path = { ... } | |
| 47 table.sort(r, function(lhs, rhs) | |
| 48 local olhs = tfetch(t[lhs], unpack(path)) or 0 | |
| 49 local orhs = tfetch(t[rhs], unpack(path)) or 0 | |
| 50 return olhs < orhs | |
| 51 end) | |
| 52 return r | |
| 53 end | |
| 54 | 23 |
| 55 | 24 |
| 56 local ApplyStates, CleanupStates, SetProperty, GetProperty | 25 local ApplyStates, CleanupStates, SetProperty, GetProperty |
| 57 | 26 |
| 58 -- PRIVATE -- | 27 -- PRIVATE -- |
