1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/*
* Copyright (C) 2007-2019 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 <stdint.h>
#include "bu/sharedcore.h"
#include "bu/text.h"
namespace Bu
{
class TextBuilder;
/** @cond DEVEL */
class TextBuilderCore
{
friend class TextBuilder;
friend class SharedCore<TextBuilder, TextBuilderCore>;
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<TextBuilder, TextBuilderCore>
{
protected:
using SharedCore<TextBuilder, TextBuilderCore>::core;
using SharedCore<TextBuilder, TextBuilderCore>::_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( 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
|