From 0e6438e40a95702edb8327286c8253aa269c9826 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 10 Jan 2017 16:35:58 -0500 Subject: Remove custom allocator from CFDE_TxtEdtBuf. This CL removes the custom allocator from CFDE_TxtEdtBuf and uses std::vector> instead. The Iterator code has been made an inner class of the buffer and rename to CFDE_TxtEdtBuf::Iterator instead of CFDE_TxtEdtBufIter. Change-Id: Ied8e844dea700e0ef37087f0d3fad4882d9eada1 Reviewed-on: https://pdfium-review.googlesource.com/2159 Commit-Queue: dsinclair Reviewed-by: Tom Sepez --- xfa/fde/cfde_txtedtbuf.h | 56 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 18 deletions(-) (limited to 'xfa/fde/cfde_txtedtbuf.h') diff --git a/xfa/fde/cfde_txtedtbuf.h b/xfa/fde/cfde_txtedtbuf.h index 63edbf6167..9eeee5632e 100644 --- a/xfa/fde/cfde_txtedtbuf.h +++ b/xfa/fde/cfde_txtedtbuf.h @@ -8,22 +8,48 @@ #define XFA_FDE_CFDE_TXTEDTBUF_H_ #include +#include +#include #include "core/fxcrt/fx_basic.h" #include "core/fxcrt/fx_system.h" +#include "xfa/fde/ifx_chariter.h" -class IFX_MemoryAllocator; class IFX_Pause; class CFDE_TxtEdtBuf { public: + class Iterator : public IFX_CharIter { + public: + explicit Iterator(CFDE_TxtEdtBuf* pBuf, FX_WCHAR wcAlias = 0); + ~Iterator() override; + + bool Next(bool bPrev = false) override; + FX_WCHAR GetChar() override; + + void SetAt(int32_t nIndex) override; + int32_t GetAt() const override; + + bool IsEOF(bool bTail = true) const override; + IFX_CharIter* Clone() override; + + private: + CFDE_TxtEdtBuf* m_pBuf; + int32_t m_nCurChunk; + int32_t m_nCurIndex; + int32_t m_nIndex; + FX_WCHAR m_Alias; + }; + CFDE_TxtEdtBuf(); ~CFDE_TxtEdtBuf(); int32_t GetChunkSize() const; int32_t GetTextLength() const; + void SetText(const CFX_WideString& wsText); CFX_WideString GetText() const; + FX_WCHAR GetCharByIndex(int32_t nIndex) const; CFX_WideString GetRange(int32_t nBegin, int32_t nCount) const; @@ -32,31 +58,25 @@ class CFDE_TxtEdtBuf { void Clear(bool bRelease); private: - friend class CFDE_TxtEdtBufIter; + friend class Iterator; friend class CFDE_TxtEdtBufTest; - struct FDE_CHUNKHEADER { - int32_t nUsed; - FX_WCHAR wChars[1]; - }; + class ChunkHeader { + public: + ChunkHeader(); + ~ChunkHeader(); - struct FDE_CHUNKPLACE { - int32_t nChunkIndex; - int32_t nCharIndex; + int32_t nUsed; + std::unique_ptr wChars; }; - void ResetChunkBuffer(int32_t nDefChunkCount, int32_t nChunkSize); - int32_t CP2Index(const FDE_CHUNKPLACE& cp) const; - void Index2CP(int32_t nIndex, FDE_CHUNKPLACE& cp) const; - void SetChunkSizeForTesting(size_t size); + std::tuple Index2CP(int32_t nIndex) const; + std::unique_ptr NewChunk(); - int32_t m_nChunkSize; - + size_t m_chunkSize; int32_t m_nTotal; - bool m_bChanged; - CFX_ArrayTemplate m_Chunks; - std::unique_ptr m_pAllocator; + std::vector> m_chunks; }; #endif // XFA_FDE_CFDE_TXTEDTBUF_H_ -- cgit v1.2.3