|
1 /* |
|
2 ******************************************************************************* |
|
3 * Copyright (C) 2011-2012, International Business Machines |
|
4 * Corporation and others. All Rights Reserved. |
|
5 ******************************************************************************* |
|
6 * file name: appendable.cpp |
|
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 #include "unicode/utypes.h" |
|
16 #include "unicode/appendable.h" |
|
17 #include "unicode/utf16.h" |
|
18 |
|
19 U_NAMESPACE_BEGIN |
|
20 |
|
21 Appendable::~Appendable() {} |
|
22 |
|
23 UBool |
|
24 Appendable::appendCodePoint(UChar32 c) { |
|
25 if(c<=0xffff) { |
|
26 return appendCodeUnit((UChar)c); |
|
27 } else { |
|
28 return appendCodeUnit(U16_LEAD(c)) && appendCodeUnit(U16_TRAIL(c)); |
|
29 } |
|
30 } |
|
31 |
|
32 UBool |
|
33 Appendable::appendString(const UChar *s, int32_t length) { |
|
34 if(length<0) { |
|
35 UChar c; |
|
36 while((c=*s++)!=0) { |
|
37 if(!appendCodeUnit(c)) { |
|
38 return FALSE; |
|
39 } |
|
40 } |
|
41 } else if(length>0) { |
|
42 const UChar *limit=s+length; |
|
43 do { |
|
44 if(!appendCodeUnit(*s++)) { |
|
45 return FALSE; |
|
46 } |
|
47 } while(s<limit); |
|
48 } |
|
49 return TRUE; |
|
50 } |
|
51 |
|
52 UBool |
|
53 Appendable::reserveAppendCapacity(int32_t /*appendCapacity*/) { |
|
54 return TRUE; |
|
55 } |
|
56 |
|
57 UChar * |
|
58 Appendable::getAppendBuffer(int32_t minCapacity, |
|
59 int32_t /*desiredCapacityHint*/, |
|
60 UChar *scratch, int32_t scratchCapacity, |
|
61 int32_t *resultCapacity) { |
|
62 if(minCapacity<1 || scratchCapacity<minCapacity) { |
|
63 *resultCapacity=0; |
|
64 return NULL; |
|
65 } |
|
66 *resultCapacity=scratchCapacity; |
|
67 return scratch; |
|
68 } |
|
69 |
|
70 // UnicodeStringAppendable is implemented in unistr.cpp. |
|
71 |
|
72 U_NAMESPACE_END |