Files
2026-07-15 23:00:59 -07:00

35 lines
1.5 KiB
Lua

-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
-- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
local _G = getfenv()
local strfind, strfmt = string.find, string.format
local LibStub = _G[ LIBSTUB_MAJOR ]
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
LibStub = LibStub or { libs = {}, minors = {} }
_G[ LIBSTUB_MAJOR ] = LibStub
LibStub.minor = LIBSTUB_MINOR
function LibStub:NewLibrary( major, minor )
assert( type( major ) == "string", "Bad argument #2 to `NewLibrary' (string expected)" )
local _, _, num = strfind( minor, "(%d+)" )
minor = assert( tonumber( num ), "Minor version must either be a number or contain a number." )
local oldminor = self.minors[ major ]
if oldminor and oldminor >= minor then return nil end
self.minors[ major ], self.libs[ major ] = minor, self.libs[ major ] or {}
return self.libs[ major ], oldminor
end
function LibStub:GetLibrary( major, silent )
if not self.libs[ major ] and not silent then
error( strfmt( "Cannot find a library instance of %q.", tostring( major ) ), 2 )
end
return self.libs[ major ], self.minors[ major ]
end
function LibStub:IterateLibraries() return pairs( self.libs ) end
setmetatable( LibStub, { __call = LibStub.GetLibrary } )
end