1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // © 2017 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- // bytesinkutil.h
- // created: 2017sep14 Markus W. Scherer
- #include "unicode/utypes.h"
- #include "unicode/bytestream.h"
- #include "unicode/edits.h"
- #include "cmemory.h"
- #include "uassert.h"
- U_NAMESPACE_BEGIN
- class ByteSink;
- class CharString;
- class Edits;
- class U_COMMON_API ByteSinkUtil {
- public:
- ByteSinkUtil() = delete; // all static
- /** (length) bytes were mapped to valid (s16, s16Length). */
- static UBool appendChange(int32_t length,
- const char16_t *s16, int32_t s16Length,
- ByteSink &sink, Edits *edits, UErrorCode &errorCode);
- /** The bytes at [s, limit[ were mapped to valid (s16, s16Length). */
- static UBool appendChange(const uint8_t *s, const uint8_t *limit,
- const char16_t *s16, int32_t s16Length,
- ByteSink &sink, Edits *edits, UErrorCode &errorCode);
- /** (length) bytes were mapped/changed to valid code point c. */
- static void appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits = nullptr);
- /** The few bytes at [src, nextSrc[ were mapped/changed to valid code point c. */
- static inline void appendCodePoint(const uint8_t *src, const uint8_t *nextSrc, UChar32 c,
- ByteSink &sink, Edits *edits = nullptr) {
- appendCodePoint((int32_t)(nextSrc - src), c, sink, edits);
- }
- /** Append the two-byte character (U+0080..U+07FF). */
- static void appendTwoBytes(UChar32 c, ByteSink &sink);
- static UBool appendUnchanged(const uint8_t *s, int32_t length,
- ByteSink &sink, uint32_t options, Edits *edits,
- UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) { return FALSE; }
- if (length > 0) { appendNonEmptyUnchanged(s, length, sink, options, edits); }
- return TRUE;
- }
- static UBool appendUnchanged(const uint8_t *s, const uint8_t *limit,
- ByteSink &sink, uint32_t options, Edits *edits,
- UErrorCode &errorCode);
- private:
- static void appendNonEmptyUnchanged(const uint8_t *s, int32_t length,
- ByteSink &sink, uint32_t options, Edits *edits);
- };
- class U_COMMON_API CharStringByteSink : public ByteSink {
- public:
- CharStringByteSink(CharString* dest);
- ~CharStringByteSink() override;
- CharStringByteSink() = delete;
- CharStringByteSink(const CharStringByteSink&) = delete;
- CharStringByteSink& operator=(const CharStringByteSink&) = delete;
- void Append(const char* bytes, int32_t n) override;
- char* GetAppendBuffer(int32_t min_capacity,
- int32_t desired_capacity_hint,
- char* scratch,
- int32_t scratch_capacity,
- int32_t* result_capacity) override;
- private:
- CharString& dest_;
- };
- U_NAMESPACE_END
|