Mercurial > wow > breuesk
comparison Lists.lua @ 9:daed0597deba
Pretty printing for lists
A decision on how to index them up
Bug about reverse list maintenance fixed.
Next step noted.
author | John@Doomsday |
---|---|
date | Wed, 07 Mar 2012 14:56:25 -0500 |
parents | b05fcb225c4a |
children | 433d31ea992a |
comparison
equal
deleted
inserted
replaced
8:b05fcb225c4a | 9:daed0597deba |
---|---|
40 -- order, then the next 30 could roll into that same space and have a proper | 40 -- order, then the next 30 could roll into that same space and have a proper |
41 -- ordering. Then the next 5, etc. | 41 -- ordering. Then the next 5, etc. |
42 -- | 42 -- |
43 -- Handling conflicts: | 43 -- Handling conflicts: |
44 -- | 44 -- |
45 -- Executive decision: random on a range of [0,1], ie math.random | |
46 -- then on an add-to-end event just do last + .1 | |
47 -- disallow random after any add-to-end event occurs | |
48 -- because the list either elongates beyond 1 OR becomes | |
49 -- ridiculously bottom heavy, thus meaning that randoms | |
50 -- don't get an even distibution from then on (in fact | |
51 -- they'll end up getting top favor) | |
52 -- * if a stream contains a random-add after an add-to-end | |
53 -- it is declared invalid. tough tits. it's just not a fair | |
54 -- distribution at that point. | |
45 | 55 |
46 -- todo: list-of-lists must not use int indices. those will lead to peril. | 56 -- todo: list-of-lists must not use int indices. those will lead to peril. |
47 bsk.lists = {} | 57 bsk.lists = {} |
48 bsk.persons = {} | 58 bsk.persons = {} |
49 | 59 |
71 for k, v in pairs(t) do u[k] = v end | 81 for k, v in pairs(t) do u[k] = v end |
72 return setmetatable(u, getmetatable(t)) | 82 return setmetatable(u, getmetatable(t)) |
73 end | 83 end |
74 | 84 |
75 -- Debugging {{{ | 85 -- Debugging {{{ |
86 function bsk:PrettyPrintList(listIndex) | |
87 local list = bsk.lists[listIndex] | |
88 bsk:Print("List: " .. list.name .. " (" .. list.time .. ")") | |
89 for i = 1,#list do | |
90 bsk:Print(" " .. i .. " - " .. bsk.persons[list[i]].main) | |
91 end | |
92 end | |
93 function bsk:PrettyPrintLists() | |
94 for i,_ in pairs(bsk.lists) do | |
95 bsk:PrettyPrintList(i) | |
96 end | |
97 end | |
76 function bsk:PrintLists() | 98 function bsk:PrintLists() |
77 bsk:PrintTable(bsk.lists) | 99 bsk:PrintTable(bsk.lists) |
78 end | 100 end |
79 function bsk:PrintChanges() | 101 function bsk:PrintChanges() |
80 bsk:PrintTable(bsk.db.profile.changes) | 102 bsk:PrintTable(bsk.db.profile.changes) |
101 end | 123 end |
102 end | 124 end |
103 | 125 |
104 --}}} | 126 --}}} |
105 | 127 |
128 function bsk:UpdatePersonsReverse() | |
129 for i,v in pairs(bsk.persons) do | |
130 if i ~= "time" then | |
131 personsReverse[v.main] = i | |
132 end | |
133 end | |
134 end | |
135 | |
106 function bsk:CreateWorkingStateFromChanges(changes) | 136 function bsk:CreateWorkingStateFromChanges(changes) |
107 local personsBase = self.db.profile.persons | 137 local personsBase = self.db.profile.persons |
108 local listBase = self.db.profile.listBase | 138 local listBase = self.db.profile.listBase |
109 | 139 |
110 -- copy the base to the working state | 140 -- copy the base to the working state |
117 | 147 |
118 -- now just go through the changes list applying each | 148 -- now just go through the changes list applying each |
119 for i,v in ipairs(changes) do | 149 for i,v in ipairs(changes) do |
120 bsk:ProcessChange(v) | 150 bsk:ProcessChange(v) |
121 end | 151 end |
152 | |
153 -- update the persons reverse list | |
154 bsk:UpdatePersonsReverse() | |
122 end | 155 end |
123 | 156 |
124 function bsk:CreateChange(change) | 157 function bsk:CreateChange(change) |
125 -- sanity | 158 -- sanity |
126 assert(change) | 159 assert(change) |
274 if bsk:DoCreateList(change) then | 307 if bsk:DoCreateList(change) then |
275 bsk:CommitChange(change) | 308 bsk:CommitChange(change) |
276 end | 309 end |
277 end | 310 end |
278 | 311 |
312 -- TODO: break into AddPersonToListEnd and AddPersonToListRandom | |
279 function bsk:DoAddPersonToList(change) | 313 function bsk:DoAddPersonToList(change) |
280 local listIndex = change.arg.listIndex | 314 local listIndex = change.arg.listIndex |
281 local slist = change.arg.slist | 315 local slist = change.arg.slist |
282 local list = bsk.lists[listIndex] | 316 local list = bsk.lists[listIndex] |
283 | 317 |
293 | 327 |
294 function bsk:AddPersonToList(name,list) | 328 function bsk:AddPersonToList(name,list) |
295 -- require admin | 329 -- require admin |
296 local listIndex = bsk:GetListIndex(list) | 330 local listIndex = bsk:GetListIndex(list) |
297 local id = personsReverse[name] | 331 local id = personsReverse[name] |
332 bsk:Print(sformat("Adding %s (%s) to list %s (%s)", name, id, list, listIndex)) | |
298 local slist = {id} -- TODO: support adding to elsewhere besides the end | 333 local slist = {id} -- TODO: support adding to elsewhere besides the end |
299 local change = {action="AddPersonToList",arg={id=id,listIndex=listIndex,slist=slist}} | 334 local change = {action="AddPersonToList",arg={id=id,listIndex=listIndex,slist=slist}} |
300 bsk:StartChange(change) | 335 bsk:StartChange(change) |
301 if bsk:DoAddPersonToList(change) then | 336 if bsk:DoAddPersonToList(change) then |
302 bsk:CommitChange(change) | 337 bsk:CommitChange(change) |