/*
*******************************************************************************
*
*   Copyright (C) 1998-2012, International Business Machines
*   Corporation and others.  All Rights Reserved.
*
*******************************************************************************
*
* File ustr.h
*
* Modification History:
*
*   Date        Name        Description
*   05/28/99    stephen     Creation.
*******************************************************************************
*/

#ifndef USTR_H
#define USTR_H 1

#include "unicode/utypes.h"

#define U_APPEND_CHAR32(c,target,len) {                         \
    if (c <= 0xffff)                                            \
    {                                                           \
        *(target)++ = (UChar) c;                                \
        len=1;                                                  \
    }                                                           \
    else                                                        \
    {                                                           \
        target[0] = U16_LEAD(c);                                \
        target[1] = U16_TRAIL(c);                               \
        len=2;                                                  \
        target +=2;                                             \
    }                                                           \
}

#define U_APPEND_CHAR32_ONLY(c,target) {                             \
    if (c <= 0xffff)                                            \
    {                                                           \
        *(target)++ = (UChar) c;                                \
    }                                                           \
    else                                                        \
    {                                                           \
        target[0] = U16_LEAD(c);                                \
        target[1] = U16_TRAIL(c);                               \
        target +=2;                                             \
    }                                                           \
}

/* A C representation of a string "object" (to avoid realloc all the time) */
struct UString {
  UChar *fChars;
  int32_t fLength;
  int32_t fCapacity;
};

U_CFUNC void ustr_init(struct UString *s);

U_CFUNC void
ustr_initChars(struct UString *s, const char* source, int32_t length, UErrorCode *status);

U_CFUNC void ustr_deinit(struct UString *s);

U_CFUNC void ustr_setlen(struct UString *s, int32_t len, UErrorCode *status);

U_CFUNC void ustr_cpy(struct UString *dst, const struct UString *src,
                      UErrorCode *status);

U_CFUNC void ustr_cat(struct UString *dst, const struct UString *src,
                      UErrorCode *status);

U_CFUNC void ustr_ncat(struct UString *dst, const struct UString *src,
                       int32_t n, UErrorCode *status);

U_CFUNC void ustr_ucat(struct UString *dst, UChar c, UErrorCode *status);
U_CFUNC void ustr_u32cat(struct UString *dst, UChar32 c, UErrorCode *status);
U_CFUNC void ustr_uscat(struct UString *dst, const UChar* src,int len,UErrorCode *status);
#endif
