mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 15:45:42 +00:00
SmallString: Add vformat overloads
This commit is contained in:
parent
1809885927
commit
f75a5605eb
|
@ -3,6 +3,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "small_string.h"
|
||||
#include "types.h"
|
||||
|
||||
#include "fmt/core.h"
|
||||
|
@ -94,6 +95,31 @@ public:
|
|||
static void AddPrefix(Error* errptr, std::string_view prefix);
|
||||
static void AddSuffix(Error* errptr, std::string_view prefix);
|
||||
|
||||
template<typename... T>
|
||||
void AddPrefixFmt(fmt::format_string<T...> fmt, T&&... args)
|
||||
{
|
||||
AddPrefix(TinyString::from_vformat(fmt::string_view(fmt), fmt::make_format_args(args...)));
|
||||
}
|
||||
|
||||
template<typename... T>
|
||||
void AddSuffixFmt(fmt::format_string<T...> fmt, T&&... args)
|
||||
{
|
||||
AddSuffix(TinyString::from_vformat(fmt::string_view(fmt), fmt::make_format_args(args...)));
|
||||
}
|
||||
|
||||
template<typename... T>
|
||||
static void AddPrefixFmt(Error* errptr, fmt::format_string<T...> fmt, T&&... args)
|
||||
{
|
||||
if (errptr)
|
||||
Error::AddPrefix(errptr, TinyString::from_vformat(fmt::string_view(fmt), fmt::make_format_args(args...)));
|
||||
}
|
||||
template<typename... T>
|
||||
static void AddSuffixFmt(Error* errptr, fmt::format_string<T...> fmt, T&&... args)
|
||||
{
|
||||
if (errptr)
|
||||
Error::AddSuffix(errptr, TinyString::from_vformat(fmt::string_view(fmt), fmt::make_format_args(args...)));
|
||||
}
|
||||
|
||||
Error& operator=(const Error& e);
|
||||
Error& operator=(Error&& e);
|
||||
bool operator==(const Error& e) const;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#include "small_string.h"
|
||||
|
@ -439,6 +439,12 @@ void SmallStringBase::assign(const std::string_view str)
|
|||
append(str.data(), static_cast<u32>(str.size()));
|
||||
}
|
||||
|
||||
void SmallStringBase::vformat(fmt::string_view fmt, fmt::format_args args)
|
||||
{
|
||||
clear();
|
||||
fmt::vformat_to(std::back_inserter(*this), fmt, args);
|
||||
}
|
||||
|
||||
bool SmallStringBase::equals(const char* str) const
|
||||
{
|
||||
if (m_length == 0)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
||||
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
|
||||
|
||||
#pragma once
|
||||
|
@ -98,6 +98,8 @@ public:
|
|||
template<typename... T>
|
||||
void format(fmt::format_string<T...> fmt, T&&... args);
|
||||
|
||||
void vformat(fmt::string_view fmt, fmt::format_args args);
|
||||
|
||||
// compare one string to another
|
||||
bool equals(const char* str) const;
|
||||
bool equals(const SmallStringBase& str) const;
|
||||
|
@ -316,6 +318,8 @@ public:
|
|||
template<typename... T>
|
||||
static SmallStackString from_format(fmt::format_string<T...> fmt, T&&... args);
|
||||
|
||||
static SmallStackString from_vformat(fmt::string_view fmt, fmt::format_args args);
|
||||
|
||||
private:
|
||||
char m_stack_buffer[L + 1];
|
||||
|
||||
|
@ -360,6 +364,14 @@ ALWAYS_INLINE SmallStackString<L> SmallStackString<L>::from_format(fmt::format_s
|
|||
return ret;
|
||||
}
|
||||
|
||||
template<u32 L>
|
||||
ALWAYS_INLINE SmallStackString<L> SmallStackString<L>::from_vformat(fmt::string_view fmt, fmt::format_args args)
|
||||
{
|
||||
SmallStackString<L> ret;
|
||||
fmt::vformat_to(std::back_inserter(ret), fmt, args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// stack string types
|
||||
using TinyString = SmallStackString<64>;
|
||||
using SmallString = SmallStackString<256>;
|
||||
|
|
Loading…
Reference in a new issue