summaryrefslogtreecommitdiff
path: root/core/fxcrt
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt')
-rw-r--r--core/fxcrt/bytestring.cpp92
-rw-r--r--core/fxcrt/bytestring.h11
-rw-r--r--core/fxcrt/bytestring_unittest.cpp68
3 files changed, 66 insertions, 105 deletions
diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp
index ad3814b57e..e868678c9f 100644
--- a/core/fxcrt/bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -91,6 +91,57 @@ namespace fxcrt {
static_assert(sizeof(ByteString) <= sizeof(char*),
"Strings must not require more space than pointers");
+#define FORCE_ANSI 0x10000
+#define FORCE_UNICODE 0x20000
+#define FORCE_INT64 0x40000
+
+// static
+ByteString ByteString::FormatInteger(int i) {
+ char buf[32];
+ FXSYS_snprintf(buf, 32, "%d", i);
+ return ByteString(buf);
+}
+
+// static
+ByteString ByteString::FormatFloat(float d) {
+ char buf[32];
+ return ByteString(buf, FX_ftoa(d, buf));
+}
+
+// static
+ByteString ByteString::FormatV(const char* pFormat, va_list argList) {
+ va_list argListCopy;
+ va_copy(argListCopy, argList);
+ int nMaxLen = vsnprintf(nullptr, 0, pFormat, argListCopy);
+ va_end(argListCopy);
+
+ if (nMaxLen <= 0)
+ return "";
+
+ ByteString ret;
+ char* buf = ret.GetBuffer(nMaxLen);
+ if (buf) {
+ // In the following two calls, there's always space in the buffer for
+ // a terminating NUL that's not included in nMaxLen.
+ memset(buf, 0, nMaxLen + 1);
+ va_copy(argListCopy, argList);
+ vsnprintf(buf, nMaxLen + 1, pFormat, argListCopy);
+ va_end(argListCopy);
+ ret.ReleaseBuffer(ret.GetStringLength());
+ }
+ return ret;
+}
+
+// static
+ByteString ByteString::Format(const char* pFormat, ...) {
+ va_list argList;
+ va_start(argList, pFormat);
+ ByteString ret = FormatV(pFormat, argList);
+ va_end(argList);
+
+ return ret;
+}
+
ByteString::ByteString(const char* pStr, size_t nLen) {
if (nLen)
m_pData.Reset(StringData::Create(pStr, nLen));
@@ -485,42 +536,6 @@ void ByteString::AllocCopy(ByteString& dest,
dest.m_pData.Swap(pNewData);
}
-#define FORCE_ANSI 0x10000
-#define FORCE_UNICODE 0x20000
-#define FORCE_INT64 0x40000
-
-ByteString ByteString::FormatInteger(int i) {
- char buf[32];
- FXSYS_snprintf(buf, 32, "%d", i);
- return ByteString(buf);
-}
-
-void ByteString::FormatV(const char* pFormat, va_list argList) {
- va_list argListCopy;
- va_copy(argListCopy, argList);
- int nMaxLen = vsnprintf(nullptr, 0, pFormat, argListCopy);
- va_end(argListCopy);
- if (nMaxLen > 0) {
- GetBuffer(nMaxLen);
- if (m_pData) {
- // In the following two calls, there's always space in the buffer for
- // a terminating NUL that's not included in nMaxLen.
- memset(m_pData->m_String, 0, nMaxLen + 1);
- va_copy(argListCopy, argList);
- vsnprintf(m_pData->m_String, nMaxLen + 1, pFormat, argListCopy);
- va_end(argListCopy);
- ReleaseBuffer(GetStringLength());
- }
- }
-}
-
-void ByteString::Format(const char* pFormat, ...) {
- va_list argList;
- va_start(argList, pFormat);
- FormatV(pFormat, argList);
- va_end(argList);
-}
-
void ByteString::SetAt(size_t index, char c) {
ASSERT(IsValidIndex(index));
ReallocBeforeWrite(m_pData->m_nDataLength);
@@ -783,11 +798,6 @@ void ByteString::TrimLeft() {
TrimLeft("\x09\x0a\x0b\x0c\x0d\x20");
}
-ByteString ByteString::FormatFloat(float d) {
- char buf[32];
- return ByteString(buf, FX_ftoa(d, buf));
-}
-
std::ostream& operator<<(std::ostream& os, const ByteString& str) {
return os.write(str.c_str(), str.GetLength());
}
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
index f534b08b8a..1acece3aee 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -32,6 +32,11 @@ class ByteString {
using const_iterator = const CharType*;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+ static ByteString FormatInteger(int i);
+ static ByteString FormatFloat(float f);
+ static ByteString Format(const char* lpszFormat, ...);
+ static ByteString FormatV(const char* lpszFormat, va_list argList);
+
ByteString();
ByteString(const ByteString& other);
ByteString(ByteString&& other) noexcept;
@@ -138,9 +143,6 @@ class ByteString {
size_t InsertAtBack(char ch) { return Insert(GetLength(), ch); }
size_t Delete(size_t index, size_t count = 1);
- void Format(const char* lpszFormat, ...);
- void FormatV(const char* lpszFormat, va_list argList);
-
void Reserve(size_t len);
char* GetBuffer(size_t len);
void ReleaseBuffer(size_t len);
@@ -181,9 +183,6 @@ class ByteString {
uint32_t GetID() const { return AsStringView().GetID(); }
- static ByteString FormatInteger(int i);
- static ByteString FormatFloat(float f);
-
protected:
using StringData = StringDataTemplate<char>;
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index 4668fe1cc8..08c0e9211c 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -1448,67 +1448,19 @@ TEST(ByteStringView, AnyAllNoneOf) {
}
TEST(ByteString, FormatWidth) {
- {
- ByteString str;
- str.Format("%5d", 1);
- EXPECT_EQ(" 1", str);
- }
-
- {
- ByteString str;
- str.Format("%d", 1);
- EXPECT_EQ("1", str);
- }
-
- {
- ByteString str;
- str.Format("%*d", 5, 1);
- EXPECT_EQ(" 1", str);
- }
-
- {
- ByteString str;
- str.Format("%-1d", 1);
- EXPECT_EQ("1", str);
- }
-
- {
- ByteString str;
- str.Format("%0d", 1);
- EXPECT_EQ("1", str);
- }
+ EXPECT_EQ(" 1", ByteString::Format("%5d", 1));
+ EXPECT_EQ("1", ByteString::Format("%d", 1));
+ EXPECT_EQ(" 1", ByteString::Format("%*d", 5, 1));
+ EXPECT_EQ("1", ByteString::Format("%-1d", 1));
+ EXPECT_EQ("1", ByteString::Format("%0d", 1));
}
TEST(ByteString, FormatPrecision) {
- {
- ByteString str;
- str.Format("%.2f", 1.12345);
- EXPECT_EQ("1.12", str);
- }
-
- {
- ByteString str;
- str.Format("%.*f", 3, 1.12345);
- EXPECT_EQ("1.123", str);
- }
-
- {
- ByteString str;
- str.Format("%f", 1.12345);
- EXPECT_EQ("1.123450", str);
- }
-
- {
- ByteString str;
- str.Format("%-1f", 1.12345);
- EXPECT_EQ("1.123450", str);
- }
-
- {
- ByteString str;
- str.Format("%0f", 1.12345);
- EXPECT_EQ("1.123450", str);
- }
+ EXPECT_EQ("1.12", ByteString::Format("%.2f", 1.12345));
+ EXPECT_EQ("1.123", ByteString::Format("%.*f", 3, 1.12345));
+ EXPECT_EQ("1.123450", ByteString::Format("%f", 1.12345));
+ EXPECT_EQ("1.123450", ByteString::Format("%-1f", 1.12345));
+ EXPECT_EQ("1.123450", ByteString::Format("%0f", 1.12345));
}
TEST(ByteString, Empty) {