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
~Appendable()21 Appendable::~Appendable() {}
22
23 UBool
appendCodePoint(UChar32 c)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
appendString(const UChar * s,int32_t length)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
reserveAppendCapacity(int32_t)53 Appendable::reserveAppendCapacity(int32_t /*appendCapacity*/) {
54 return TRUE;
55 }
56
57 UChar *
getAppendBuffer(int32_t minCapacity,int32_t,UChar * scratch,int32_t scratchCapacity,int32_t * resultCapacity)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
73