mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-07 01:06:45 +08:00
upd: [imp] optimizes two formatting operations for short strings for fmt
This commit is contained in:
parent
a2dfde6a63
commit
f2e981c538
@ -67,8 +67,6 @@ LIBIMP_NODISCARD std::string fmt(A1 &&a1, A &&...args) {
|
|||||||
|
|
||||||
/// @brief Return the string directly.
|
/// @brief Return the string directly.
|
||||||
inline char const *to_string(char const *a) noexcept { return (a == nullptr) ? "" : a; }
|
inline char const *to_string(char const *a) noexcept { return (a == nullptr) ? "" : a; }
|
||||||
template <std::size_t N>
|
|
||||||
inline char const *to_string(char const (&a)[N]) noexcept { return a; }
|
|
||||||
inline std::string to_string(std::string const &a) noexcept { return a; }
|
inline std::string to_string(std::string const &a) noexcept { return a; }
|
||||||
inline std::string to_string(std::string &&a) noexcept { return std::move(a); }
|
inline std::string to_string(std::string &&a) noexcept { return std::move(a); }
|
||||||
LIBIMP_EXPORT std::string to_string(char const *a, span<char const> fstr) noexcept;
|
LIBIMP_EXPORT std::string to_string(char const *a, span<char const> fstr) noexcept;
|
||||||
|
|||||||
@ -74,8 +74,12 @@ std::string fmt_of_float(span<char const> fstr, span<char const> l) {
|
|||||||
|
|
||||||
template <typename A /*a fundamental or pointer type*/>
|
template <typename A /*a fundamental or pointer type*/>
|
||||||
std::string sprintf(std::string const &sfmt, A a) {
|
std::string sprintf(std::string const &sfmt, A a) {
|
||||||
auto sz = std::snprintf(nullptr, 0, sfmt.c_str(), a);
|
char sbuf[2048];
|
||||||
|
auto sz = std::snprintf(sbuf, sizeof(sbuf), sfmt.c_str(), a);
|
||||||
if (sz <= 0) return {};
|
if (sz <= 0) return {};
|
||||||
|
if (sz < sizeof(sbuf)) {
|
||||||
|
return sbuf;
|
||||||
|
}
|
||||||
std::string des;
|
std::string des;
|
||||||
des.resize(sz + 1);
|
des.resize(sz + 1);
|
||||||
if (std::snprintf(&des[0], des.size(), sfmt.c_str(), a) < 0) {
|
if (std::snprintf(&des[0], des.size(), sfmt.c_str(), a) < 0) {
|
||||||
|
|||||||
@ -14,8 +14,8 @@ TEST(fmt, operator) {
|
|||||||
|
|
||||||
TEST(fmt, to_string) {
|
TEST(fmt, to_string) {
|
||||||
/// @brief string
|
/// @brief string
|
||||||
EXPECT_EQ(imp::to_string(""), "");
|
EXPECT_STREQ(imp::to_string(""), "");
|
||||||
EXPECT_EQ(imp::to_string("%what%"), "%what%");
|
EXPECT_STREQ(imp::to_string("%what%"), "%what%");
|
||||||
EXPECT_EQ(imp::to_string("%what%", "10") , " %what%");
|
EXPECT_EQ(imp::to_string("%what%", "10") , " %what%");
|
||||||
EXPECT_EQ(imp::to_string("%what%", "-10"), "%what% ");
|
EXPECT_EQ(imp::to_string("%what%", "-10"), "%what% ");
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user