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