FX_STRSIZE CFX_WideString::Find(FX_WCHAR ch, FX_STRSIZE nStart) const { if (m_pData == NULL) { return -1; } FX_STRSIZE nLength = m_pData->m_nDataLength; if (nStart >= nLength) { return -1; } const FX_WCHAR* lpsz = FXSYS_wcschr(m_pData->m_String + nStart, ch); return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String); }
void CFX_WideString::TrimRight(const FX_WCHAR* lpszTargetList) { FXSYS_assert(lpszTargetList != NULL); if (m_pData == NULL || *lpszTargetList == 0) { return; } CopyBeforeWrite(); FX_STRSIZE len = GetLength(); if (len < 1) { return; } FX_STRSIZE pos = len; while (pos) { if (FXSYS_wcschr(lpszTargetList, m_pData->m_String[pos - 1]) == NULL) { break; } pos--; } if (pos < len) { m_pData->m_String[pos] = 0; m_pData->m_nDataLength = pos; } }
void CFX_WideString::TrimLeft(const FX_WCHAR* lpszTargets) { FXSYS_assert(lpszTargets != NULL); if (m_pData == NULL || *lpszTargets == 0) { return; } CopyBeforeWrite(); if (GetLength() < 1) { return; } const FX_WCHAR* lpsz = m_pData->m_String; while (*lpsz != 0) { if (FXSYS_wcschr(lpszTargets, *lpsz) == NULL) { break; } lpsz ++; } if (lpsz != m_pData->m_String) { int nDataLength = m_pData->m_nDataLength - (FX_STRSIZE)(lpsz - m_pData->m_String); FXSYS_memmove(m_pData->m_String, lpsz, (nDataLength + 1)*sizeof(FX_WCHAR)); m_pData->m_nDataLength = nDataLength; } }