1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ****************************************************************************** 5 * 6 * Copyright (C) 1997-2012, International Business Machines 7 * Corporation and others. All Rights Reserved. 8 * 9 ****************************************************************************** 10 * 11 * File CSTRING.H 12 * 13 * Contains CString interface 14 * 15 * @author Helena Shih 16 * 17 * Modification History: 18 * 19 * Date Name Description 20 * 6/17/98 hshih Created. 21 * 05/03/99 stephen Changed from functions to macros. 22 * 06/14/99 stephen Added icu_strncat, icu_strncmp, icu_tolower 23 * 24 ****************************************************************************** 25 */ 26 27 #ifndef CSTRING_H 28 #define CSTRING_H 1 29 30 #include "unicode/utypes.h" 31 #include "cmemory.h" 32 #include <string.h> 33 #include <stdlib.h> 34 #include <ctype.h> 35 36 #define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE strcpy(dst, src) 37 #define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str) 38 #define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2) 39 #define uprv_strcat(dst, src) U_STANDARD_CPP_NAMESPACE strcat(dst, src) 40 #define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c) 41 #define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c) 42 #define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c) 43 #define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size) 44 #define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n) 45 #define uprv_strncat(dst, src, n) U_STANDARD_CPP_NAMESPACE strncat(dst, src, n) 46 47 /** 48 * Is c an ASCII-repertoire letter a-z or A-Z? 49 * Note: The implementation is specific to whether ICU is compiled for 50 * an ASCII-based or EBCDIC-based machine. There just does not seem to be a better name for this. 51 */ 52 U_CAPI UBool U_EXPORT2 53 uprv_isASCIILetter(char c); 54 55 // NOTE: For u_asciiToUpper that takes a UChar, see ustr_imp.h 56 57 U_CAPI char U_EXPORT2 58 uprv_toupper(char c); 59 60 61 U_CAPI char U_EXPORT2 62 uprv_asciitolower(char c); 63 64 U_CAPI char U_EXPORT2 65 uprv_ebcdictolower(char c); 66 67 #if U_CHARSET_FAMILY==U_ASCII_FAMILY 68 # define uprv_tolower uprv_asciitolower 69 #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 70 # define uprv_tolower uprv_ebcdictolower 71 #else 72 # error U_CHARSET_FAMILY is not valid 73 #endif 74 75 #define uprv_strtod(source, end) U_STANDARD_CPP_NAMESPACE strtod(source, end) 76 #define uprv_strtoul(str, end, base) U_STANDARD_CPP_NAMESPACE strtoul(str, end, base) 77 #define uprv_strtol(str, end, base) U_STANDARD_CPP_NAMESPACE strtol(str, end, base) 78 79 /* Conversion from a digit to the character with radix base from 2-19 */ 80 /* May need to use U_UPPER_ORDINAL*/ 81 #define T_CString_itosOffset(a) ((a)<=9?('0'+(a)):('A'+(a)-10)) 82 83 U_CAPI char* U_EXPORT2 84 uprv_strdup(const char *src); 85 86 /** 87 * uprv_malloc n+1 bytes, and copy n bytes from src into the new string. 88 * Terminate with a null at offset n. If n is -1, works like uprv_strdup 89 * @param src 90 * @param n length of the input string, not including null. 91 * @return new string (owned by caller, use uprv_free to free). 92 * @internal 93 */ 94 U_CAPI char* U_EXPORT2 95 uprv_strndup(const char *src, int32_t n); 96 97 U_CAPI char* U_EXPORT2 98 T_CString_toLowerCase(char* str); 99 100 U_CAPI char* U_EXPORT2 101 T_CString_toUpperCase(char* str); 102 103 U_CAPI int32_t U_EXPORT2 104 T_CString_integerToString(char *buffer, int32_t n, int32_t radix); 105 106 U_CAPI int32_t U_EXPORT2 107 T_CString_int64ToString(char *buffer, int64_t n, uint32_t radix); 108 109 U_CAPI int32_t U_EXPORT2 110 T_CString_stringToInteger(const char *integerString, int32_t radix); 111 112 /** 113 * Case-insensitive, language-independent string comparison 114 * limited to the ASCII character repertoire. 115 */ 116 U_CAPI int U_EXPORT2 117 uprv_stricmp(const char *str1, const char *str2); 118 119 /** 120 * Case-insensitive, language-independent string comparison 121 * limited to the ASCII character repertoire. 122 */ 123 U_CAPI int U_EXPORT2 124 uprv_strnicmp(const char *str1, const char *str2, uint32_t n); 125 126 #endif /* ! CSTRING_H */ 127