%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and * others. All Rights Reserved. ****************************************************************************** * * File unistrappender.h ****************************************************************************** */ #ifndef __UNISTRAPPENDER_H__ #define __UNISTRAPPENDER_H__ #include "unicode/unistr.h" #include "unicode/uobject.h" #include "unicode/utf16.h" #include "unicode/utypes.h" #include "cmemory.h" U_NAMESPACE_BEGIN /** * An optimization for the slowness of calling UnicodeString::append() * one character at a time in a loop. It stores appends in a buffer while * never actually calling append on the unicode string unless the buffer * fills up or is flushed. * * proper usage: * { * UnicodeStringAppender appender(astring); * for (int32_t i = 0; i < 100; ++i) { * appender.append((UChar) i); * } * // appender flushed automatically when it goes out of scope. * } */ class UnicodeStringAppender : public UMemory { public: /** * dest is the UnicodeString being appended to. It must always * exist while this instance exists. */ UnicodeStringAppender(UnicodeString &dest) : fDest(&dest), fIdx(0) { } inline void append(UChar x) { if (fIdx == UPRV_LENGTHOF(fBuffer)) { fDest->append(fBuffer, 0, fIdx); fIdx = 0; } fBuffer[fIdx++] = x; } inline void append(UChar32 x) { if (fIdx >= UPRV_LENGTHOF(fBuffer) - 1) { fDest->append(fBuffer, 0, fIdx); fIdx = 0; } U16_APPEND_UNSAFE(fBuffer, fIdx, x); } /** * Ensures that all appended characters have been written out to dest. */ inline void flush() { if (fIdx) { fDest->append(fBuffer, 0, fIdx); } fIdx = 0; } /** * flush the buffer when we go out of scope. */ ~UnicodeStringAppender() { flush(); } private: UnicodeString *fDest; int32_t fIdx; UChar fBuffer[32]; UnicodeStringAppender(const UnicodeStringAppender &other); UnicodeStringAppender &operator=(const UnicodeStringAppender &other); }; U_NAMESPACE_END #endif