Files
integration/luprex/syslua/classdb.lua

43 lines
1.1 KiB
Lua
Raw Normal View History

2020-11-13 15:18:09 -05:00
classdb = table.coerce(classdb)
-- classdb.create: creates a new class database.
function classdb.create()
return {}
end
-- Given a class database, removes all the functions that have
-- been inserted into it, but keeps the class and action tables.
function classdb.reset(db)
for name,maybeclass in pairs(db) do
local class = table.coerce(maybeclass)
local action = table.coerce(rawget(class, "action"))
table.rawclear(class)
table.rawclear(action)
rawset(db, name, class)
class.action = action
class.__index = class
class.__class = name
end
end
-- Given a class_db, makes an accessor that fetches classes
-- from that class db.
function classdb.accessor(db)
return function(name)
local class = rawget(db, name)
if type(class) ~= "table" then
class = {}
rawset(db, name, class)
class.action = {}
class.__index = class
class.__class = name
end
return class
end
end
-- Make a global class database to use for the super.
classdb.database = {}
class = classdb.accessor(classdb.database)