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) */
52struct UString {
53  UChar *fChars;
54  int32_t fLength;
55  int32_t fCapacity;
56};
57
58U_CFUNC void ustr_init(struct UString *s);
59
60U_CFUNC void
61ustr_initChars(struct UString *s, const char* source, int32_t length, UErrorCode *status);
62
63U_CFUNC void ustr_deinit(struct UString *s);
64
65U_CFUNC void ustr_setlen(struct UString *s, int32_t len, UErrorCode *status);
66
67U_CFUNC void ustr_cpy(struct UString *dst, const struct UString *src,
68                      UErrorCode *status);
69
70U_CFUNC void ustr_cat(struct UString *dst, const struct UString *src,
71                      UErrorCode *status);
72
73U_CFUNC void ustr_ncat(struct UString *dst, const struct UString *src,
74                       int32_t n, UErrorCode *status);
75
76U_CFUNC void ustr_ucat(struct UString *dst, UChar c, UErrorCode *status);
77U_CFUNC void ustr_u32cat(struct UString *dst, UChar32 c, UErrorCode *status);
78U_CFUNC void ustr_uscat(struct UString *dst, const UChar* src,int len,UErrorCode *status);
79#endif
80