/* * Copyright (C) 2007-2023 Xagasoft, All rights reserved. * * This file is part of the libbu++ library and is released under the * terms of the license contained in the file LICENSE. */ #ifndef BU_TEXT_BUILDER_H #define BU_TEXT_BUILDER_H #include #include "bu/sharedcore.h" #include "bu/text.h" namespace Bu { class TextBuilder; /** @cond DEVEL */ class TextBuilderCore { friend class TextBuilder; friend class SharedCore; private: class Chunk { public: Chunk( const CodePoint *pSrc, int32_t iLength ); ~Chunk(); void append( const CodePoint *&pSrc, int32_t &iLength ); Chunk *split( int32_t iIndex ); int32_t iLength; CodePoint *pData; Chunk *pNext; }; TextBuilderCore(); TextBuilderCore( const TextBuilderCore &rSrc ); virtual ~TextBuilderCore(); void clear(); void append( const CodePoint *pSrc, int32_t iLength ); void prepend( const CodePoint *pSrc, int32_t iLength ); void insert( int32_t iBefore, const CodePoint *pSrc, int32_t iLength ); void set( const CodePoint *pSrc, int32_t iLength ); void copyTo( void *pDestRaw, int32_t iLength ); CodePoint getAt( int32_t iIndex ) const; Chunk *pFirst; Chunk *pLast; int32_t iLength; }; class TextBuilder : public Bu::SharedCore { protected: using SharedCore::core; using SharedCore::_hardCopy; public: TextBuilder(); TextBuilder( const Text &rSrc ); TextBuilder( const TextBuilder &rSrc ); virtual ~TextBuilder(); void set( const Text &rSrc ); void append( const Text &rSrc ); void append( const CodePoint *pSrc, int32_t iLength ); void prepend( const Text &rSrc ); void insert( int32_t iBefore, const Text &rSrc ); void clear(); int32_t getSize() const; Text getText() const; void copyTo( void *pDestRaw, int32_t iDestSize ) const; CodePoint operator[]( int32_t iIndex ) const; TextBuilder &operator=( const Text &rSrc ); TextBuilder &operator==( const Text &rSrc ); }; } #endif