SpECTRE Documentation Coverage Report
Current view: top level - Utilities/TypeTraits - FunctionInfo.hpp Hit Total Coverage
Commit: 22d59f0ec25cca6837adf897838d802980351e0d Lines: 1 2 50.0 %
Date: 2024-04-27 04:42:14
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include "Utilities/TMPL.hpp"
       7             : 
       8             : namespace tt {
       9             : /// \cond
      10             : namespace detail {
      11             : template <typename T>
      12             : struct function_info_impl;
      13             : 
      14             : template <typename Ret, typename... Args>
      15             : struct function_info_impl<Ret(Args...)> {
      16             :   using return_type = Ret;
      17             :   using argument_types = tmpl::list<Args...>;
      18             :   using class_type = void;
      19             : };
      20             : 
      21             : template <typename Ret, typename... Args>
      22             : struct function_info_impl<Ret(Args...) noexcept> {
      23             :   using return_type = Ret;
      24             :   using argument_types = tmpl::list<Args...>;
      25             :   using class_type = void;
      26             : };
      27             : 
      28             : #define FUNCTION_INFO_IMPL_FUNCTION_PTR(MODIFIERS, NOEXCEPT_STATUS)        \
      29             :   template <typename Ret,                                                  \
      30             :             typename... Args> /* NOLINTNEXTLINE(misc-macro-parentheses) */ \
      31             :   struct function_info_impl<Ret (*MODIFIERS)(Args...) NOEXCEPT_STATUS> {   \
      32             :     using return_type = Ret;                                               \
      33             :     using argument_types = tmpl::list<Args...>;                            \
      34             :     using class_type = void;                                               \
      35             :   }
      36             : 
      37             : FUNCTION_INFO_IMPL_FUNCTION_PTR(, );
      38             : FUNCTION_INFO_IMPL_FUNCTION_PTR(, noexcept);
      39             : FUNCTION_INFO_IMPL_FUNCTION_PTR(const, );
      40             : FUNCTION_INFO_IMPL_FUNCTION_PTR(const, noexcept);
      41             : FUNCTION_INFO_IMPL_FUNCTION_PTR(volatile, );
      42             : FUNCTION_INFO_IMPL_FUNCTION_PTR(volatile, noexcept);
      43             : FUNCTION_INFO_IMPL_FUNCTION_PTR(const volatile, );
      44             : FUNCTION_INFO_IMPL_FUNCTION_PTR(const volatile, noexcept);
      45             : #undef FUNCTION_INFO_IMPL_FUNCTION_PTR
      46             : 
      47             : #define FUNCTION_INFO_IMPL_CLASS(MODIFIERS)                                \
      48             :   template <typename Ret, typename Class,                                  \
      49             :             typename... Args> /* NOLINTNEXTLINE(misc-macro-parentheses) */ \
      50             :   struct function_info_impl<Ret (Class::*)(Args...) MODIFIERS> {           \
      51             :     using return_type = Ret;                                               \
      52             :     using argument_types = tmpl::list<Args...>;                            \
      53             :     using class_type = Class;                                              \
      54             :   }
      55             : 
      56             : FUNCTION_INFO_IMPL_CLASS();
      57             : FUNCTION_INFO_IMPL_CLASS(const);
      58             : FUNCTION_INFO_IMPL_CLASS(noexcept);
      59             : FUNCTION_INFO_IMPL_CLASS(volatile);
      60             : FUNCTION_INFO_IMPL_CLASS(const noexcept);
      61             : FUNCTION_INFO_IMPL_CLASS(const volatile);
      62             : FUNCTION_INFO_IMPL_CLASS(const volatile noexcept);
      63             : FUNCTION_INFO_IMPL_CLASS(volatile noexcept);
      64             : #undef FUNCTION_INFO_IMPL_CLASS
      65             : }  // namespace detail
      66             : /// \endcond
      67             : 
      68             : /*!
      69             :  * \ingroup TypeTraitsGroup
      70             :  * \brief Returns a struct that contains the return type, argument types, and
      71             :  * the class type if the `F` is a non-static member function
      72             :  *
      73             :  * The return class has member type aliases:
      74             :  * - `return_type` The return type of the function
      75             :  * - `argument_types` A `tmpl::list` of the arguments types of the function
      76             :  * - `class_type` The type of the class if the function is a non-static member
      77             :  * function, otherwise `void`
      78             :  *
      79             :  * \note For static member variables the class will be `void` because they are
      80             :  * effectively free functions.
      81             :  */
      82             : template <typename F>
      83           1 : using function_info = detail::function_info_impl<F>;
      84             : }  // namespace tt

Generated by: LCOV version 1.14