cOMS/compiler/gcc/TypeName.h
Dennis Eichhorn 2883ca0841
Some checks failed
CodeQL / Analyze (${{ matrix.language }}) (autobuild, c-cpp) (push) Has been cancelled
Microsoft C++ Code Analysis / Analyze (push) Has been cancelled
prepare for changes
2025-04-21 18:11:26 +00:00

47 lines
1.4 KiB
C++

/**
* Jingga
*
* @copyright Jingga
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
#ifndef COMS_COMPILER_GCC_TYPE_NAME_H
#define COMS_COMPILER_GCC_TYPE_NAME_H
#include "CompilerUtils.h"
#include "../../utils/StringUtils.h"
template<typename T>
constexpr auto GetRawTypeName() {
constexpr const char* fn = __PRETTY_FUNCTION__;
constexpr const char* prefix = "T = ";
constexpr const char* suffix = "]";
constexpr const char* start = str_find_constexpr(fn, prefix);
constexpr const char* adjusted_start = start ? start + str_length_constexpr(prefix) : fn;
constexpr const char* end = str_find_constexpr(adjusted_start, suffix);
constexpr const char* final_start = end ? adjusted_start : fn;
constexpr size_t length = end ? (end - adjusted_start) : str_length_constexpr(adjusted_start);
// Create a struct that holds the string in a constexpr-friendly way
struct Result {
char str[128] = {};
constexpr Result() {
for (size_t i = 0; i < length && i < 127; ++i) {
str[i] = final_start[i];
}
str[length < 127 ? length : 127] = '\0';
}
constexpr const char* Get() const { return str; }
};
// This will create a static storage duration object when used at runtime
static constexpr Result result;
return result.Get();
}
#endif