From a125f4c6b3bbbb4e82399efcf808afb86a7be733 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Tue, 21 May 2013 05:11:23 +0000 Subject: [PATCH] Rename OvaleDeque to OvaleQueue and implement LIFO and FIFO structures. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@923 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- Ovale.toc | 2 +- OvaleDamageTaken.lua | 4 +- OvaleDeque.lua | 105 -------------------------------------------- OvaleQueue.lua | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ compiler.pl | 2 +- 5 files changed, 123 insertions(+), 109 deletions(-) delete mode 100644 OvaleDeque.lua create mode 100644 OvaleQueue.lua diff --git a/Ovale.toc b/Ovale.toc index 92cccbd..83e42b0 100644 --- a/Ovale.toc +++ b/Ovale.toc @@ -31,12 +31,12 @@ Ovale.lua # Modules with no dependencies OvaleActionBar.lua -OvaleDeque.lua OvaleEnemies.lua OvaleEquipement.lua OvaleGUID.lua OvalePaperDoll.lua OvalePool.lua +OvaleQueue.lua OvaleRecount.lua OvaleSkada.lua OvaleStance.lua diff --git a/OvaleDamageTaken.lua b/OvaleDamageTaken.lua index b344318..33e8030 100644 --- a/OvaleDamageTaken.lua +++ b/OvaleDamageTaken.lua @@ -14,10 +14,10 @@ local OvaleDamageTaken = Ovale:NewModule("OvaleDamageTaken", "AceEvent-3.0") Ovale.OvaleDamageTaken = OvaleDamageTaken -- -local OvaleDeque = Ovale.OvaleDeque local OvaleGUID = Ovale.OvaleGUID local OvaleFuture = Ovale.OvaleFuture local OvalePool = Ovale.OvalePool +local OvaleQueue = Ovale.OvaleQueue local select = select @@ -26,7 +26,7 @@ local self_player_guid = nil -- Damage event pool. local self_pool = OvalePool:NewPool("OvaleDamageTaken_pool") -- Damage event queue: new events are inserted at the front of the queue. -local self_damageEvent = OvaleDeque:New("OvaleDamageTaken_damageEvent") +local self_damageEvent = OvaleQueue:NewDeque("OvaleDamageTaken_damageEvent") -- Time window (past number of seconds) for which damage events are stored. local DAMAGE_TAKEN_WINDOW = 20 diff --git a/OvaleDeque.lua b/OvaleDeque.lua deleted file mode 100644 index 31eea28..0000000 --- a/OvaleDeque.lua +++ /dev/null @@ -1,105 +0,0 @@ ---[[-------------------------------------------------------------------- - Ovale Spell Priority - Copyright (C) 2013 Johnny C. Lam - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License in the LICENSE - file accompanying this program. ---]]-------------------------------------------------------------------- - --- Double-ended queue. -local _, Ovale = ... -local OvaleDeque = {} -Ovale.OvaleDeque = OvaleDeque - --- -OvaleDeque.name = "OvaleDeque" -OvaleDeque.first = 0 -OvaleDeque.last = -1 --- - --- -local function BackToFrontIterator(invariant, control) - control = control - 1 - local element = invariant[control] - if element then - return control, element - end -end - -local function FrontToBackIterator(invariant, control) - control = control + 1 - local element = invariant[control] - if element then - return control, element - end -end --- - --- -function OvaleDeque:New(name) - obj = { name = name, first = 0, last = -1 } - setmetatable(obj, { __index = self }) - return obj -end - -function OvaleDeque:InsertFront(element) - local first = self.first - 1 - self.first = first - self[first] = element -end - -function OvaleDeque:InsertBack(element) - local last = self.last + 1 - self.last = last - self[last] = element -end - -function OvaleDeque:RemoveFront() - local first = self.first - local element = self[first] - if element then - self[first] = nil - self.first = first + 1 - end - return element -end - -function OvaleDeque:RemoveBack() - local last = self.last - local element = self[last] - if element then - self[last] = nil - self.last = last - 1 - end - return element -end - -function OvaleDeque:Front() - return self[self.first] -end - -function OvaleDeque:Back() - return self[self.last] -end - -function OvaleDeque:BackToFrontIterator() - return BackToFrontIterator, self, self.last + 1 -end - -function OvaleDeque:FrontToBackIterator() - return FrontToBackIterator, self, self.first - 1 -end - -function OvaleDeque:Reset() - for i in self:BackToFrontIterator() do - self[i] = nil - end - self.first = 0 - self.last = -1 -end - -function OvaleDeque:Debug() - Ovale:FormatPrint("Deque %s has %d item(s), first=%d, last=%d.", self.name, self.last - self.first + 1, self.first, self.last) -end --- diff --git a/OvaleQueue.lua b/OvaleQueue.lua new file mode 100644 index 0000000..ce0c570 --- /dev/null +++ b/OvaleQueue.lua @@ -0,0 +1,119 @@ +--[[-------------------------------------------------------------------- + Ovale Spell Priority + Copyright (C) 2013 Johnny C. Lam + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License in the LICENSE + file accompanying this program. +--]]-------------------------------------------------------------------- + +-- Double-ended queue. +local _, Ovale = ... +local OvaleQueue = {} +Ovale.OvaleQueue = OvaleQueue + +-- +OvaleQueue.name = "OvaleQueue" +OvaleQueue.first = 0 +OvaleQueue.last = -1 +-- + +-- +local function BackToFrontIterator(invariant, control) + control = control - 1 + local element = invariant[control] + if element then + return control, element + end +end + +local function FrontToBackIterator(invariant, control) + control = control + 1 + local element = invariant[control] + if element then + return control, element + end +end +-- + +-- +function OvaleQueue:NewDeque(name) + obj = { name = name, first = 0, last = -1 } + setmetatable(obj, { __index = self }) + return obj +end + +function OvaleQueue:InsertFront(element) + local first = self.first - 1 + self.first = first + self[first] = element +end + +function OvaleQueue:InsertBack(element) + local last = self.last + 1 + self.last = last + self[last] = element +end + +function OvaleQueue:RemoveFront() + local first = self.first + local element = self[first] + if element then + self[first] = nil + self.first = first + 1 + end + return element +end + +function OvaleQueue:RemoveBack() + local last = self.last + local element = self[last] + if element then + self[last] = nil + self.last = last - 1 + end + return element +end + +function OvaleQueue:Front() + return self[self.first] +end + +function OvaleQueue:Back() + return self[self.last] +end + +function OvaleQueue:BackToFrontIterator() + return BackToFrontIterator, self, self.last + 1 +end + +function OvaleQueue:FrontToBackIterator() + return FrontToBackIterator, self, self.first - 1 +end + +function OvaleQueue:Reset() + for i in self:BackToFrontIterator() do + self[i] = nil + end + self.first = 0 + self.last = -1 +end + +function OvaleQueue:Debug() + Ovale:FormatPrint("Queue %s has %d item(s), first=%d, last=%d.", self.name, self.last - self.first + 1, self.first, self.last) +end +-- + +-- +-- Queue (LIFO) methods +OvaleQueue.NewQueue = OvaleQueue.NewDeque +OvaleQueue.Insert = OvaleQueue.InsertBack +OvaleQueue.Remove = OvaleQueue.RemoveFront +OvaleQueue.Iterator = OvaleQueue.FrontToBackIterator + +-- Stack (FIFO) methods +OvaleQueue.NewStack = OvaleQueue.NewDeque +OvaleQueue.Push = OvaleQueue.InsertFront +OvaleQueue.Pop = OvaleQueue.RemoveFront +OvaleQueue.Top = OvaleQueue.Front +-- diff --git a/compiler.pl b/compiler.pl index 2f3d27e..0df88e7 100644 --- a/compiler.pl +++ b/compiler.pl @@ -92,7 +92,7 @@ $p{Skada}{total} = true; $sp{Ovale}{OvaleBestAction} = true; $sp{Ovale}{OvaleCondition} = true; -$sp{Ovale}{OvaleDeque} = true; +$sp{Ovale}{OvaleQueue} = true; $sp{Ovale}{OvalePool} = true; $sp{Ovale}{OvaleSkada} = true; $sp{Ovale}{OvaleState} = true; -- 1.7.9.5