engine/dep/include/ctti/detail/pretty_function.hpp
2024-12-02 18:48:18 -06:00

79 lines
2.6 KiB
C++

//
// Created by manu343726 on 4/08/15.
//
#ifndef CTTI_PRETTY_FUNCTION_HPP
#define CTTI_PRETTY_FUNCTION_HPP
#include "cstring.hpp"
#if defined(__clang__)
#define CTTI_PRETTY_FUNCTION __PRETTY_FUNCTION__
#elif defined(__GNUC__) && !defined(__clang__)
#define CTTI_PRETTY_FUNCTION __PRETTY_FUNCTION__
#elif defined(_MSC_VER)
#define CTTI_PRETTY_FUNCTION __FUNCSIG__
#else
#error "No support for this compiler."
#endif
namespace ctti
{
namespace pretty_function
{
template<typename T>
constexpr ctti::detail::cstring type()
{
return {CTTI_PRETTY_FUNCTION};
}
template<typename T, T Value>
constexpr ctti::detail::cstring value()
{
return {CTTI_PRETTY_FUNCTION};
}
}
}
#if defined(__clang__)
#define CTTI_TYPE_PRETTY_FUNCTION_PREFIX "ctti::detail::cstring ctti::pretty_function::type() [T = "
#define CTTI_TYPE_PRETTY_FUNCTION_SUFFIX "]"
#elif defined(__GNUC__) && !defined(__clang__)
#define CTTI_TYPE_PRETTY_FUNCTION_PREFIX "constexpr ctti::detail::cstring ctti::pretty_function::type() [with T = "
#define CTTI_TYPE_PRETTY_FUNCTION_SUFFIX "]"
#elif defined(_MSC_VER)
#define CTTI_TYPE_PRETTY_FUNCTION_PREFIX "struct ctti::detail::cstring __cdecl ctti::pretty_function::type<"
#define CTTI_TYPE_PRETTY_FUNCTION_SUFFIX ">(void)"
#else
#error "No support for this compiler."
#endif
#define CTTI_TYPE_PRETTY_FUNCTION_LEFT (sizeof(CTTI_TYPE_PRETTY_FUNCTION_PREFIX) - 1)
#define CTTI_TYPE_PRETTY_FUNCTION_RIGHT (sizeof(CTTI_TYPE_PRETTY_FUNCTION_SUFFIX) - 1)
#if defined(__clang__)
#define CTTI_VALUE_PRETTY_FUNCTION_PREFIX "ctti::detail::cstring ctti::pretty_function::value() [T = "
#define CTTI_VALUE_PRETTY_FUNCTION_SEPARATOR "; Value = "
#define CTTI_VALUE_PRETTY_FUNCTION_SUFFIX "]"
#elif defined(__GNUC__) && !defined(__clang__)
#define CTTI_VALUE_PRETTY_FUNCTION_PREFIX "constexpr ctti::detail::cstring ctti::pretty_function::value() [with T = "
#define CTTI_VALUE_PRETTY_FUNCTION_SEPARATOR "; T Value = "
#define CTTI_VALUE_PRETTY_FUNCTION_SUFFIX "]"
#elif defined(_MSC_VER)
#define CTTI_VALUE_PRETTY_FUNCTION_PREFIX "struct ctti::detail::cstring __cdecl ctti::pretty_function::value<"
#define CTTI_VALUE_PRETTY_FUNCTION_SEPARATOR "; T Value = "
#define CTTI_VALUE_PRETTY_FUNCTION_SUFFIX ">(void)"
#else
#error "No support for this compiler."
#endif
#define CTTI_VALUE_PRETTY_FUNCTION_LEFT (sizeof(CTTI_VALUE_PRETTY_FUNCTION_PREFIX) - 1)
#define CTTI_VALUE_PRETTY_FUNCTION_SEPARATION (sizeof(CTTI_VALUE_PRETTY_FUNCTION_SEPARATOR) - 1)
#define CTTI_VALUE_PRETTY_FUNCTION_RIGHT (sizeof(CTTI_VALUE_PRETTY_FUNCTION_SUFFIX) - 1)
#endif //CTTI_PRETTY_FUNCTION_HPP