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
19U_NAMESPACE_BEGIN
20
21Appendable::~Appendable() {}
22
23UBool
24Appendable::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
32UBool
33Appendable::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
52UBool
53Appendable::reserveAppendCapacity(int32_t /*appendCapacity*/) {
54    return TRUE;
55}
56
57UChar *
58Appendable::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
72U_NAMESPACE_END
73