Function definition for queue and group re-form

Sasky [08-12-14 - 06:39]
Function definition for queue and group re-form
Filename
AutoInvite.lua
diff --git a/AutoInvite.lua b/AutoInvite.lua
index 75df7f1..37d8842 100644
--- a/AutoInvite.lua
+++ b/AutoInvite.lua
@@ -173,6 +173,95 @@ function AutoInvite.kickCheck()
 end

 ------------------------------------------------
+--- Invite queue
+------------------------------------------------
+
+-- FIFO invite queue
+AutoInvite.toInvite = {
+    vals = {},
+    front = 1,
+    back = 1,
+}
+local queue = AutoInvite.toInvite
+function queue:size()
+    return queue.back - queue.front
+end
+
+function queue:push(val)
+    local back = self.back
+    self.vals[back] = val
+    queue.back = back + 1
+end
+
+function queue:pop()
+    if self:size() == 0 then
+        return nil
+    end
+    local front = self.front
+    local retval = self.vals[front]
+    self.vals[front] = nil
+    self.front = front + 1
+    return retval
+end
+
+function queue:reset()
+    self.vals = {}
+    self.front = 1
+    self.back = 1
+end
+
+-- Key: name / Value: timestamp
+AutoInvite.sentInvite = {}
+-- sentInvite not array form, so maintain count
+AutoInvite.sentInvites = 0
+
+function AutoInvite:processQueue()
+    local now = GetTimeStamp()
+    local effectiveCount = GetGroupSize() + self.sentInvites
+    local numInvites =  math.min(queue:size(), self.cfg.maxSize - effectiveCount)
+    for _ = 1,numInvites do
+        local name = queue:pop()
+        self.sentInvites = self.sentInvites + 1
+        self.sentInvite[name] = now
+        GroupInviteByName(name)
+    end
+end
+
+function AutoInvite:checkSentInvites()
+    local now = GetTimeStamp()
+
+    local members = {}
+    for i=1,GetGroupSize() do
+        local tag = GetGroupUnitTagByIndex(i)
+        members[GetUnitName(tag)] = true
+    end
+
+    for name, time in pairs(self.sentInvite) do
+        if members[name] or GetDiffBetweenTimeStamps(now, time) < 15 then
+            self.sentInvite[name] = nil
+            AutoInvite.sentInvites = AutoInvite.sentInvites - 1
+        end
+    end
+end
+
+function AutoInvite:resetQueues()
+    self.toInvite = {}
+    queue:reset()
+end
+
+
+function AutoInvite:resetGroup()
+    self:resetQueues()
+    for i=1,GetGroupSize() do
+        local tag = GetGroupUnitTagByIndex(i)
+        local name = GetUnitName(tag)
+        table.insert(self.toInvite, name)
+        GroupDisband()
+        GroupLeave() --for group leader bug
+    end
+end
+
+------------------------------------------------
 --- Main interface
 ------------------------------------------------
 AutoInvite.disable = function()