1// -*- C++ -*- 2//===--------------------------- cstdlib ----------------------------------===// 3// 4// The LLVM Compiler Infrastructure 5// 6// This file is dual licensed under the MIT and the University of Illinois Open 7// Source Licenses. See LICENSE.TXT for details. 8// 9//===----------------------------------------------------------------------===// 10 11#ifndef _LIBCPP_CSTDLIB 12#define _LIBCPP_CSTDLIB 13 14/* 15 cstdlib synopsis 16 17Macros: 18 19 EXIT_FAILURE 20 EXIT_SUCCESS 21 MB_CUR_MAX 22 NULL 23 RAND_MAX 24 25namespace std 26{ 27 28Types: 29 30 size_t 31 div_t 32 ldiv_t 33 lldiv_t // C99 34 35double atof (const char* nptr); 36int atoi (const char* nptr); 37long atol (const char* nptr); 38long long atoll(const char* nptr); // C99 39double strtod (const char* restrict nptr, char** restrict endptr); 40float strtof (const char* restrict nptr, char** restrict endptr); // C99 41long double strtold (const char* restrict nptr, char** restrict endptr); // C99 42long strtol (const char* restrict nptr, char** restrict endptr, int base); 43long long strtoll (const char* restrict nptr, char** restrict endptr, int base); // C99 44unsigned long strtoul (const char* restrict nptr, char** restrict endptr, int base); 45unsigned long long strtoull(const char* restrict nptr, char** restrict endptr, int base); // C99 46int rand(void); 47void srand(unsigned int seed); 48void* calloc(size_t nmemb, size_t size); 49void free(void* ptr); 50void* malloc(size_t size); 51void* realloc(void* ptr, size_t size); 52void abort(void); 53int atexit(void (*func)(void)); 54void exit(int status); 55void _Exit(int status); 56char* getenv(const char* name); 57int system(const char* string); 58void* bsearch(const void* key, const void* base, size_t nmemb, size_t size, 59 int (*compar)(const void *, const void *)); 60void qsort(void* base, size_t nmemb, size_t size, 61 int (*compar)(const void *, const void *)); 62int abs( int j); 63long abs( long j); 64long long abs(long long j); // C++0X 65long labs( long j); 66long long llabs(long long j); // C99 67div_t div( int numer, int denom); 68ldiv_t div( long numer, long denom); 69lldiv_t div(long long numer, long long denom); // C++0X 70ldiv_t ldiv( long numer, long denom); 71lldiv_t lldiv(long long numer, long long denom); // C99 72int mblen(const char* s, size_t n); 73int mbtowc(wchar_t* restrict pwc, const char* restrict s, size_t n); 74int wctomb(char* s, wchar_t wchar); 75size_t mbstowcs(wchar_t* restrict pwcs, const char* restrict s, size_t n); 76size_t wcstombs(char* restrict s, const wchar_t* restrict pwcs, size_t n); 77int at_quick_exit(void (*func)(void)) // C++11 78void quick_exit(int status); // C++11 79void *aligned_alloc(size_t alignment, size_t size); // C11 80 81} // std 82 83*/ 84 85#include <__config> 86#include <stdlib.h> 87#ifdef _LIBCPP_MSVCRT 88#include "support/win32/locale_win32.h" 89#endif // _LIBCPP_MSVCRT 90 91#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 92#pragma GCC system_header 93#endif 94 95_LIBCPP_BEGIN_NAMESPACE_STD 96 97using ::size_t; 98using ::div_t; 99using ::ldiv_t; 100#ifndef _LIBCPP_HAS_NO_LONG_LONG 101using ::lldiv_t; 102#endif // _LIBCPP_HAS_NO_LONG_LONG 103using ::atof; 104using ::atoi; 105using ::atol; 106#ifndef _LIBCPP_HAS_NO_LONG_LONG 107using ::atoll; 108#endif // _LIBCPP_HAS_NO_LONG_LONG 109using ::strtod; 110using ::strtof; 111using ::strtold; 112using ::strtol; 113#ifndef _LIBCPP_HAS_NO_LONG_LONG 114using ::strtoll; 115#endif // _LIBCPP_HAS_NO_LONG_LONG 116using ::strtoul; 117#ifndef _LIBCPP_HAS_NO_LONG_LONG 118using ::strtoull; 119#endif // _LIBCPP_HAS_NO_LONG_LONG 120using ::rand; 121using ::srand; 122using ::calloc; 123using ::free; 124using ::malloc; 125using ::realloc; 126using ::abort; 127using ::atexit; 128using ::exit; 129using ::_Exit; 130using ::getenv; 131using ::system; 132using ::bsearch; 133using ::qsort; 134#undef abs 135using ::abs; 136#undef labs 137using ::labs; 138#ifndef _LIBCPP_HAS_NO_LONG_LONG 139#undef llabs 140using ::llabs; 141#endif // _LIBCPP_HAS_NO_LONG_LONG 142#undef div 143using ::div; 144#undef ldiv 145using ::ldiv; 146#ifndef _LIBCPP_HAS_NO_LONG_LONG 147#undef lldiv 148using ::lldiv; 149#endif // _LIBCPP_HAS_NO_LONG_LONG 150#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS 151using ::mblen; 152using ::mbtowc; 153using ::wctomb; 154#endif 155using ::mbstowcs; 156using ::wcstombs; 157#ifdef _LIBCPP_HAS_QUICK_EXIT 158using ::at_quick_exit; 159using ::quick_exit; 160#endif 161#ifdef _LIBCPP_HAS_C11_FEATURES 162using ::aligned_alloc; 163#endif 164 165// MSVCRT already has the correct prototype in <stdlib.h> #ifdef __cplusplus 166#if !defined(_LIBCPP_MSVCRT) && !defined(__sun__) && !defined(_AIX) 167inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) _NOEXCEPT {return labs(__x);} 168#ifndef _LIBCPP_HAS_NO_LONG_LONG 169inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {return llabs(__x);} 170#endif // _LIBCPP_HAS_NO_LONG_LONG 171 172inline _LIBCPP_INLINE_VISIBILITY ldiv_t div( long __x, long __y) _NOEXCEPT {return ldiv(__x, __y);} 173#ifndef _LIBCPP_HAS_NO_LONG_LONG 174inline _LIBCPP_INLINE_VISIBILITY lldiv_t div(long long __x, long long __y) _NOEXCEPT {return lldiv(__x, __y);} 175#endif // _LIBCPP_HAS_NO_LONG_LONG 176#endif // _LIBCPP_MSVCRT 177 178_LIBCPP_END_NAMESPACE_STD 179 180#endif // _LIBCPP_CSTDLIB 181