⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dl_call.hpp

📁 新版本TR1的stl
💻 HPP
📖 第 1 页 / 共 5 页
字号:

#endif /* 0 */
    }
/// @}

/// \name Function Descriptor Discrimination
/// @{
public:
/// @}

/// \name Module Discrimination
/// @{
public:
    struct library_is_handle
    {};

    struct library_is_not_handle
    {};
/// @}

};


#if defined(STLSOFT_COMPILER_IS_MSVC) || \
    defined(STLSOFT_COMPILER_IS_GCCx)
inline dl_call_traits::library_is_handle test_library_(dl_call_traits::library_handle_type )
{
    return dl_call_traits::library_is_handle();
}
#else /* ? compiler */
inline dl_call_traits::library_is_handle test_library_(dl_call_traits::library_handle_type const&)
{
    return dl_call_traits::library_is_handle();
}
#endif /* compiler */

template <ss_typename_param_k T>
inline dl_call_traits::library_is_not_handle test_library_(T const&)
{
    return dl_call_traits::library_is_not_handle();
}

/* /////////////////////////////////////////////////////////////////////////
 * Helper functions
 */

inline dl_call_traits::entry_point_type lookup_symbol_(dl_call_traits::library_handle_type hinst, char const* functionName)
{
    dl_call_traits::entry_point_type    fp  =   dl_call_traits::get_symbol(hinst, functionName);

    if(dl_call_traits::entry_point_type() == fp)
    {
        STLSOFT_THROW_X(missing_entry_point_exception(functionName, errno));
    }

    return fp;
}

/* ////////////////////////////////////////////////////////////////////// */

/** \name Invocators
 *
 * \ingroup group__library__dl
 *
 * These calling convention-specific functions perform the invocation of the
 * given function pointer with the requisite arguments.
 *
 * @{
 */

//[<[STLSOFT-AUTO:DL_CALL-INVOCATORS:BEGIN]>]

// 0 params

template< ss_typename_param_k R
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp)
{
  R (STLSOFT_CDECL *pfn)();

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn();
}

// 1 param

template< ss_typename_param_k R
        , ss_typename_param_k A0
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0)
{
  R (STLSOFT_CDECL *pfn)(A0 a0);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0);
}

// 2 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1);
}

// 3 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2);
}

// 4 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3);
}

// 5 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3, a4);
}

// 6 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4, ss_typename_param_k A5
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3, a4, a5);
}

// 7 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4, ss_typename_param_k A5, ss_typename_param_k A6
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3, a4, a5, a6);
}

// 8 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4, ss_typename_param_k A5, ss_typename_param_k A6, ss_typename_param_k A7
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3, a4, a5, a6, a7);
}

// 9 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4, ss_typename_param_k A5, ss_typename_param_k A6, ss_typename_param_k A7, ss_typename_param_k A8
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3, a4, a5, a6, a7, a8);
}

// 10 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4, ss_typename_param_k A5, ss_typename_param_k A6, ss_typename_param_k A7, ss_typename_param_k A8, ss_typename_param_k A9
        >
inline R dl_call_invoke_cdecl(dl_call_traits::entry_point_type fp, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
{
  R (STLSOFT_CDECL *pfn)(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9);

  reinterpret_cast<dl_call_traits::entry_point_type&>(pfn) = fp;

  return pfn(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
}

// 11 params

template< ss_typename_param_k R
        , ss_typename_param_k A0, ss_typename_param_k A1, ss_typename_param_k A2, ss_typename_param_k A3, ss_typename_param_k A4, ss_typename_param_k A5, ss_typename_param_k A6, ss_typename_param_k A7, ss_typename_param_k A8, ss_typename_param_k A9, ss_typename_param_k A10
        >

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -