Index: core/fxcrt/fx_basic_bstring.cpp |
diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp |
index aa63edfdc1c1f38e0405d006bf9266ccccbf4200..3e4e9c354e912df11e2941fcaefa6c4e1c5e9f99 100644 |
--- a/core/fxcrt/fx_basic_bstring.cpp |
+++ b/core/fxcrt/fx_basic_bstring.cpp |
@@ -11,7 +11,11 @@ |
#include "core/fxcrt/include/fx_basic.h" |
#include "third_party/base/numerics/safe_math.h" |
-static int _Buffer_itoa(char* buf, int i, uint32_t flags) { |
+template class CFX_StringDataTemplate<FX_CHAR>; |
+ |
+namespace { |
+ |
+int Buffer_itoa(char* buf, int i, uint32_t flags) { |
if (i == 0) { |
buf[0] = '0'; |
return 1; |
@@ -44,76 +48,7 @@ static int _Buffer_itoa(char* buf, int i, uint32_t flags) { |
return len; |
} |
-CFX_ByteString CFX_ByteString::FormatInteger(int i, uint32_t flags) { |
- char buf[32]; |
- return CFX_ByteStringC(buf, _Buffer_itoa(buf, i, flags)); |
-} |
- |
-// static |
-CFX_ByteString::StringData* CFX_ByteString::StringData::Create( |
- FX_STRSIZE nLen) { |
- FXSYS_assert(nLen > 0); |
- |
- // Fixed portion of header plus a NUL char not included in m_nAllocLength. |
- // sizeof(FX_CHAR) is always 1, used for consistency with CFX_Widestring. |
- int overhead = offsetof(StringData, m_String) + sizeof(FX_CHAR); |
- pdfium::base::CheckedNumeric<int> nSize = nLen; |
- nSize += overhead; |
- |
- // Now round to an 8-byte boundary. We'd expect that this is the minimum |
- // granularity of any of the underlying allocators, so there may be cases |
- // where we can save a re-alloc when adding a few characters to a string |
- // by using this otherwise wasted space. |
- nSize += 7; |
- int totalSize = nSize.ValueOrDie() & ~7; |
- int usableSize = totalSize - overhead; |
- FXSYS_assert(usableSize >= nLen); |
- |
- void* pData = FX_Alloc(uint8_t, totalSize); |
- return new (pData) StringData(nLen, usableSize); |
-} |
- |
-CFX_ByteString::StringData* CFX_ByteString::StringData::Create( |
- const StringData& other) { |
- StringData* result = Create(other.m_nDataLength); |
- result->CopyContents(other); |
- return result; |
-} |
- |
-CFX_ByteString::StringData* CFX_ByteString::StringData::Create( |
- const FX_CHAR* pStr, |
- FX_STRSIZE nLen) { |
- StringData* result = Create(nLen); |
- result->CopyContents(pStr, nLen); |
- return result; |
-} |
- |
-CFX_ByteString::StringData::StringData(FX_STRSIZE dataLen, FX_STRSIZE allocLen) |
- : m_nRefs(0), m_nDataLength(dataLen), m_nAllocLength(allocLen) { |
- FXSYS_assert(dataLen >= 0); |
- FXSYS_assert(dataLen <= allocLen); |
- m_String[dataLen] = 0; |
-} |
- |
-void CFX_ByteString::StringData::CopyContents(const StringData& other) { |
- FXSYS_assert(other.m_nDataLength <= m_nAllocLength); |
- FXSYS_memcpy(m_String, other.m_String, other.m_nDataLength + 1); |
-} |
- |
-void CFX_ByteString::StringData::CopyContents(const FX_CHAR* pStr, |
- FX_STRSIZE nLen) { |
- FXSYS_assert(nLen >= 0 && nLen <= m_nAllocLength); |
- FXSYS_memcpy(m_String, pStr, nLen); |
- m_String[nLen] = 0; |
-} |
- |
-void CFX_ByteString::StringData::CopyContentsAt(FX_STRSIZE offset, |
- const FX_CHAR* pStr, |
- FX_STRSIZE nLen) { |
- FXSYS_assert(offset >= 0 && nLen >= 0 && offset + nLen <= m_nAllocLength); |
- FXSYS_memcpy(m_String + offset, pStr, nLen); |
- m_String[offset + nLen] = 0; |
-} |
+} // namespace |
CFX_ByteString::CFX_ByteString(const FX_CHAR* pStr, FX_STRSIZE nLen) { |
if (nLen < 0) |
@@ -451,6 +386,11 @@ void CFX_ByteString::AllocCopy(CFX_ByteString& dest, |
#define FORCE_UNICODE 0x20000 |
#define FORCE_INT64 0x40000 |
+CFX_ByteString CFX_ByteString::FormatInteger(int i, uint32_t flags) { |
+ char buf[32]; |
+ return CFX_ByteStringC(buf, Buffer_itoa(buf, i, flags)); |
+} |
+ |
void CFX_ByteString::FormatV(const FX_CHAR* pFormat, va_list argList) { |
va_list argListSave; |
#if defined(__ARMCC_VERSION) || \ |