43 lines
1.1 KiB
Lua
43 lines
1.1 KiB
Lua
|
|
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)
|