2020-08-11 09:10:23 +00:00
|
|
|
// © 2016 and later: Unicode, Inc. and others.
|
|
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
|
|
/*
|
|
|
|
*******************************************************************************
|
|
|
|
* Copyright (C) 2011-2012, International Business Machines
|
|
|
|
* Corporation and others. All Rights Reserved.
|
|
|
|
*******************************************************************************
|
|
|
|
* file name: appendable.cpp
|
|
|
|
* encoding: UTF-8
|
|
|
|
* tab size: 8 (not used)
|
|
|
|
* indentation:4
|
|
|
|
*
|
|
|
|
* created on: 2010dec07
|
|
|
|
* created by: Markus W. Scherer
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "unicode/utypes.h"
|
|
|
|
#include "unicode/appendable.h"
|
|
|
|
#include "unicode/utf16.h"
|
|
|
|
|
|
|
|
U_NAMESPACE_BEGIN
|
|
|
|
|
|
|
|
Appendable::~Appendable() {}
|
|
|
|
|
|
|
|
UBool
|
|
|
|
Appendable::appendCodePoint(UChar32 c) {
|
|
|
|
if(c<=0xffff) {
|
2023-05-23 00:05:01 +00:00
|
|
|
return appendCodeUnit((char16_t)c);
|
2020-08-11 09:10:23 +00:00
|
|
|
} else {
|
|
|
|
return appendCodeUnit(U16_LEAD(c)) && appendCodeUnit(U16_TRAIL(c));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
UBool
|
2023-05-23 00:05:01 +00:00
|
|
|
Appendable::appendString(const char16_t *s, int32_t length) {
|
2020-08-11 09:10:23 +00:00
|
|
|
if(length<0) {
|
2023-05-23 00:05:01 +00:00
|
|
|
char16_t c;
|
2020-08-11 09:10:23 +00:00
|
|
|
while((c=*s++)!=0) {
|
|
|
|
if(!appendCodeUnit(c)) {
|
2022-10-28 06:11:55 +00:00
|
|
|
return false;
|
2020-08-11 09:10:23 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if(length>0) {
|
2023-05-23 00:05:01 +00:00
|
|
|
const char16_t *limit=s+length;
|
2020-08-11 09:10:23 +00:00
|
|
|
do {
|
|
|
|
if(!appendCodeUnit(*s++)) {
|
2022-10-28 06:11:55 +00:00
|
|
|
return false;
|
2020-08-11 09:10:23 +00:00
|
|
|
}
|
|
|
|
} while(s<limit);
|
|
|
|
}
|
2022-10-28 06:11:55 +00:00
|
|
|
return true;
|
2020-08-11 09:10:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
UBool
|
|
|
|
Appendable::reserveAppendCapacity(int32_t /*appendCapacity*/) {
|
2022-10-28 06:11:55 +00:00
|
|
|
return true;
|
2020-08-11 09:10:23 +00:00
|
|
|
}
|
|
|
|
|
2023-05-23 00:05:01 +00:00
|
|
|
char16_t *
|
2020-08-11 09:10:23 +00:00
|
|
|
Appendable::getAppendBuffer(int32_t minCapacity,
|
|
|
|
int32_t /*desiredCapacityHint*/,
|
2023-05-23 00:05:01 +00:00
|
|
|
char16_t *scratch, int32_t scratchCapacity,
|
2020-08-11 09:10:23 +00:00
|
|
|
int32_t *resultCapacity) {
|
|
|
|
if(minCapacity<1 || scratchCapacity<minCapacity) {
|
|
|
|
*resultCapacity=0;
|
2023-05-23 00:05:01 +00:00
|
|
|
return nullptr;
|
2020-08-11 09:10:23 +00:00
|
|
|
}
|
|
|
|
*resultCapacity=scratchCapacity;
|
|
|
|
return scratch;
|
|
|
|
}
|
|
|
|
|
|
|
|
// UnicodeStringAppendable is implemented in unistr.cpp.
|
|
|
|
|
|
|
|
U_NAMESPACE_END
|