diff options
Diffstat (limited to 'xfa/fde/cfde_txtedtbuf.h')
-rw-r--r-- | xfa/fde/cfde_txtedtbuf.h | 56 |
1 files changed, 38 insertions, 18 deletions
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 <memory> +#include <tuple> +#include <vector> #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<FX_WCHAR, FxFreeDeleter> 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<int32_t, int32_t> Index2CP(int32_t nIndex) const; + std::unique_ptr<ChunkHeader> NewChunk(); - int32_t m_nChunkSize; - + size_t m_chunkSize; int32_t m_nTotal; - bool m_bChanged; - CFX_ArrayTemplate<FDE_CHUNKHEADER*> m_Chunks; - std::unique_ptr<IFX_MemoryAllocator> m_pAllocator; + std::vector<std::unique_ptr<ChunkHeader>> m_chunks; }; #endif // XFA_FDE_CFDE_TXTEDTBUF_H_ |