mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
Implement const_str_t<> helper
This commit is contained in:
parent
8ae727ca04
commit
f0ad20a250
@ -84,19 +84,19 @@ namespace logs
|
|||||||
|
|
||||||
#define GEN_LOG_METHOD(_sev)\
|
#define GEN_LOG_METHOD(_sev)\
|
||||||
const message msg_##_sev{this, level::_sev};\
|
const message msg_##_sev{this, level::_sev};\
|
||||||
template <typename CharT, usz N, typename... Args>\
|
template <typename... Args>\
|
||||||
void _sev(const CharT(&fmt)[N], const Args&... args)\
|
void _sev(const const_str& fmt, const Args&... args)\
|
||||||
{\
|
{\
|
||||||
if (level::_sev <= enabled.observe()) [[unlikely]]\
|
if (level::_sev <= enabled.observe()) [[unlikely]]\
|
||||||
{\
|
{\
|
||||||
if constexpr (sizeof...(Args) > 0)\
|
if constexpr (sizeof...(Args) > 0)\
|
||||||
{\
|
{\
|
||||||
static constexpr fmt_type_info type_list[sizeof...(Args) + 1]{fmt_type_info::make<fmt_unveil_t<Args>>()...};\
|
static constexpr fmt_type_info type_list[sizeof...(Args) + 1]{fmt_type_info::make<fmt_unveil_t<Args>>()...};\
|
||||||
msg_##_sev.broadcast(reinterpret_cast<const char*>(fmt), type_list, u64{fmt_unveil<Args>::get(args)}...);\
|
msg_##_sev.broadcast(fmt, type_list, u64{fmt_unveil<Args>::get(args)}...);\
|
||||||
}\
|
}\
|
||||||
else\
|
else\
|
||||||
{\
|
{\
|
||||||
msg_##_sev.broadcast(reinterpret_cast<const char*>(fmt), nullptr);\
|
msg_##_sev.broadcast(fmt, nullptr);\
|
||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
}\
|
}\
|
||||||
|
@ -670,6 +670,80 @@ constexpr unsigned __builtin_COLUMN()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
template <usz Size = usz(-1)>
|
||||||
|
struct const_str_t
|
||||||
|
{
|
||||||
|
static constexpr usz size = Size;
|
||||||
|
|
||||||
|
char8_t chars[Size + 1]{};
|
||||||
|
|
||||||
|
constexpr const_str_t(const char(&a)[Size + 1])
|
||||||
|
{
|
||||||
|
for (usz i = 0; i <= Size; i++)
|
||||||
|
chars[i] = a[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr const_str_t(const char8_t(&a)[Size + 1])
|
||||||
|
{
|
||||||
|
for (usz i = 0; i <= Size; i++)
|
||||||
|
chars[i] = a[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
operator const char*() const
|
||||||
|
{
|
||||||
|
return reinterpret_cast<const char*>(chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr operator const char8_t*() const
|
||||||
|
{
|
||||||
|
return chars;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct const_str_t<usz(-1)>
|
||||||
|
{
|
||||||
|
const usz size;
|
||||||
|
|
||||||
|
const union
|
||||||
|
{
|
||||||
|
const char8_t* chars;
|
||||||
|
const char* chars2;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <usz N>
|
||||||
|
constexpr const_str_t(const char8_t(&a)[N])
|
||||||
|
: size(N - 1)
|
||||||
|
, chars(+a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <usz N>
|
||||||
|
constexpr const_str_t(const char(&a)[N])
|
||||||
|
: size(N - 1)
|
||||||
|
, chars2(+a)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
operator const char*() const
|
||||||
|
{
|
||||||
|
return std::launder(chars2);
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr operator const char8_t*() const
|
||||||
|
{
|
||||||
|
return chars;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <usz Size>
|
||||||
|
const_str_t(const char(&a)[Size]) -> const_str_t<Size - 1>;
|
||||||
|
|
||||||
|
template <usz Size>
|
||||||
|
const_str_t(const char8_t(&a)[Size]) -> const_str_t<Size - 1>;
|
||||||
|
|
||||||
|
using const_str = const_str_t<>;
|
||||||
|
|
||||||
struct src_loc
|
struct src_loc
|
||||||
{
|
{
|
||||||
u32 line;
|
u32 line;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user