1 /* 2 ******************************************************************************* 3 * 4 * Copyright (C) 1998-2012, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ******************************************************************************* 8 * 9 * File ustr.h 10 * 11 * Modification History: 12 * 13 * Date Name Description 14 * 05/28/99 stephen Creation. 15 ******************************************************************************* 16 */ 17 18 #ifndef USTR_H 19 #define USTR_H 1 20 21 #include "unicode/utypes.h" 22 23 #define U_APPEND_CHAR32(c,target,len) { \ 24 if (c <= 0xffff) \ 25 { \ 26 *(target)++ = (UChar) c; \ 27 len=1; \ 28 } \ 29 else \ 30 { \ 31 target[0] = U16_LEAD(c); \ 32 target[1] = U16_TRAIL(c); \ 33 len=2; \ 34 target +=2; \ 35 } \ 36 } 37 38 #define U_APPEND_CHAR32_ONLY(c,target) { \ 39 if (c <= 0xffff) \ 40 { \ 41 *(target)++ = (UChar) c; \ 42 } \ 43 else \ 44 { \ 45 target[0] = U16_LEAD(c); \ 46 target[1] = U16_TRAIL(c); \ 47 target +=2; \ 48 } \ 49 } 50 51 /* A C representation of a string "object" (to avoid realloc all the time) */ 52 struct UString { 53 UChar *fChars; 54 int32_t fLength; 55 int32_t fCapacity; 56 }; 57 58 U_CFUNC void ustr_init(struct UString *s); 59 60 U_CFUNC void 61 ustr_initChars(struct UString *s, const char* source, int32_t length, UErrorCode *status); 62 63 U_CFUNC void ustr_deinit(struct UString *s); 64 65 U_CFUNC void ustr_setlen(struct UString *s, int32_t len, UErrorCode *status); 66 67 U_CFUNC void ustr_cpy(struct UString *dst, const struct UString *src, 68 UErrorCode *status); 69 70 U_CFUNC void ustr_cat(struct UString *dst, const struct UString *src, 71 UErrorCode *status); 72 73 U_CFUNC void ustr_ncat(struct UString *dst, const struct UString *src, 74 int32_t n, UErrorCode *status); 75 76 U_CFUNC void ustr_ucat(struct UString *dst, UChar c, UErrorCode *status); 77 U_CFUNC void ustr_u32cat(struct UString *dst, UChar32 c, UErrorCode *status); 78 U_CFUNC void ustr_uscat(struct UString *dst, const UChar* src,int len,UErrorCode *status); 79 #endif 80