You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

410 lines
18 KiB

5 years ago
/* wchar.h: C99 header */
/* Copyright 2002 ARM Limited. All rights reserved. */
/*
* RCS $Revision: 185525 $
* Checkin $Date: 2014-05-29 12:44:48 +0100 (Thu, 29 May 2014) $
* Revising $Author: agrant $
*/
#ifndef __wchar_h
#define __wchar_h
#define __ARMCLIB_VERSION 5050106
#define _ARMABI __declspec(__nothrow)
#ifndef __WCHAR_DECLS
#define __WCHAR_DECLS
#undef __CLIBNS
#ifdef __cplusplus
#define __CLIBNS ::std::
namespace std {
extern "C" {
#else /* ndef __cplusplus */
#define __CLIBNS
#endif /* ndef __cplusplus */
#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || !defined(__size_t)
/* always defined in C++ and non-strict C for consistency of debug info */
#if __sizeof_ptr == 8
typedef unsigned long size_t; /* see <stddef.h> */
#else
typedef unsigned int size_t; /* see <stddef.h> */
#endif
#if !defined(__cplusplus) && defined(__STRICT_ANSI__)
#define __size_t 1
#endif
#endif
#ifndef __cplusplus /* wchar_t is a builtin type for C++ */
#if !defined(__STRICT_ANSI__) || !defined(__wchar_t)
/* always defined in non-strict C for consistency of debug info */
#if defined(__WCHAR32) || (defined(__ARM_SIZEOF_WCHAR_T) && __ARM_SIZEOF_WCHAR_T == 4)
typedef unsigned int wchar_t; /* see <stddef.h> */
#else
typedef unsigned short wchar_t; /* see <stddef.h> */
#endif
#ifdef __STRICT_ANSI__
#define __wchar_t 1
#endif
#endif
#endif
#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || !defined(__wint_t)
/* always defined in C++ and non-strict C for consistency of debug info */
typedef int wint_t; /* see also <wctype.h> */
#if !defined(__cplusplus) && defined(__STRICT_ANSI__)
#define __wint_t 1
#endif
#endif
/* limits of wchar_t */
/* NB we have to undef and redef because they're defined in both
* stdint.h and wchar.h */
#undef WCHAR_MIN
#undef WCHAR_MAX
#if defined(__WCHAR32) || (defined(__ARM_SIZEOF_WCHAR_T) && __ARM_SIZEOF_WCHAR_T == 4)
#define WCHAR_MIN 0
#define WCHAR_MAX 0xffffffffU
#else
#define WCHAR_MIN 0
#define WCHAR_MAX 65535
#endif
#undef NULL
#define NULL 0 /* see <stddef.h> */
/* ANSI forbids va_list to be defined here */
/* keep in step with <stdarg.h> and <stdio.h> */
#if !defined(__va_list) && (defined(__cplusplus) || !defined(__STRICT_ANSI__) || !defined(__va_list_defined))
/* always defined in C++ and non-strict C for consistency of debug info */
#ifdef __clang__
typedef __builtin_va_list __va_list;
#else
typedef struct __va_list __va_list;
#endif
#if !defined(__cplusplus) && defined(__STRICT_ANSI__)
#define __va_list_defined 1
#endif
#endif
#ifndef __ARM_WCHAR_NO_IO
#undef WEOF
#define WEOF ((__CLIBNS wint_t)-1)
/* ANSI forbids FILE to be defined here */
#if !defined(__STRICT_ANSI__)
/* always defined in non-strict C/C++ for consistency of debug info */
typedef struct __FILE FILE;
#else
struct __FILE;
#endif
#endif /* __ARM_WCHAR_NO_IO */
/*
* If the compiler supports signalling nans as per N965 then it
* will define __SUPPORT_SNAN__, in which case a user may define
* _WANT_SNAN in order to obtain compliant versions of the
* fwprintf, fwscanf, and wcstod families of functions.
*/
#if defined(__SUPPORT_SNAN__) && defined(_WANT_SNAN)
#pragma import(__use_snan)
#endif
/*
* mbstate_t must be able to contain all the data from an
* incomplete MB character, plus shift states. CJK-specific
* encodings seem to tend to have at most three bytes per
* character, and a single-figure number of shift states, so 32
* bits is sufficient for any of these. UTF-8 encoding a full
* 32-bit value is the hardest thing to deal with, and in that
* situation the worst case is having to store 25 bits of
* character (1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) plus
* a few bits saying what sort of state is being stored. This is
* still easy enough to fit into 32 bits, so I think a single
* 32-bit integer is enough in here.
*/
typedef struct __mbstate_t {
unsigned int __state, __state2;
} mbstate_t;
/*
* `struct tm' must be declared in this header as an incomplete
* type.
*/
struct tm;
extern _ARMABI size_t wcsftime(wchar_t * __restrict /*s*/, size_t /*maxsize*/,
const wchar_t * __restrict /*format*/, const struct tm * __restrict /*timeptr*/) __attribute__((__nonnull__(1,3,4)));
#ifndef __ARM_WCHAR_NO_IO
/*
* Formatted wide-character I/O functions
*/
#pragma __printf_args
int swprintf(wchar_t * __restrict /*s*/, size_t /*n*/,
const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(3)));
#pragma __printf_args
int vswprintf(wchar_t * __restrict /*s*/, size_t /*n*/,
const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(3)));
#pragma __scanf_args
int swscanf(const wchar_t * __restrict /*s*/,
const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2)));
#pragma __scanf_args
int vswscanf(const wchar_t * __restrict /*s*/,
const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1,2)));
#pragma __printf_args
int fwprintf(struct __FILE * __restrict /*stream*/,
const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2)));
#pragma __printf_args
int vfwprintf(struct __FILE * __restrict /*stream*/,
const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1,2)));
#pragma __scanf_args
int fwscanf(struct __FILE * __restrict /*stream*/,
const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2)));
#pragma __scanf_args
int vfwscanf(struct __FILE * __restrict /*stream*/,
const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1,2)));
#pragma __printf_args
int wprintf(const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1)));
#pragma __printf_args
int vwprintf(const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1)));
#pragma __scanf_args
int wscanf(const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1)));
#pragma __scanf_args
int vwscanf(const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1)));
/*
* Unformatted wide-character I/O functions
*/
wint_t fgetwc(struct __FILE * /*stream*/) __attribute__((__nonnull__(1)));
wchar_t *fgetws(wchar_t * __restrict /*s*/, int /*n*/, struct __FILE * __restrict /*stream*/) __attribute__((__nonnull__(1,3)));
wint_t fputwc(wchar_t /*c*/, struct __FILE * /*stream*/) __attribute__((__nonnull__(2)));
int fputws(const wchar_t * __restrict /*s*/, struct __FILE * __restrict /*stream*/) __attribute__((__nonnull__(1,2)));
int fwide(struct __FILE * /*stream*/, int /*mode*/) __attribute__((__nonnull__(1)));
wint_t getwc(struct __FILE * /*stream*/) __attribute__((__nonnull__(1)));
wint_t getwchar(void);
wint_t putwc(wchar_t /*c*/, struct __FILE * /*stream*/) __attribute__((__nonnull__(2)));
wint_t putwchar(wchar_t /*c*/);
wint_t ungetwc(wint_t /*c*/, struct __FILE * /*stream*/) __attribute__((__nonnull__(2)));
#endif /* __ARM_WCHAR_NO_IO */
wint_t btowc(int /*c*/);
wint_t wctob(int /*c*/);
int mbsinit(const mbstate_t * /*ps*/);
size_t mbrlen(const char * __restrict /*s*/, size_t /*n*/,
mbstate_t * __restrict /*ps*/);
size_t mbrtowc(wchar_t * __restrict /*pwc*/,
const char * __restrict /*s*/,
size_t /*n*/, mbstate_t * __restrict /*ps*/);
size_t wcrtomb(char * __restrict /*s*/, wchar_t /*wc*/,
mbstate_t * __restrict /*ps*/);
size_t mbsrtowcs(wchar_t * __restrict /*dst*/,
const char ** __restrict /*src*/,
size_t /*len*/, mbstate_t * __restrict /*ps*/) __attribute__((__nonnull__(2)));
size_t wcsrtombs(char * __restrict /*dst*/,
const wchar_t ** __restrict /*src*/,
size_t /*len*/, mbstate_t * __restrict /*ps*/) __attribute__((__nonnull__(2)));
/*
* Wide-character string-to-number conversions. Parallel to strto*.
*/
double wcstod(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/) __attribute__((__nonnull__(1)));
float wcstof(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/) __attribute__((__nonnull__(1)));
long double wcstold(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/) __attribute__((__nonnull__(1)));
long int wcstol(const wchar_t * /*nptr*/, wchar_t **/*endptr*/,
int /*base*/) __attribute__((__nonnull__(1)));
unsigned long int wcstoul(const wchar_t * /*nptr*/,
wchar_t ** /*endptr*/, int /*base*/) __attribute__((__nonnull__(1)));
#if !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__)
long long int wcstoll(const wchar_t * __restrict /*nptr*/,
wchar_t ** __restrict /*endptr*/, int /*base*/) __attribute__((__nonnull__(1)));
unsigned long long int wcstoull(const wchar_t * __restrict /*nptr*/,
wchar_t ** __restrict /*endptr*/,
int /*base*/) __attribute__((__nonnull__(1)));
#endif
/*
* General wide-character string utilities.
*/
wchar_t *wcscpy(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
wchar_t *wcsncpy(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
wchar_t *wmemcpy(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
wchar_t *wmemmove(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
wchar_t *wcscat(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
wchar_t *wcsncat(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
int wcscmp(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
int wcsncmp(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
int wcscasecmp(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
int wcsncasecmp(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
int wcscoll(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
size_t wcsxfrm(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(2)));
int wmemcmp(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2)));
size_t wcscspn(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
size_t wcsspn(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
wchar_t *wcstok(wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/,
wchar_t ** __restrict /*ptr*/) __attribute__((__nonnull__(2,3)));
wchar_t *wmemchr(const wchar_t * __restrict /*s*/, wchar_t /*c*/,
size_t /*n*/) __attribute__((__nonnull__(1)));
size_t wcslen(const wchar_t * __restrict /*s*/) __attribute__((__nonnull__(1)));
wchar_t *wmemset(wchar_t * __restrict /*s*/, wchar_t /*c*/, size_t /*n*/) __attribute__((__nonnull__(1)));
#ifdef __cplusplus
/*
* C++'s overloading allows us to provide versions of these
* functions which search a const string and return a const
* pointer into it, and separate versions which search a
* non-const string and return a non-const pointer.
*/
const wchar_t *wcschr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1)));
const wchar_t *wcspbrk(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
const wchar_t *wcsrchr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1)));
const wchar_t *wcsstr(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
#ifndef __WCHAR_DISABLED
extern "C++" wchar_t *wcschr(wchar_t * __restrict __s, wchar_t __c) __attribute__((__nonnull__(1)));
extern "C++" inline wchar_t *wcschr(wchar_t * __restrict __s, wchar_t __c)
{ return const_cast<wchar_t *>(wcschr(const_cast<const wchar_t *>(__s), __c)); }
extern "C++" wchar_t *wcspbrk(wchar_t * __restrict __s1, const wchar_t * __restrict __s2) __attribute__((__nonnull__(1,2)));
extern "C++" inline wchar_t *wcspbrk(wchar_t * __restrict __s1, const wchar_t * __restrict __s2)
{ return const_cast<wchar_t *>(wcspbrk(const_cast<const wchar_t *>(__s1), __s2)); }
extern "C++" wchar_t *wcsrchr(wchar_t * __restrict __s, wchar_t __c) __attribute__((__nonnull__(1)));
extern "C++" inline wchar_t *wcsrchr(wchar_t * __restrict __s, wchar_t __c)
{ return const_cast<wchar_t *>(wcsrchr(const_cast<const wchar_t *>(__s), __c)); }
extern "C++" wchar_t *wcsstr(wchar_t * __restrict __s1,
const wchar_t * __restrict __s2) __attribute__((__nonnull__(1,2)));
extern "C++" inline wchar_t *wcsstr(wchar_t * __restrict __s1,
const wchar_t * __restrict __s2)
{ return const_cast<wchar_t *>(wcsstr(const_cast<const wchar_t *>(__s1), __s2)); }
#endif
#else
/*
* C's approximation to the above is to have all of these
* functions search a const string and return a non-const
* pointer. This is the only way to prevent compile errors in
* all sensible uses of the functions, but unfortunately
* renders them unable to spot a lot of the possible error
* cases.
*/
wchar_t *wcschr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1)));
wchar_t *wcspbrk(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
wchar_t *wcsrchr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1)));
wchar_t *wcsstr(const wchar_t * __restrict /*s1*/,
const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2)));
#endif
#ifdef __cplusplus
} /* extern "C" */
} /* namespace std */
#endif /* __cplusplus */
#endif /* __WCHAR_DECLS */
#if _AEABI_PORTABILITY_LEVEL != 0 && !defined _AEABI_PORTABLE
#define _AEABI_PORTABLE
#endif
#ifdef __cplusplus
#ifndef __WCHAR_NO_EXPORTS
using ::std::size_t;
using ::std::wint_t;
using ::std::mbstate_t;
using ::std::tm;
using ::std::wcsftime;
#ifndef __ARM_WCHAR_NO_IO
using ::std::swprintf;
using ::std::vswprintf;
using ::std::swscanf;
using ::std::vswscanf;
using ::std::fwprintf;
using ::std::vfwprintf;
using ::std::fwscanf;
using ::std::vfwscanf;
using ::std::wprintf;
using ::std::vwprintf;
using ::std::wscanf;
using ::std::vwscanf;
using ::std::fgetwc;
using ::std::fgetws;
using ::std::fputwc;
using ::std::fputws;
using ::std::fwide;
using ::std::getwc;
using ::std::getwchar;
using ::std::putwc;
using ::std::putwchar;
using ::std::ungetwc;
using ::std::btowc;
#endif /* __ARM_WCHAR_NO_IO */
using ::std::wctob;
using ::std::mbsinit;
using ::std::mbrlen;
using ::std::mbrtowc;
using ::std::wcrtomb;
using ::std::mbsrtowcs;
using ::std::wcsrtombs;
using ::std::wcstod;
using ::std::wcstof;
using ::std::wcstold;
using ::std::wcstol;
using ::std::wcstoul;
#if !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__)
using ::std::wcstoll;
using ::std::wcstoull;
#endif /* !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__) */
using ::std::wcscpy;
using ::std::wcsncpy;
using ::std::wmemcpy;
using ::std::wmemmove;
using ::std::wcscat;
using ::std::wcsncat;
using ::std::wcscmp;
using ::std::wcsncmp;
using ::std::wcscasecmp;
using ::std::wcsncasecmp;
using ::std::wcscoll;
using ::std::wcsxfrm;
using ::std::wmemcmp;
using ::std::wcschr;
using ::std::wcscspn;
using ::std::wcspbrk;
using ::std::wcsrchr;
using ::std::wcsspn;
using ::std::wcsstr;
using ::std::wcstok;
using ::std::wmemchr;
using ::std::wcslen;
using ::std::wmemset;
#if !defined(__STRICT_ANSI__) && !defined(__ARM_WCHAR_NO_IO)
using ::std::FILE;
#endif
#endif /* __WCHAR_NO_EXPORTS */
#endif /* __cplusplus */
#endif /* ndef __wchar_h */
/* end of wchar.h */