void LuaState::PushFunction(LuaFunction func) const { LuaFunction* luaFunc = static_cast<LuaFunction*>(lua_newuserdata(m_state, sizeof(LuaFunction))); PlacementNew(luaFunc, std::move(func)); lua_pushcclosure(m_state, ProxyFunc, 1); }
/*! * \brief Sets a string parameter named `name` * * If a parameter already exists with that name, it is destroyed and replaced by this call * * \param name Name of the parameter * \param value The string value */ void ParameterList::SetParameter(const String& name, const char* value) { Parameter& parameter = CreateValue(name); parameter.type = ParameterType_String; PlacementNew(¶meter.value.stringVal, value); }
/*! * \brief Sets a color parameter named `name` * * If a parameter already exists with that name, it is destroyed and replaced by this call * * \param name Name of the parameter * \param value The color value */ void ParameterList::SetParameter(const String& name, const Color& value) { Parameter& parameter = CreateValue(name); parameter.type = ParameterType_Color; PlacementNew(¶meter.value.colorVal, value); }
/*! * \brief Copies the content of the other parameter list to this * \return A reference to this * * \param list List to assign */ ParameterList& ParameterList::operator=(const ParameterList& list) { Clear(); for (auto it = list.m_parameters.begin(); it != list.m_parameters.end(); ++it) { Parameter& parameter = m_parameters[it->first]; switch (it->second.type) { case ParameterType_Boolean: case ParameterType_Color: case ParameterType_Double: case ParameterType_Integer: case ParameterType_Pointer: std::memcpy(¶meter, &it->second, sizeof(Parameter)); break; case ParameterType_String: parameter.type = ParameterType_String; PlacementNew(¶meter.value.stringVal, it->second.value.stringVal); break; case ParameterType_Userdata: parameter.type = ParameterType_Userdata; parameter.value.userdataVal = it->second.value.userdataVal; ++(parameter.value.userdataVal->counter); break; case ParameterType_None: parameter.type = ParameterType_None; break; } } return *this; }