/**************************************************************************** ** ** https://www.qxorm.com/ ** Copyright (C) 2013 Lionel Marty (contact@qxorm.com) ** ** This file is part of the QxOrm library ** ** This software is provided 'as-is', without any express or implied ** warranty. In no event will the authors be held liable for any ** damages arising from the use of this software ** ** Commercial Usage ** Licensees holding valid commercial QxOrm licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Lionel Marty ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file 'license.gpl3.txt' included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met : http://www.gnu.org/copyleft/gpl.html ** ** If you are unsure which license is appropriate for your use, or ** if you have questions regarding the use of this file, please contact : ** contact@qxorm.com ** ****************************************************************************/ #ifndef _QX_FUNCTION_7_H_ #define _QX_FUNCTION_7_H_ #ifdef _MSC_VER #pragma once #endif /*! * \file QxFunction_7.h * \author Lionel Marty * \ingroup QxFunction * \brief Concrete function class registered into QxOrm context with 7 parameters */ #include #include namespace qx { /*! * \ingroup QxFunction * \brief qx::QxFunction_7 : concrete function registered into QxOrm context defined into class Owner, returning an object of type R and with 7 parameters P1, P2, P3, P4, P5, P6, P7 */ template class QxFunction_7 : public IxFunction { public: typedef std::function type_fct; typedef typename qx::trait::remove_attr::type type_P1; typedef typename qx::trait::remove_attr::type type_P2; typedef typename qx::trait::remove_attr::type type_P3; typedef typename qx::trait::remove_attr::type type_P4; typedef typename qx::trait::remove_attr::type type_P5; typedef typename qx::trait::remove_attr::type type_P6; typedef typename qx::trait::remove_attr::type type_P7; QX_FUNCTION_CLASS_MEMBER_FCT(QxFunction_7); virtual int getParamCount() const { return 7; } virtual qx_bool isValidParams(const QString & params) const { Q_UNUSED(params); return true; } virtual qx_bool isValidParams(const type_any_params & params) const { Q_UNUSED(params); return true; } private: template struct QxInvokerFct { static inline qx_bool invoke(void * pOwner, const T & params, qx::any * ret, const QxFunction_7 * pThis) { QX_FUNCTION_INVOKE_START_WITH_OWNER(); QX_FUNCTION_FETCH_PARAM(type_P1, p1, get_param_1); QX_FUNCTION_FETCH_PARAM(type_P2, p2, get_param_2); QX_FUNCTION_FETCH_PARAM(type_P3, p3, get_param_3); QX_FUNCTION_FETCH_PARAM(type_P4, p4, get_param_4); QX_FUNCTION_FETCH_PARAM(type_P5, p5, get_param_5); QX_FUNCTION_FETCH_PARAM(type_P6, p6, get_param_6); QX_FUNCTION_FETCH_PARAM(type_P7, p7, get_param_7); try { pThis->m_fct(static_cast(pOwner), p1, p2, p3, p4, p5, p6, p7); } QX_FUNCTION_CATCH_AND_RETURN_INVOKE(); } }; template struct QxInvokerFct { static inline qx_bool invoke(void * pOwner, const T & params, qx::any * ret, const QxFunction_7 * pThis) { QX_FUNCTION_INVOKE_START_WITH_OWNER(); QX_FUNCTION_FETCH_PARAM(type_P1, p1, get_param_1); QX_FUNCTION_FETCH_PARAM(type_P2, p2, get_param_2); QX_FUNCTION_FETCH_PARAM(type_P3, p3, get_param_3); QX_FUNCTION_FETCH_PARAM(type_P4, p4, get_param_4); QX_FUNCTION_FETCH_PARAM(type_P5, p5, get_param_5); QX_FUNCTION_FETCH_PARAM(type_P6, p6, get_param_6); QX_FUNCTION_FETCH_PARAM(type_P7, p7, get_param_7); try { R retTmp = pThis->m_fct(static_cast(pOwner), p1, p2, p3, p4, p5, p6, p7); if (ret) { (* ret) = qx::any(retTmp); } } QX_FUNCTION_CATCH_AND_RETURN_INVOKE(); } }; }; template class QxFunction_7 : public IxFunction { public: typedef std::function type_fct; typedef typename qx::trait::remove_attr::type type_P1; typedef typename qx::trait::remove_attr::type type_P2; typedef typename qx::trait::remove_attr::type type_P3; typedef typename qx::trait::remove_attr::type type_P4; typedef typename qx::trait::remove_attr::type type_P5; typedef typename qx::trait::remove_attr::type type_P6; typedef typename qx::trait::remove_attr::type type_P7; QX_FUNCTION_CLASS_FCT(QxFunction_7); virtual int getParamCount() const { return 7; } virtual qx_bool isValidParams(const QString & params) const { Q_UNUSED(params); return true; } virtual qx_bool isValidParams(const type_any_params & params) const { Q_UNUSED(params); return true; } private: template struct QxInvokerFct { static inline qx_bool invoke(const T & params, qx::any * ret, const QxFunction_7 * pThis) { QX_FUNCTION_INVOKE_START_WITHOUT_OWNER(); QX_FUNCTION_FETCH_PARAM(type_P1, p1, get_param_1); QX_FUNCTION_FETCH_PARAM(type_P2, p2, get_param_2); QX_FUNCTION_FETCH_PARAM(type_P3, p3, get_param_3); QX_FUNCTION_FETCH_PARAM(type_P4, p4, get_param_4); QX_FUNCTION_FETCH_PARAM(type_P5, p5, get_param_5); QX_FUNCTION_FETCH_PARAM(type_P6, p6, get_param_6); QX_FUNCTION_FETCH_PARAM(type_P7, p7, get_param_7); try { pThis->m_fct(p1, p2, p3, p4, p5, p6, p7); } QX_FUNCTION_CATCH_AND_RETURN_INVOKE(); } }; template struct QxInvokerFct { static inline qx_bool invoke(const T & params, qx::any * ret, const QxFunction_7 * pThis) { QX_FUNCTION_INVOKE_START_WITHOUT_OWNER(); QX_FUNCTION_FETCH_PARAM(type_P1, p1, get_param_1); QX_FUNCTION_FETCH_PARAM(type_P2, p2, get_param_2); QX_FUNCTION_FETCH_PARAM(type_P3, p3, get_param_3); QX_FUNCTION_FETCH_PARAM(type_P4, p4, get_param_4); QX_FUNCTION_FETCH_PARAM(type_P5, p5, get_param_5); QX_FUNCTION_FETCH_PARAM(type_P6, p6, get_param_6); QX_FUNCTION_FETCH_PARAM(type_P7, p7, get_param_7); try { R retTmp = pThis->m_fct(p1, p2, p3, p4, p5, p6, p7); if (ret) { (* ret) = qx::any(retTmp); } } QX_FUNCTION_CATCH_AND_RETURN_INVOKE(); } }; }; namespace function { template IxFunction_ptr bind_fct_7(const typename QxFunction_7::type_fct & fct) { typedef std::is_same qx_verify_owner_tmp; static_assert(qx_verify_owner_tmp::value, "qx_verify_owner_tmp::value"); IxFunction_ptr ptr = std::make_shared >(fct); return ptr; } template IxFunction_ptr bind_member_fct_7(const typename QxFunction_7::type_fct & fct) { typedef std::is_same qx_verify_owner_tmp; static_assert(! qx_verify_owner_tmp::value, "! qx_verify_owner_tmp::value"); IxFunction_ptr ptr = std::make_shared >(fct); return ptr; } } // namespace function } // namespace qx #endif // _QX_FUNCTION_7_H_