Better organized
This commit is contained in:
42
luprex/syslua/classdb.lua
Normal file
42
luprex/syslua/classdb.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
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)
|
||||
Reference in New Issue
Block a user