diff options
Diffstat (limited to 'src/unstable/textbuilder.h')
-rw-r--r-- | src/unstable/textbuilder.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/unstable/textbuilder.h b/src/unstable/textbuilder.h index 73271f8..22fa653 100644 --- a/src/unstable/textbuilder.h +++ b/src/unstable/textbuilder.h | |||
@@ -5,4 +5,82 @@ | |||
5 | * terms of the license contained in the file LICENSE. | 5 | * terms of the license contained in the file LICENSE. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #ifndef BU_TEXT_BUILDER_H | ||
9 | #define BU_TEXT_BUILDER_H | ||
10 | |||
11 | #include <stdint.h> | ||
12 | #include "bu/sharedcore.h" | ||
13 | #include "bu/text.h" | ||
14 | |||
15 | namespace Bu | ||
16 | { | ||
17 | class TextBuilder; | ||
18 | |||
19 | /** @cond DEVEL */ | ||
20 | class TextBuilderCore | ||
21 | { | ||
22 | friend class TextBuilder; | ||
23 | friend class SharedCore<TextBuilder, TextBuilderCore>; | ||
24 | private: | ||
25 | class Chunk | ||
26 | { | ||
27 | public: | ||
28 | Chunk( const CodePoint *pSrc, int32_t iLength ); | ||
29 | ~Chunk(); | ||
30 | |||
31 | void append( const CodePoint *&pSrc, int32_t &iLength ); | ||
32 | |||
33 | Chunk *split( int32_t iIndex ); | ||
34 | |||
35 | int32_t iLength; | ||
36 | CodePoint *pData; | ||
37 | Chunk *pNext; | ||
38 | }; | ||
39 | |||
40 | TextBuilderCore(); | ||
41 | TextBuilderCore( const TextBuilderCore &rSrc ); | ||
42 | virtual ~TextBuilderCore(); | ||
43 | |||
44 | void clear(); | ||
45 | void append( const CodePoint *pSrc, int32_t iLength ); | ||
46 | void prepend( const CodePoint *pSrc, int32_t iLength ); | ||
47 | void insert( int32_t iBefore, const CodePoint *pSrc, int32_t iLength ); | ||
48 | void set( const CodePoint *pSrc, int32_t iLength ); | ||
49 | void copyTo( void *pDestRaw, int32_t iLength ); | ||
50 | CodePoint getAt( int32_t iIndex ) const; | ||
51 | |||
52 | Chunk *pFirst; | ||
53 | Chunk *pLast; | ||
54 | int32_t iLength; | ||
55 | }; | ||
56 | |||
57 | class TextBuilder : public Bu::SharedCore<TextBuilder, TextBuilderCore> | ||
58 | { | ||
59 | protected: | ||
60 | using SharedCore<TextBuilder, TextBuilderCore>::core; | ||
61 | using SharedCore<TextBuilder, TextBuilderCore>::_hardCopy; | ||
62 | |||
63 | public: | ||
64 | TextBuilder(); | ||
65 | TextBuilder( const Text &rSrc ); | ||
66 | TextBuilder( const TextBuilder &rSrc ); | ||
67 | virtual ~TextBuilder(); | ||
68 | |||
69 | void set( const Text &rSrc ); | ||
70 | void append( const Text &rSrc ); | ||
71 | void append( const CodePoint *pSrc, int32_t iLength ); | ||
72 | void prepend( const Text &rSrc ); | ||
73 | void insert( const Text &rSrc ); | ||
74 | void clear(); | ||
75 | |||
76 | int32_t getSize() const; | ||
77 | Text getText() const; | ||
78 | CodePoint operator[]( int32_t iIndex ) const; | ||
79 | |||
80 | TextBuilder &operator=( const Text &rSrc ); | ||
81 | TextBuilder &operator==( const Text &rSrc ); | ||
82 | }; | ||
83 | } | ||
84 | |||
85 | #endif | ||
8 | 86 | ||