Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/native/common/unicode/appendable.h
38827 views
1
/*
2
*******************************************************************************
3
* Copyright (C) 2011-2012, International Business Machines
4
* Corporation and others. All Rights Reserved.
5
*******************************************************************************
6
* file name: appendable.h
7
* encoding: US-ASCII
8
* tab size: 8 (not used)
9
* indentation:4
10
*
11
* created on: 2010dec07
12
* created by: Markus W. Scherer
13
*/
14
15
#ifndef __APPENDABLE_H__
16
#define __APPENDABLE_H__
17
18
/**
19
* \file
20
* \brief C++ API: Appendable class: Sink for Unicode code points and 16-bit code units (UChars).
21
*/
22
23
#include "unicode/utypes.h"
24
#include "unicode/uobject.h"
25
26
U_NAMESPACE_BEGIN
27
28
class UnicodeString;
29
30
/**
31
* Base class for objects to which Unicode characters and strings can be appended.
32
* Combines elements of Java Appendable and ICU4C ByteSink.
33
*
34
* This class can be used in APIs where it does not matter whether the actual destination is
35
* a UnicodeString, a UChar[] array, a UnicodeSet, or any other object
36
* that receives and processes characters and/or strings.
37
*
38
* Implementation classes must implement at least appendCodeUnit(UChar).
39
* The base class provides default implementations for the other methods.
40
*
41
* The methods do not take UErrorCode parameters.
42
* If an error occurs (e.g., out-of-memory),
43
* in addition to returning FALSE from failing operations,
44
* the implementation must prevent unexpected behavior (e.g., crashes)
45
* from further calls and should make the error condition available separately
46
* (e.g., store a UErrorCode, make/keep a UnicodeString bogus).
47
* @stable ICU 4.8
48
*/
49
class U_COMMON_API Appendable : public UObject {
50
public:
51
/**
52
* Destructor.
53
* @stable ICU 4.8
54
*/
55
~Appendable();
56
57
/**
58
* Appends a 16-bit code unit.
59
* @param c code unit
60
* @return TRUE if the operation succeeded
61
* @stable ICU 4.8
62
*/
63
virtual UBool appendCodeUnit(UChar c) = 0;
64
65
/**
66
* Appends a code point.
67
* The default implementation calls appendCodeUnit(UChar) once or twice.
68
* @param c code point 0..0x10ffff
69
* @return TRUE if the operation succeeded
70
* @stable ICU 4.8
71
*/
72
virtual UBool appendCodePoint(UChar32 c);
73
74
/**
75
* Appends a string.
76
* The default implementation calls appendCodeUnit(UChar) for each code unit.
77
* @param s string, must not be NULL if length!=0
78
* @param length string length, or -1 if NUL-terminated
79
* @return TRUE if the operation succeeded
80
* @stable ICU 4.8
81
*/
82
virtual UBool appendString(const UChar *s, int32_t length);
83
84
/**
85
* Tells the object that the caller is going to append roughly
86
* appendCapacity UChars. A subclass might use this to pre-allocate
87
* a larger buffer if necessary.
88
* The default implementation does nothing. (It always returns TRUE.)
89
* @param appendCapacity estimated number of UChars that will be appended
90
* @return TRUE if the operation succeeded
91
* @stable ICU 4.8
92
*/
93
virtual UBool reserveAppendCapacity(int32_t appendCapacity);
94
95
/**
96
* Returns a writable buffer for appending and writes the buffer's capacity to
97
* *resultCapacity. Guarantees *resultCapacity>=minCapacity.
98
* May return a pointer to the caller-owned scratch buffer which must have
99
* scratchCapacity>=minCapacity.
100
* The returned buffer is only valid until the next operation
101
* on this Appendable.
102
*
103
* After writing at most *resultCapacity UChars, call appendString() with the
104
* pointer returned from this function and the number of UChars written.
105
* Many appendString() implementations will avoid copying UChars if this function
106
* returned an internal buffer.
107
*
108
* Partial usage example:
109
* \code
110
* int32_t capacity;
111
* UChar* buffer = app.getAppendBuffer(..., &capacity);
112
* ... Write n UChars into buffer, with n <= capacity.
113
* app.appendString(buffer, n);
114
* \endcode
115
* In many implementations, that call to append will avoid copying UChars.
116
*
117
* If the Appendable allocates or reallocates an internal buffer, it should use
118
* the desiredCapacityHint if appropriate.
119
* If a caller cannot provide a reasonable guess at the desired capacity,
120
* it should pass desiredCapacityHint=0.
121
*
122
* If a non-scratch buffer is returned, the caller may only pass
123
* a prefix to it to appendString().
124
* That is, it is not correct to pass an interior pointer to appendString().
125
*
126
* The default implementation always returns the scratch buffer.
127
*
128
* @param minCapacity required minimum capacity of the returned buffer;
129
* must be non-negative
130
* @param desiredCapacityHint desired capacity of the returned buffer;
131
* must be non-negative
132
* @param scratch default caller-owned buffer
133
* @param scratchCapacity capacity of the scratch buffer
134
* @param resultCapacity pointer to an integer which will be set to the
135
* capacity of the returned buffer
136
* @return a buffer with *resultCapacity>=minCapacity
137
* @stable ICU 4.8
138
*/
139
virtual UChar *getAppendBuffer(int32_t minCapacity,
140
int32_t desiredCapacityHint,
141
UChar *scratch, int32_t scratchCapacity,
142
int32_t *resultCapacity);
143
};
144
145
/**
146
* An Appendable implementation which writes to a UnicodeString.
147
*
148
* This class is not intended for public subclassing.
149
* @stable ICU 4.8
150
*/
151
class U_COMMON_API UnicodeStringAppendable : public Appendable {
152
public:
153
/**
154
* Aliases the UnicodeString (keeps its reference) for writing.
155
* @param s The UnicodeString to which this Appendable will write.
156
* @stable ICU 4.8
157
*/
158
explicit UnicodeStringAppendable(UnicodeString &s) : str(s) {}
159
160
/**
161
* Destructor.
162
* @stable ICU 4.8
163
*/
164
~UnicodeStringAppendable();
165
166
/**
167
* Appends a 16-bit code unit to the string.
168
* @param c code unit
169
* @return TRUE if the operation succeeded
170
* @stable ICU 4.8
171
*/
172
virtual UBool appendCodeUnit(UChar c);
173
174
/**
175
* Appends a code point to the string.
176
* @param c code point 0..0x10ffff
177
* @return TRUE if the operation succeeded
178
* @stable ICU 4.8
179
*/
180
virtual UBool appendCodePoint(UChar32 c);
181
182
/**
183
* Appends a string to the UnicodeString.
184
* @param s string, must not be NULL if length!=0
185
* @param length string length, or -1 if NUL-terminated
186
* @return TRUE if the operation succeeded
187
* @stable ICU 4.8
188
*/
189
virtual UBool appendString(const UChar *s, int32_t length);
190
191
/**
192
* Tells the UnicodeString that the caller is going to append roughly
193
* appendCapacity UChars.
194
* @param appendCapacity estimated number of UChars that will be appended
195
* @return TRUE if the operation succeeded
196
* @stable ICU 4.8
197
*/
198
virtual UBool reserveAppendCapacity(int32_t appendCapacity);
199
200
/**
201
* Returns a writable buffer for appending and writes the buffer's capacity to
202
* *resultCapacity. Guarantees *resultCapacity>=minCapacity.
203
* May return a pointer to the caller-owned scratch buffer which must have
204
* scratchCapacity>=minCapacity.
205
* The returned buffer is only valid until the next write operation
206
* on the UnicodeString.
207
*
208
* For details see Appendable::getAppendBuffer().
209
*
210
* @param minCapacity required minimum capacity of the returned buffer;
211
* must be non-negative
212
* @param desiredCapacityHint desired capacity of the returned buffer;
213
* must be non-negative
214
* @param scratch default caller-owned buffer
215
* @param scratchCapacity capacity of the scratch buffer
216
* @param resultCapacity pointer to an integer which will be set to the
217
* capacity of the returned buffer
218
* @return a buffer with *resultCapacity>=minCapacity
219
* @stable ICU 4.8
220
*/
221
virtual UChar *getAppendBuffer(int32_t minCapacity,
222
int32_t desiredCapacityHint,
223
UChar *scratch, int32_t scratchCapacity,
224
int32_t *resultCapacity);
225
226
private:
227
UnicodeString &str;
228
};
229
230
U_NAMESPACE_END
231
232
#endif // __APPENDABLE_H__
233
234