| Index: core/fxcrt/fx_basic_bstring.cpp
|
| diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp
|
| index 3e4e9c354e912df11e2941fcaefa6c4e1c5e9f99..2c2264a419fc2ce1a16605a9d827414e4c2a6192 100644
|
| --- a/core/fxcrt/fx_basic_bstring.cpp
|
| +++ b/core/fxcrt/fx_basic_bstring.cpp
|
| @@ -6,6 +6,7 @@
|
|
|
| #include <stddef.h>
|
|
|
| +#include <algorithm>
|
| #include <cctype>
|
|
|
| #include "core/fxcrt/include/fx_basic.h"
|
| @@ -48,6 +49,30 @@ int Buffer_itoa(char* buf, int i, uint32_t flags) {
|
| return len;
|
| }
|
|
|
| +const FX_CHAR* FX_strstr(const FX_CHAR* haystack,
|
| + int haystack_len,
|
| + const FX_CHAR* needle,
|
| + int needle_len) {
|
| + if (needle_len > haystack_len || needle_len == 0) {
|
| + return nullptr;
|
| + }
|
| + const FX_CHAR* end_ptr = haystack + haystack_len - needle_len;
|
| + while (haystack <= end_ptr) {
|
| + int i = 0;
|
| + while (1) {
|
| + if (haystack[i] != needle[i]) {
|
| + break;
|
| + }
|
| + i++;
|
| + if (i == needle_len) {
|
| + return haystack;
|
| + }
|
| + }
|
| + haystack++;
|
| + }
|
| + return nullptr;
|
| +}
|
| +
|
| } // namespace
|
|
|
| CFX_ByteString::CFX_ByteString(const FX_CHAR* pStr, FX_STRSIZE nLen) {
|
| @@ -98,11 +123,12 @@ const CFX_ByteString& CFX_ByteString::operator=(const FX_CHAR* pStr) {
|
| return *this;
|
| }
|
|
|
| -const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteStringC& str) {
|
| - if (str.IsEmpty())
|
| +const CFX_ByteString& CFX_ByteString::operator=(
|
| + const CFX_ByteStringC& stringSrc) {
|
| + if (stringSrc.IsEmpty())
|
| clear();
|
| else
|
| - AssignCopy(str.c_str(), str.GetLength());
|
| + AssignCopy(stringSrc.c_str(), stringSrc.GetLength());
|
|
|
| return *this;
|
| }
|
| @@ -317,9 +343,9 @@ FX_STRSIZE CFX_ByteString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount) {
|
| return m_pData->m_nDataLength;
|
| }
|
| ReallocBeforeWrite(nOldLength);
|
| - int nBytesToCopy = nOldLength - mLength + 1;
|
| + int nCharsToCopy = nOldLength - mLength + 1;
|
| FXSYS_memmove(m_pData->m_String + nIndex, m_pData->m_String + mLength,
|
| - nBytesToCopy);
|
| + nCharsToCopy);
|
| m_pData->m_nDataLength = nOldLength - nCount;
|
| }
|
| return m_pData->m_nDataLength;
|
| @@ -672,30 +698,6 @@ FX_STRSIZE CFX_ByteString::ReverseFind(FX_CHAR ch) const {
|
| return -1;
|
| }
|
|
|
| -const FX_CHAR* FX_strstr(const FX_CHAR* str1,
|
| - int len1,
|
| - const FX_CHAR* str2,
|
| - int len2) {
|
| - if (len2 > len1 || len2 == 0) {
|
| - return nullptr;
|
| - }
|
| - const FX_CHAR* end_ptr = str1 + len1 - len2;
|
| - while (str1 <= end_ptr) {
|
| - int i = 0;
|
| - while (1) {
|
| - if (str1[i] != str2[i]) {
|
| - break;
|
| - }
|
| - i++;
|
| - if (i == len2) {
|
| - return str1;
|
| - }
|
| - }
|
| - str1++;
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& pSub,
|
| FX_STRSIZE nStart) const {
|
| if (!m_pData)
|
| @@ -848,6 +850,7 @@ int CFX_ByteString::Compare(const CFX_ByteStringC& str) const {
|
| }
|
| return 0;
|
| }
|
| +
|
| void CFX_ByteString::TrimRight(const CFX_ByteStringC& pTargets) {
|
| if (!m_pData || pTargets.IsEmpty()) {
|
| return;
|
| @@ -873,12 +876,15 @@ void CFX_ByteString::TrimRight(const CFX_ByteStringC& pTargets) {
|
| m_pData->m_nDataLength = pos;
|
| }
|
| }
|
| +
|
| void CFX_ByteString::TrimRight(FX_CHAR chTarget) {
|
| TrimRight(CFX_ByteStringC(chTarget));
|
| }
|
| +
|
| void CFX_ByteString::TrimRight() {
|
| TrimRight("\x09\x0a\x0b\x0c\x0d\x20");
|
| }
|
| +
|
| void CFX_ByteString::TrimLeft(const CFX_ByteStringC& pTargets) {
|
| if (!m_pData || pTargets.IsEmpty())
|
| return;
|
| @@ -906,12 +912,15 @@ void CFX_ByteString::TrimLeft(const CFX_ByteStringC& pTargets) {
|
| m_pData->m_nDataLength = nDataLength;
|
| }
|
| }
|
| +
|
| void CFX_ByteString::TrimLeft(FX_CHAR chTarget) {
|
| TrimLeft(CFX_ByteStringC(chTarget));
|
| }
|
| +
|
| void CFX_ByteString::TrimLeft() {
|
| TrimLeft("\x09\x0a\x0b\x0c\x0d\x20");
|
| }
|
| +
|
| uint32_t CFX_ByteString::GetID(FX_STRSIZE start_pos) const {
|
| return CFX_ByteStringC(*this).GetID(start_pos);
|
| }
|
|
|