Move {Byte,Wide}String::Insert() to StringTemplate<T>
Change-Id: I42e006f5e26b492fd6ea44dc9440e4b3846b2b8e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/116654
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp
index 2b17975..4516f81 100644
--- a/core/fxcrt/bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -332,20 +332,6 @@
m_pData->m_String[index] = c;
}
-size_t ByteString::Insert(size_t index, char ch) {
- const size_t cur_length = GetLength();
- if (!IsValidLength(index))
- return cur_length;
-
- const size_t new_length = cur_length + 1;
- ReallocBeforeWrite(new_length);
- FXSYS_memmove(m_pData->m_String + index + 1, m_pData->m_String + index,
- new_length - index);
- m_pData->m_String[index] = ch;
- m_pData->m_nDataLength = new_length;
- return new_length;
-}
-
std::optional<size_t> ByteString::Find(char ch, size_t start) const {
if (!m_pData)
return std::nullopt;
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
index b985adc..20de629 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -102,10 +102,6 @@
void SetAt(size_t index, char c);
- size_t Insert(size_t index, char ch);
- size_t InsertAtFront(char ch) { return Insert(0, ch); }
- size_t InsertAtBack(char ch) { return Insert(GetLength(), ch); }
-
void Reserve(size_t len);
ByteString Substr(size_t offset) const;
diff --git a/core/fxcrt/string_template.cpp b/core/fxcrt/string_template.cpp
index f2be1ee..8eb95cf 100644
--- a/core/fxcrt/string_template.cpp
+++ b/core/fxcrt/string_template.cpp
@@ -101,6 +101,21 @@
}
template <typename T>
+size_t StringTemplate<T>::Insert(size_t index, T ch) {
+ const size_t cur_length = GetLength();
+ if (!IsValidLength(index)) {
+ return cur_length;
+ }
+ const size_t new_length = cur_length + 1;
+ ReallocBeforeWrite(new_length);
+ fxcrt::spanmove(m_pData->capacity_span().subspan(index + 1),
+ m_pData->capacity_span().subspan(index, new_length - index));
+ m_pData->m_String[index] = ch;
+ m_pData->m_nDataLength = new_length;
+ return new_length;
+}
+
+template <typename T>
size_t StringTemplate<T>::Delete(size_t index, size_t count) {
if (!m_pData) {
return 0;
diff --git a/core/fxcrt/string_template.h b/core/fxcrt/string_template.h
index b81aaef..4df22ce 100644
--- a/core/fxcrt/string_template.h
+++ b/core/fxcrt/string_template.h
@@ -104,6 +104,11 @@
// to GetBuffer(), to indicate how much of the buffer was actually used.
void ReleaseBuffer(size_t nNewLength);
+ // Returns size of string following insertion.
+ size_t Insert(size_t index, T ch);
+ size_t InsertAtFront(T ch) { return Insert(0, ch); }
+ size_t InsertAtBack(T ch) { return Insert(GetLength(), ch); }
+
// Returns number of instances of `ch` removed.
size_t Remove(T ch);
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index 79ffa10..cdbf47d 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -647,20 +647,6 @@
return Substr(GetLength() - count, count);
}
-size_t WideString::Insert(size_t index, wchar_t ch) {
- const size_t cur_length = GetLength();
- if (!IsValidLength(index))
- return cur_length;
-
- const size_t new_length = cur_length + 1;
- ReallocBeforeWrite(new_length);
- FXSYS_wmemmove(m_pData->m_String + index + 1, m_pData->m_String + index,
- new_length - index);
- m_pData->m_String[index] = ch;
- m_pData->m_nDataLength = new_length;
- return new_length;
-}
-
std::optional<size_t> WideString::Find(wchar_t ch, size_t start) const {
if (!m_pData)
return std::nullopt;
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
index e671dd1..8c18b00 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -116,10 +116,6 @@
WideString First(size_t count) const;
WideString Last(size_t count) const;
- size_t Insert(size_t index, wchar_t ch);
- size_t InsertAtFront(wchar_t ch) { return Insert(0, ch); }
- size_t InsertAtBack(wchar_t ch) { return Insert(GetLength(), ch); }
-
void MakeLower();
void MakeUpper();