AuctioneerSuite/Auc-Advanced/CoreModule.lua

162 lines
5.1 KiB
Lua
Raw Normal View History

2026-04-13 17:48:13 -04:00
--[[
Auctioneer
Version: 5.9.4961 (WhackyWallaby)
Revision: $Id: CoreConst.lua 4598 2010-01-07 20:40:09Z brykrys $
URL: http://auctioneeraddon.com/
This is an addon for World of Warcraft that adds statistical history to the auction data that is collected
when the auction is scanned, so that you can easily determine what price
you will be able to sell an item for at auction or at a vendor whenever you
mouse-over an item in the game
License:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program(see GPL.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Note:
This AddOn's source code is specifically designed to work with
World of Warcraft's interpreted AddOn system.
You have an implicit license to use this AddOn with these facilities
since that is its designated purpose as per:
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
--]]
--[[
Auctioneer Core Module Support
This code helps maintain internal integrity of Auctioneer. Allows a module to be created to support the Core
without hoisting variables into a public namespace.
Also creates an addon local (can only get a reference during auctioneers startup) tablespace, allowing more intermodule interaction
without hoisting the variables into the public tablespace.
--]]
if not AucAdvanced then return end
local lib = AucAdvanced
local modules = {}
local internal = {}
-- This is an initial creation function. Create and return items once. Expect the caller to store that value for use.
function lib.GetCoreModule(moduleName)
local x = {}
if (moduleName) then
if (modules[moduleName]) then return end
modules[moduleName] = x
end
return x, internal
end
--[[ CoreModule
A dummy module representing the core of Auc-Advanced
Used to catch messages and pass them on to elements of the core
--]]
local coremoduleInternal = {}
local coremodule = {
libType = "Util",
libName = "CoreModule",
GetName = function() return "CoreModule" end,
}
local function HasOnlyFunctions(tbl)
for _, elem in pairs(tbl) do
if not type(elem)=="function" then
return false
end
end
return true
end
-- called from CoreMain's private OnLoad function
function lib.CoreModuleOnLoad(addon)
local tcheck = {}
local ncheck = {}
for mdl, core in pairs(modules) do
for elem, dat in pairs(core) do
local tp = type(dat)
if (tp=="table" and HasOnlyFunctions(dat)) then tp="nestedfunction" end
if ((not tcheck[elem]) or tcheck[elem]==tp) then
if not tcheck[elem] then
tcheck[elem] = tp
ncheck[elem] = mdl
end
if (tp=="table") then
if not coremodule[elem] then coremodule[elem] = {} end
local ts = coremodule[elem]
for x, y in pairs(dat) do
ts[x] = y
end
elseif (tp=="nestedfunction") then
if not coremoduleInternal[elem] then coremoduleInternal[elem] = {} end
local fns = coremoduleInternal[elem]
for fName, fCode in pairs(dat) do
if not fns[fName] then fns[fName] = {} end
local fs = fns[fName]
if not coremodule[elem] then coremodule[elem] = {} end
if not coremodule[elem][fName] then
local f = elem
coremodule[elem][fName]=function(...)
for i=1,#fs do
local fn = fs[i]
fn(...)
end
end
end
table.insert(fs, fCode)
end
elseif (tp=="function") then
if not coremoduleInternal[elem] then coremoduleInternal[elem] = {} end
local fs = coremoduleInternal[elem]
if not coremodule[elem] then
local f = elem
coremodule[elem]=function(...)
for i=1,#fs do
local fn = fs[i]
fn(...)
end
end
end
table.insert(fs, dat)
end
else
if nLog then
nLog.AddMessage("Auctioneer", "CoreModule", N_WARNING, "CoreModule did not match expected layout",
("For %s, Baseline %s has type %s while %s has type %s"):format(
elem, ncheck[elem] or "??", tcheck[elem] or "??",
mdl, tp))
end
end
end
end
-- install as a Module
lib.Modules.Util.CoreModule = coremodule
lib.SendProcessorMessage("newmodule", "Util", "CoreModule")
-- do OnLoad
if coremodule.OnLoad then
coremodule.OnLoad(addon)
end
-- delete the initialization code as we only need it once
lib.CoreModuleOnLoad = nil
lib.GetCoreModule = nil
end
AucAdvanced.RegisterRevision("$URL: http://dev.norganna.org/auctioneer/trunk/Auc-Advanced/CoreConst.lua $", "$Rev: 4598 $")