------------------------------------------------------------------
-- LuaClass.lua
-- Author     : Xin Zhang
-- Version    : 1.0.0.0
-- Date       : 2011-10-12
-- Description:
------------------------------------------------------------------

local strModuleName = "LuaClass";
CCLuaLog("Module " .. strModuleName .. " loaded.");
strModuleName = nil;

function Class(super)
	local _class = {};
	local class_type = {};

	class_type.ctor = false;
	class_type.super = super;

	class_type.new =
		function(...)
			local obj = {};

			do
				local create;
				create = function(c, ...)
					if(c.super) then
						create(c.super, ...);
					end
					if(c.ctor) then
						c.ctor(obj, ...);
					end
				end

				create(class_type, ...);
			end

			setmetatable(obj, {__index = _class[class_type]});

			return obj;
		end

	local vtbl = {};
	_class[class_type] = vtbl;

	setmetatable(class_type, {__newindex =
		function(t,k,v)
			vtbl[k] = v;
		end
	});

	if(super) then
		setmetatable(vtbl,{__index =
			function(t, k)
				local ret = _class[super][k];
				vtbl[k] = ret;
				return ret;
			end
		})
	end


	return class_type;
end
