From 561c81ce21b470dbed6ef52138fee8ec2975bc87 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Sat, 16 Mar 2013 08:03:25 +0000 Subject: [PATCH] Add simple memory pool implementation in OvalePool. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@775 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- Ovale.toc | 1 + OvalePool.lua | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 OvalePool.lua diff --git a/Ovale.toc b/Ovale.toc index 17e20cb..858c827 100644 --- a/Ovale.toc +++ b/Ovale.toc @@ -32,6 +32,7 @@ OvaleEnemies.lua OvaleEquipement.lua OvaleGUID.lua OvalePaperDoll.lua +OvalePool.lua OvaleRecount.lua OvaleSkada.lua OvaleSpellDamage.lua diff --git a/OvalePool.lua b/OvalePool.lua new file mode 100644 index 0000000..2273396 --- /dev/null +++ b/OvalePool.lua @@ -0,0 +1,62 @@ +--[[-------------------------------------------------------------------- + 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. +--]]-------------------------------------------------------------------- + +-- Simple resource pool. +local _, Ovale = ... +local OvalePool = {} +Ovale.poolPrototype = OvalePool + +-- +OvalePool.name = "OvalePool" +OvalePool.pool = nil +OvalePool.size = 0 +OvalePool.unused = 0 +-- + +-- +function OvalePool:NewPool(name) + obj = { name = name, pool = {}, size = 0, unused = 0 } + setmetatable(obj, { __index = self }) + return obj +end + +function OvalePool:Get() + assert(self.pool) + local item = tremove(self.pool) + if item then + self.unused = self.unused - 1 + else + self.size = self.size + 1 + item = {} + end + return item +end + +function OvalePool:Release(item) + assert(self.pool) + wipe(item) + tinsert(self.pool, item) + self.unused = self.unused + 1 +end + +function OvalePool:Drain() + assert(self.pool) + while true do + if not tremove(self.pool) then + break + end + end + self.size = self.size - self.unused + self.unused = 0 +end + +function OvalePool:Debug() + Ovale:Print("Pool " .. tostring(self.name) .. " has size " .. self.size .. " with " .. self.unused .. " item(s).") +end +-- -- 1.7.9.5