comparison ReAction.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
9 LoadAddOn("LibKeyBound-1.0") 9 LoadAddOn("LibKeyBound-1.0")
10 LKB = LibStub("LibKeyBound-1.0") 10 LKB = LibStub("LibKeyBound-1.0")
11 end 11 end
12 12
13 ------ Utility ------ 13 ------ Utility ------
14 local tcopy 14 -- make a deep copy of a table
15 do 15 local function tcopy(x)
16 function tcopy(x) 16 if type(x) ~= "table" then
17 if type(x) ~= "table" then 17 return x
18 return x 18 end
19 end 19 local r = {}
20 local r = {} 20 for k,v in pairs(x) do
21 for k,v in pairs(x) do 21 r[k] = tcopy(v)
22 r[k] = tcopy(v) 22 end
23 end 23 return r
24 return r 24 end
25 end 25
26 end 26 -- traverse a table tree by key list and fetch the result or first nil
27 local function tfetch(t, ...)
28 for i = 1, select('#', ...) do
29 t = t and t[select(i, ...)]
30 end
31 return t
32 end
33
34 -- traverse a table tree by key list and build tree as necessary
35 local function tbuild(t, ...)
36 for i = 1, select('#', ...) do
37 local key = select(i, ...)
38 if not t[key] then t[key] = { } end
39 t = t[key]
40 end
41 return t
42 end
43
44 -- return a new array of keys of table 't', sorted by comparing
45 -- sub-fields (obtained via tfetch) of the table values
46 local function fieldsort( t, ... )
47 local r = { }
48 for k in pairs(t) do
49 table.insert(r,k)
50 end
51 local path = { ... }
52 table.sort(r, function(lhs, rhs)
53 local olhs = tfetch(t[lhs], unpack(path)) or 0
54 local orhs = tfetch(t[rhs], unpack(path)) or 0
55 return olhs < orhs
56 end)
57 return r
58 end
59
60 -- store in the addon table
61 addonTable.tcopy = tcopy
62 addonTable.tfetch = tfetch
63 addonTable.tbuild = tbuild
64 addonTable.fieldsort = fieldsort
27 65
28 ------ Core ------ 66 ------ Core ------
29 local ReAction = LibStub("AceAddon-3.0"):NewAddon( "ReAction", 67 local ReAction = LibStub("AceAddon-3.0"):NewAddon( "ReAction",
30 "AceEvent-3.0" 68 "AceEvent-3.0"
31 ) 69 )