Skip to main content

The reflection-inlines.h File Reference

C++ header file with inline implementations for the µTest++ reflection utilities. More...

Included Headers

#include <cstdint>

Namespaces Index

namespacemicro_os_plus

The primary namespace for the µOS++ framework. More...

namespacemicro_os_plus::micro_test_plus

Primary namespace for the µTest++ testing framework. More...

namespacemicro_os_plus::micro_test_plus::reflection

Reflection utilities for the µTest++ testing framework. More...

Functions Index

constexpr std::string_viewtype_name (void)

Extract the type name from the __PRETTY_FUNCTION__ macro. More...

Description

C++ header file with inline implementations for the µTest++ reflection utilities.

This header provides the inline implementations for the reflection utilities used within the µTest++ framework. It includes the logic for capturing and reporting source location information, such as file names and line numbers, as well as utilities for extracting type names at compile time using compiler-specific macros.

The source_location implementation offers a lightweight, constexpr-compatible alternative to std::source_location, enabling enhanced diagnostics and reporting even in environments lacking C++20 support. The type_name utility leverages compiler intrinsics to obtain human-readable type names for improved test output and debugging.

All definitions reside within the micro_os_plus::micro_test_plus::reflection namespace, ensuring clear separation from user code and minimising the risk of naming conflicts.

The header files are organised within the include/micro-os-plus/micro-test-plus folder to maintain a structured and modular codebase.

This file is intended solely for internal use within the framework and should not be included directly by user code.

Functions

type_name()

template <class T>
std::string_view micro_os_plus::micro_test_plus::reflection::type_name (void)
nodiscardconstexpr

Extract the type name from the __PRETTY_FUNCTION__ macro.

This function template parses the compiler-specific __PRETTY_FUNCTION__ macro to extract a concise type name for the template parameter T.

The implementation is compiler-dependent and may require adjustment for different toolchains. It is primarily intended for internal use within the µTest++ framework to support improved diagnostics and reporting.

Template Parameters
TThe type whose name is to be extracted.
Parameters

None.

Returns

A std::string_view containing the extracted type name.

Definition at line 133 of file reflection-inlines.h.

File Listing

The file content with the documentation metadata removed is:

1/*
2 * This file is part of the µOS++ project (https://micro-os-plus.github.io/).
3 * Copyright (c) 2021 Liviu Ionescu. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software
6 * for any purpose is hereby granted, under the terms of the MIT license.
7 *
8 * If a copy of the license was not distributed with this file, it can
10 *
11 * Major parts of the code are inspired from v1.1.8 of the Boost UT project,
12 * released under the terms of the Boost Version 1 Software License,
13 * which can be obtained from https://www.boost.org/LICENSE&#95;1&#95;0.txt.
14 */
15
16// ----------------------------------------------------------------------------
17
47
48#ifndef MICRO_TEST_PLUS_REFLECTION_INLINES_H_
49#define MICRO_TEST_PLUS_REFLECTION_INLINES_H_
50
51// ----------------------------------------------------------------------------
52
53#ifdef __cplusplus
54
55// ----------------------------------------------------------------------------
56
57#include <cstdint>
58
59// #include "type-traits.h"
60
61// ----------------------------------------------------------------------------
62
63#if defined(__GNUC__)
64#pragma GCC diagnostic push
65#pragma GCC diagnostic ignored "-Waggregate-return"
66#if defined(__clang__)
67#pragma clang diagnostic ignored "-Wc++98-compat"
68#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
69#endif
70#endif
71
73{
74 // --------------------------------------------------------------------------
75
76 namespace reflection
77 {
78 // ------------------------------------------------------------------------
79
80#if !defined(__cpp_lib_source_location)
81
90 [[nodiscard]] constexpr auto
91 source_location::current (const char* file, unsigned int line) noexcept
92 {
94 sl.file_ = file;
95 sl.line_ = line;
96 return sl;
97 }
98
103 [[nodiscard]] constexpr auto
104 source_location::file_name (void) const noexcept
105 {
106 return file_;
107 }
108
113 [[nodiscard]] constexpr auto
114 source_location::line (void) const noexcept
115 {
116 return line_;
117 }
118
119#endif
120
131 template <class T>
132 [[nodiscard]] constexpr auto
133 type_name (void) -> std::string_view
134 {
135#if defined(__clang__)
136#pragma GCC diagnostic push
137#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
138 // printf("|%s|%zu|\n", __PRETTY_FUNCTION__, sizeof
139 // (__PRETTY_FUNCTION__)); printf("|%s|\n", &__PRETTY_FUNCTION__[78]);
140 return { &__PRETTY_FUNCTION__[78], sizeof (__PRETTY_FUNCTION__) - 80 };
141#pragma GCC diagnostic pop
142#elif defined(__GNUC__)
143 // printf("|%s|%zu|\n", __PRETTY_FUNCTION__, sizeof
144 // (__PRETTY_FUNCTION__)); printf("|%s|\n", &__PRETTY_FUNCTION__[93]);
145 return { &__PRETTY_FUNCTION__[93], sizeof (__PRETTY_FUNCTION__) - 144 };
146#else
147#error "Unsupported compiler"
148 return "Unsupported compiler";
149#endif
150 }
151
152 // ------------------------------------------------------------------------
153 } // namespace reflection
154
155 // --------------------------------------------------------------------------
156} // namespace micro_os_plus::micro_test_plus
157
158#if defined(__GNUC__)
159#pragma GCC diagnostic pop
160#endif
161
162// ----------------------------------------------------------------------------
163
164#endif // __cplusplus
165
166// ----------------------------------------------------------------------------
167
168#endif // MICRO_TEST_PLUS_REFLECTION_INLINES_H_
169
170// ----------------------------------------------------------------------------

Generated via docusaurus-plugin-doxygen by Doxygen 1.14.0.