| Index: xfa/fde/cfde_txtedtbuf.cpp
|
| diff --git a/xfa/fde/cfde_txtedtbuf.cpp b/xfa/fde/cfde_txtedtbuf.cpp
|
| index 94383c261ca750916655f9b01822877aca78f9e3..36fc47e4923c2b9781b751f97e8220a2d3ca4bad 100644
|
| --- a/xfa/fde/cfde_txtedtbuf.cpp
|
| +++ b/xfa/fde/cfde_txtedtbuf.cpp
|
| @@ -37,6 +37,7 @@ int32_t CFDE_TxtEdtBuf::GetTextLength() const {
|
|
|
| void CFDE_TxtEdtBuf::SetText(const CFX_WideString& wsText) {
|
| ASSERT(!wsText.IsEmpty());
|
| +
|
| Clear(false);
|
| int32_t nTextLength = wsText.GetLength();
|
| int32_t nNeedCount =
|
| @@ -89,6 +90,12 @@ FX_WCHAR CFDE_TxtEdtBuf::GetCharByIndex(int32_t nIndex) const {
|
| }
|
|
|
| CFX_WideString CFDE_TxtEdtBuf::GetRange(int32_t nBegin, int32_t nLength) const {
|
| + if (nLength == 0 || GetTextLength() == 0)
|
| + return CFX_WideString();
|
| +
|
| + ASSERT(nBegin >= 0 && nLength > 0 && nBegin < GetTextLength() &&
|
| + nBegin + nLength <= GetTextLength());
|
| +
|
| FDE_CHUNKPLACE cp;
|
| Index2CP(nBegin, cp);
|
| int32_t nLeave = nLength;
|
| @@ -124,6 +131,8 @@ void CFDE_TxtEdtBuf::Insert(int32_t nPos,
|
| const FX_WCHAR* lpText,
|
| int32_t nLength) {
|
| ASSERT(nPos >= 0 && nPos <= m_nTotal);
|
| + ASSERT(nLength > 0);
|
| +
|
| FDE_CHUNKPLACE cp;
|
| Index2CP(nPos, cp);
|
| int32_t nLengthTemp = nLength;
|
| @@ -220,52 +229,6 @@ void CFDE_TxtEdtBuf::Clear(bool bRelease) {
|
| m_bChanged = true;
|
| }
|
|
|
| -bool CFDE_TxtEdtBuf::Optimize(IFX_Pause* pPause) {
|
| - if (m_bChanged == false) {
|
| - return true;
|
| - }
|
| - if (m_nTotal == 0) {
|
| - return true;
|
| - }
|
| - int32_t nCount = m_Chunks.GetSize();
|
| - if (nCount == 0) {
|
| - return true;
|
| - }
|
| - int32_t i = 0;
|
| - for (; i < nCount; i++) {
|
| - FDE_CHUNKHEADER* lpChunk = m_Chunks[i];
|
| - if (lpChunk->nUsed == 0) {
|
| - m_pAllocator->Free(lpChunk);
|
| - m_Chunks.RemoveAt(i);
|
| - --i;
|
| - --nCount;
|
| - }
|
| - }
|
| - if (pPause && pPause->NeedToPauseNow())
|
| - return false;
|
| -
|
| - FDE_CHUNKHEADER* lpPreChunk = m_Chunks[0];
|
| - FDE_CHUNKHEADER* lpCurChunk = nullptr;
|
| - for (i = 1; i < nCount; i++) {
|
| - lpCurChunk = m_Chunks[i];
|
| - if (lpPreChunk->nUsed + lpCurChunk->nUsed <= m_nChunkSize) {
|
| - FXSYS_memcpy(lpPreChunk->wChars + lpPreChunk->nUsed, lpCurChunk->wChars,
|
| - lpCurChunk->nUsed * sizeof(FX_WCHAR));
|
| - lpPreChunk->nUsed += lpCurChunk->nUsed;
|
| - m_pAllocator->Free(lpCurChunk);
|
| - m_Chunks.RemoveAt(i);
|
| - --i;
|
| - --nCount;
|
| - } else {
|
| - lpPreChunk = lpCurChunk;
|
| - }
|
| - if (pPause && pPause->NeedToPauseNow())
|
| - return false;
|
| - }
|
| - m_bChanged = false;
|
| - return true;
|
| -}
|
| -
|
| void CFDE_TxtEdtBuf::ResetChunkBuffer(int32_t nDefChunkCount,
|
| int32_t nChunkSize) {
|
| ASSERT(nChunkSize);
|
| @@ -284,6 +247,11 @@ void CFDE_TxtEdtBuf::ResetChunkBuffer(int32_t nDefChunkCount,
|
| m_nTotal = 0;
|
| }
|
|
|
| +void CFDE_TxtEdtBuf::SetChunkSizeForTesting(size_t size) {
|
| + Clear(true);
|
| + ResetChunkBuffer(kDefaultChunkCount, size);
|
| +}
|
| +
|
| int32_t CFDE_TxtEdtBuf::CP2Index(const FDE_CHUNKPLACE& cp) const {
|
| int32_t nTotal = cp.nCharIndex;
|
| int32_t i = 0;
|
|
|