From f525f386952506f7c14e241d087b7473f230235b Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 5 Jul 2017 17:00:07 +0200 Subject: Object lib added as git submodule --- lib/Object.lua | 77 ---------------------------------------------------------- lib/object | 1 + 2 files changed, 1 insertion(+), 77 deletions(-) delete mode 100644 lib/Object.lua create mode 160000 lib/object (limited to 'lib') diff --git a/lib/Object.lua b/lib/Object.lua deleted file mode 100644 index b241bb2..0000000 --- a/lib/Object.lua +++ /dev/null @@ -1,77 +0,0 @@ ---- You may not believe me but we are not returning this one. --- This table is used as metatable for classes e.g. for `Object`. -local Class = {} - ---- Metamethod for classes. --- Creates new instance of class calling `new()` method (constructor) with all parameters passed. -Class.__call = function (self, ...) - local o = setmetatable({}, self) - self.new(o, ...) - return o -end - ---- Metamethod for classes. --- First checks if `__index` (instance prototype) have field we are looking for. Then it tries to find it in super class. -Class.__index = function (self, key) - if rawget(self, "__index") ~= nil then - if rawget(self, "__index")[key] ~= nil then - return rawget(self, "__index")[key] - end - end - if rawget(self, "__super") ~= nil then - if rawget(self, "__super")[key] ~= nil then - return rawget(self, "__super")[key] - end - end - return nil -end ---- Metamethod for classes. --- Redirects creating new properties to class'es `__index` which is used as a prototype for instances of class. --- Only `new` method and metamethods are allowed to be written to class'es table directly. -Class.__newindex = function(self, key, value) - if key == "new" or key:sub(1, 2) == "__" then - rawset(self, key, value) - else - self.__index[key] = value - end -end - ---- Creates new class from parent class. --- New class will call parent's constructor unless new constructor will be defined. --- @param parent super class of new class -local extends = function (parent) - local self = setmetatable({}, Class) - rawset(self, "__index", {}) - if parent then - setmetatable(self.__index, {__index = parent.__index}) - end - rawset(self, "__super", parent) - return self -end - ---- Almost empty class. --- Used to create new classes via `extend()` method: --- `Child = Object:extend()` --- Contains `is()` and `new()` methods. Later one isn't available from inside of instances. -local Object = extends(nil) -rawset(Object, "extends", extends) -Object.new = function (self) end - ---- Checks if class or instance of class is a child of class passed through parameter. --- @param class table we want to test against (preferably class table) --- @return boolean which is false if tested sample is not child of passed class -function Object:is (class) - if not class then return false end - if self == class or getmetatable(self) == class then - return true - end - if self.__super then - return self.__super:is(class) - end - if getmetatable(self).__super then - return getmetatable(self).__super:is(class) - end - return false -end - -return Object diff --git a/lib/object b/lib/object new file mode 160000 index 0000000..eacf0f6 --- /dev/null +++ b/lib/object @@ -0,0 +1 @@ +Subproject commit eacf0f60c0752616407fbca6cd9d8ca9757ce624 -- cgit v1.1