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 73