text: // Autogenerated by gameplay-luagen
  #include "Base.h"
  #include "ScriptController.h"
  #include "lua_Layout.h"
  #include "AbsoluteLayout.h"
  #include "Base.h"
  #include "Container.h"
  #include "Control.h"
  #include "FlowLayout.h"
  #include "Game.h"
  #include "Layout.h"
  #include "Ref.h"
  #include "VerticalLayout.h"
  #include "AbsoluteLayout.h"
  #include "FlowLayout.h"
  #include "Ref.h"
  #include "VerticalLayout.h"
  
  namespace gameplay
  {
  
  extern void luaGlobal_Register_Conversion_Function(const char* className, void*(*func)(void*, const char*));
  
  static Layout* getInstance(lua_State* state)
  {
      void* userdata = luaL_checkudata(state, 1, "Layout");
      luaL_argcheck(state, userdata != NULL, 1, "'Layout' expected.");
      return (Layout*)((gameplay::ScriptUtil::LuaObject*)userdata)->instance;
  }
  
  static int lua_Layout__gc(lua_State* state)
  {
      // Get the number of parameters.
      int paramCount = lua_gettop(state);
  
      // Attempt to match the parameters to a valid binding.
      switch (paramCount)
      {
          case 1:
          {
              if ((lua_type(state, 1) == LUA_TUSERDATA))
              {
                  void* userdata = luaL_checkudata(state, 1, "Layout");
                  luaL_argcheck(state, userdata != NULL, 1, "'Layout' expected.");
                  gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)userdata;
                  if (object->owns)
                  {
                      Layout* instance = (Layout*)object->instance;
                      SAFE_RELEASE(instance);
                  }
                  
                  return 0;
              }
  
              lua_pushstring(state, "lua_Layout__gc - Failed to match the given parameters to a valid function signature.");
              lua_error(state);
              break;
          }
          default:
          {
              lua_pushstring(state, "Invalid number of parameters (expected 1).");
              lua_error(state);
              break;
          }
      }
      return 0;
  }
  
  static int lua_Layout_addRef(lua_State* state)
  {
      // Get the number of parameters.
      int paramCount = lua_gettop(state);
  
      // Attempt to match the parameters to a valid binding.
      switch (paramCount)
      {
          case 1:
          {
              if ((lua_type(state, 1) == LUA_TUSERDATA))
              {
                  Layout* instance = getInstance(state);
                  instance->addRef();
                  
                  return 0;
              }
  
              lua_pushstring(state, "lua_Layout_addRef - Failed to match the given parameters to a valid function signature.");
              lua_error(state);
              break;
          }
          default:
          {
              lua_pushstring(state, "Invalid number of parameters (expected 1).");
              lua_error(state);
              break;
          }
      }
      return 0;
  }
  
  static int lua_Layout_getRefCount(lua_State* state)
  {
      // Get the number of parameters.
      int paramCount = lua_gettop(state);
  
      // Attempt to match the parameters to a valid binding.
      switch (paramCount)
      {
          case 1:
          {
              if ((lua_type(state, 1) == LUA_TUSERDATA))
              {
                  Layout* instance = getInstance(state);
                  unsigned int result = instance->getRefCount();
  
                  // Push the return value onto the stack.
                  lua_pushunsigned(state, result);
  
                  return 1;
              }
  
              lua_pushstring(state, "lua_Layout_getRefCount - Failed to match the given parameters to a valid function signature.");
              lua_error(state);
              break;
          }
          default:
          {
              lua_pushstring(state, "Invalid number of parameters (expected 1).");
              lua_error(state);
              break;
          }
      }
      return 0;
  }
  
  static int lua_Layout_getType(lua_State* state)
  {
      // Get the number of parameters.
      int paramCount = lua_gettop(state);
  
      // Attempt to match the parameters to a valid binding.
      switch (paramCount)
      {
          case 1:
          {
              if ((lua_type(state, 1) == LUA_TUSERDATA))
              {
                  Layout* instance = getInstance(state);
                  Layout::Type result = instance->getType();
  
                  // Push the return value onto the stack.
                  lua_pushnumber(state, (int)result);
  
                  return 1;
              }
  
              lua_pushstring(state, "lua_Layout_getType - Failed to match the given parameters to a valid function signature.");
              lua_error(state);
              break;
          }
          default:
          {
              lua_pushstring(state, "Invalid number of parameters (expected 1).");
              lua_error(state);
              break;
          }
      }
      return 0;
  }
  
  static int lua_Layout_release(lua_State* state)
  {
      // Get the number of parameters.
      int paramCount = lua_gettop(state);
  
      // Attempt to match the parameters to a valid binding.
      switch (paramCount)
      {
          case 1:
          {
              if ((lua_type(state, 1) == LUA_TUSERDATA))
              {
                  Layout* instance = getInstance(state);
                  instance->release();
                  
                  return 0;
              }
  
              lua_pushstring(state, "lua_Layout_release - Failed to match the given parameters to a valid function signature.");
              lua_error(state);
              break;
          }
          default:
          {
              lua_pushstring(state, "Invalid number of parameters (expected 1).");
              lua_error(state);
              break;
          }
      }
      return 0;
  }
  
  // Provides support for conversion to all known relative types of Layout
  static void* __convertTo(void* ptr, const char* typeName)
  {
      Layout* ptrObject = reinterpret_cast<Layout*>(ptr);
  
      if (strcmp(typeName, "AbsoluteLayout") == 0)
      {
          return reinterpret_cast<void*>(static_cast<AbsoluteLayout*>(ptrObject));
      }
      else if (strcmp(typeName, "FlowLayout") == 0)
      {
          return reinterpret_cast<void*>(static_cast<FlowLayout*>(ptrObject));
      }
      else if (strcmp(typeName, "Ref") == 0)
      {
          return reinterpret_cast<void*>(static_cast<Ref*>(ptrObject));
      }
      else if (strcmp(typeName, "VerticalLayout") == 0)
      {
          return reinterpret_cast<void*>(static_cast<VerticalLayout*>(ptrObject));
      }
  
      // No conversion available for 'typeName'
      return NULL;
  }
  
  static int lua_Layout_to(lua_State* state)
  {
      // There should be only a single parameter (this instance)
      if (lua_gettop(state) != 2 || lua_type(state, 1) != LUA_TUSERDATA || lua_type(state, 2) != LUA_TSTRING)
      {
          lua_pushstring(state, "lua_Layout_to - Invalid number of parameters (expected 2).");
          lua_error(state);
          return 0;
      }
  
      Layout* instance = getInstance(state);
      const char* typeName = gameplay::ScriptUtil::getString(2, false);
      void* result = __convertTo((void*)instance, typeName);
  
      if (result)
      {
          gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
          object->instance = (void*)result;
          object->owns = false;
          luaL_getmetatable(state, typeName);
          lua_setmetatable(state, -2);
      }
      else
      {
          lua_pushnil(state);
      }
  
      return 1;
  }
  
  void luaRegister_Layout()
  {
      const luaL_Reg lua_members[] = 
      {
          {"addRef", lua_Layout_addRef},
          {"getRefCount", lua_Layout_getRefCount},
          {"getType", lua_Layout_getType},
          {"release", lua_Layout_release},
          {"to", lua_Layout_to},
          {NULL, NULL}
      };
      const luaL_Reg* lua_statics = NULL;
      std::vector<std::string> scopePath;
  
      gameplay::ScriptUtil::registerClass("Layout", lua_members, NULL, lua_Layout__gc, lua_statics, scopePath);
  
      luaGlobal_Register_Conversion_Function("Layout", __convertTo);
  }
  
  }
  