Exemplo n.º 1
0
bool ClassNameTreeContains(const ClassNameNode& node, const std::string& name)
{
//	if the node is the name, return true
	if(node.name() == name) return true;

//	else search in parents
	bool bContains = false;

	for(size_t i = 0; i < node.num_base_classes(); ++i)
		bContains |= ClassNameTreeContains(node.base_class(i), name);

//	return if found in parents
	return bContains;
}
Exemplo n.º 2
0
int UGIsBaseClass(lua_State *L)
{
	const char* derivClass = lua_tostring(L, -1);
	const char* baseClass = lua_tostring(L, -2);

	if(!derivClass || !baseClass)
		UG_THROW("In UGIsBaseClass: invalid class names passed as arguments.");

	luaL_getmetatable(L, derivClass);

	if(!lua_isnil(L, -1))
	{
		lua_pushstring(L, "class_name_node");
		lua_rawget(L, -2);
		const ug::bridge::ClassNameNode* classNameNode = (const ug::bridge::ClassNameNode*) lua_touserdata(L, -1);
		lua_pop(L, 2);

		if(classNameNode)
		{
			if(!classNameNode->empty())
			{
				if(ClassNameTreeContains(*classNameNode, baseClass))
				{
					lua_pushboolean(L, true);
					return 1;
				}
			}
			lua_pushboolean(L, false);
			return 1;
		}
		else UG_THROW("In UGIsBaseClasse: Something wrong with ClassNameNode.");
	}
	else{
		UG_THROW("In UGIsBaseClass: Cannot find metatable for: "<< derivClass);
	}

	return 0;
}