1b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho******************************************************************************* 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* Copyright (C) 2011-2012, International Business Machines 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Corporation and others. All Rights Reserved. 5b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho******************************************************************************* 6b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* file name: appendable.cpp 7b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* encoding: US-ASCII 8b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* tab size: 8 (not used) 9b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* indentation:4 10b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* 11b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* created on: 2010dec07 12b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* created by: Markus W. Scherer 13b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*/ 14b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 15b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/utypes.h" 16b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/appendable.h" 17103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/utf16.h" 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 19b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_NAMESPACE_BEGIN 20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 21103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusAppendable::~Appendable() {} 22103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 23b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 24b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoAppendable::appendCodePoint(UChar32 c) { 25b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(c<=0xffff) { 26b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return appendCodeUnit((UChar)c); 27b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 28b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return appendCodeUnit(U16_LEAD(c)) && appendCodeUnit(U16_TRAIL(c)); 29b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 30b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 31b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 32b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 33b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoAppendable::appendString(const UChar *s, int32_t length) { 34b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(length<0) { 35b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar c; 36b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while((c=*s++)!=0) { 37b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(!appendCodeUnit(c)) { 38b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 39b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 40b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 41b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(length>0) { 42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar *limit=s+length; 43b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho do { 44b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(!appendCodeUnit(*s++)) { 45b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 46b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 47b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } while(s<limit); 48b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 49b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return TRUE; 50b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 51b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 52b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 53b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoAppendable::reserveAppendCapacity(int32_t /*appendCapacity*/) { 54b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return TRUE; 55b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 56b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 57b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUChar * 58b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoAppendable::getAppendBuffer(int32_t minCapacity, 59b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t /*desiredCapacityHint*/, 60b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar *scratch, int32_t scratchCapacity, 61b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t *resultCapacity) { 62b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(minCapacity<1 || scratchCapacity<minCapacity) { 63b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho *resultCapacity=0; 64b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return NULL; 65b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 66b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho *resultCapacity=scratchCapacity; 67b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return scratch; 68b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 69b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 70b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// UnicodeStringAppendable is implemented in unistr.cpp. 71b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 72b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_NAMESPACE_END 73