Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. // -*- C++ -*- forwarding header.
  2.  
  3. // Copyright (C) 1997-2015 Free Software Foundation, Inc.
  4. //
  5. // This file is part of the GNU ISO C++ Library.  This library is free
  6. // software; you can redistribute it and/or modify it under the
  7. // terms of the GNU General Public License as published by the
  8. // Free Software Foundation; either version 3, or (at your option)
  9. // any later version.
  10.  
  11. // This library is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15.  
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. /** @file include/cstdlib
  26.  *  This is a Standard C++ Library file.  You should @c #include this file
  27.  *  in your programs, rather than any of the @a *.h implementation files.
  28.  *
  29.  *  This is the C++ version of the Standard C Library header @c stdlib.h,
  30.  *  and its contents are (mostly) the same as that header, but are all
  31.  *  contained in the namespace @c std (except for names which are defined
  32.  *  as macros in C).
  33.  */
  34.  
  35. //
  36. // ISO C++ 14882: 20.4.6  C library
  37. //
  38.  
  39. #ifndef _GLIBCXX_CSTDLIB
  40. #define _GLIBCXX_CSTDLIB 1
  41.  
  42. #pragma GCC system_header
  43.  
  44. #include <bits/c++config.h>
  45.  
  46. #if !_GLIBCXX_HOSTED
  47. // The C standard does not require a freestanding implementation to
  48. // provide <stdlib.h>.  However, the C++ standard does still require
  49. // <cstdlib> -- but only the functionality mentioned in
  50. // [lib.support.start.term].
  51.  
  52. #define EXIT_SUCCESS 0
  53. #define EXIT_FAILURE 1
  54.  
  55. namespace std
  56. {
  57.   extern "C" void abort(void) throw () _GLIBCXX_NORETURN;
  58.   extern "C" int atexit(void (*)(void)) throw ();
  59.   extern "C" void exit(int) throw () _GLIBCXX_NORETURN;
  60. #if __cplusplus >= 201103L
  61. # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
  62.   extern "C" int at_quick_exit(void (*)(void)) throw ();
  63. # endif
  64. # ifdef _GLIBCXX_HAVE_QUICK_EXIT
  65.   extern "C" void quick_exit(int) throw() _GLIBCXX_NORETURN;
  66. # endif
  67. #endif
  68. } // namespace
  69.  
  70. #else
  71.  
  72. #include <stdlib.h>
  73.  
  74. // Get rid of those macros defined in <stdlib.h> in lieu of real functions.
  75. #undef abort
  76. #undef abs
  77. #undef atexit
  78. #if __cplusplus >= 201103L
  79. # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
  80. #  undef at_quick_exit
  81. # endif
  82. #endif
  83. #undef atof
  84. #undef atoi
  85. #undef atol
  86. #undef bsearch
  87. #undef calloc
  88. #undef div
  89. #undef exit
  90. #undef free
  91. #undef getenv
  92. #undef labs
  93. #undef ldiv
  94. #undef malloc
  95. #undef mblen
  96. #undef mbstowcs
  97. #undef mbtowc
  98. #undef qsort
  99. #if __cplusplus >= 201103L
  100. # ifdef _GLIBCXX_HAVE_QUICK_EXIT
  101. #  undef quick_exit
  102. # endif
  103. #endif
  104. #undef rand
  105. #undef realloc
  106. #undef srand
  107. #undef strtod
  108. #undef strtol
  109. #undef strtoul
  110. #undef system
  111. #undef wcstombs
  112. #undef wctomb
  113.  
  114. namespace std _GLIBCXX_VISIBILITY(default)
  115. {
  116. _GLIBCXX_BEGIN_NAMESPACE_VERSION
  117.  
  118.   using ::div_t;
  119.   using ::ldiv_t;
  120.  
  121.   using ::abort;
  122.   using ::abs;
  123.   using ::atexit;
  124. #if __cplusplus >= 201103L
  125. # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
  126.   using ::at_quick_exit;
  127. # endif
  128. #endif
  129.   using ::atof;
  130.   using ::atoi;
  131.   using ::atol;
  132.   using ::bsearch;
  133.   using ::calloc;
  134.   using ::div;
  135.   using ::exit;
  136.   using ::free;
  137.   using ::getenv;
  138.   using ::labs;
  139.   using ::ldiv;
  140.   using ::malloc;
  141. #ifdef _GLIBCXX_HAVE_MBSTATE_T
  142.   using ::mblen;
  143.   using ::mbstowcs;
  144.   using ::mbtowc;
  145. #endif // _GLIBCXX_HAVE_MBSTATE_T
  146.   using ::qsort;
  147. #if __cplusplus >= 201103L
  148. # ifdef _GLIBCXX_HAVE_QUICK_EXIT
  149.   using ::quick_exit;
  150. # endif
  151. #endif
  152.   using ::rand;
  153.   using ::realloc;
  154.   using ::srand;
  155.   using ::strtod;
  156.   using ::strtol;
  157.   using ::strtoul;
  158.   using ::system;
  159. #ifdef _GLIBCXX_USE_WCHAR_T
  160.   using ::wcstombs;
  161.   using ::wctomb;
  162. #endif // _GLIBCXX_USE_WCHAR_T
  163.  
  164.   inline long
  165.   abs(long __i) { return __builtin_labs(__i); }
  166.  
  167. #ifdef _GLIBCXX_USE_LONG_LONG
  168.   inline long long
  169.   abs(long long __x) { return __builtin_llabs (__x); }
  170. #endif
  171.  
  172. #if defined(__GLIBCXX_TYPE_INT_N_0)
  173.   inline __GLIBCXX_TYPE_INT_N_0
  174.   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
  175. #endif
  176. #if defined(__GLIBCXX_TYPE_INT_N_1)
  177.   inline __GLIBCXX_TYPE_INT_N_1
  178.   abs(__GLIBCXX_TYPE_INT_N_1 __x) { return __x >= 0 ? __x : -__x; }
  179. #endif
  180. #if defined(__GLIBCXX_TYPE_INT_N_2)
  181.   inline __GLIBCXX_TYPE_INT_N_2
  182.   abs(__GLIBCXX_TYPE_INT_N_2 __x) { return __x >= 0 ? __x : -__x; }
  183. #endif
  184. #if defined(__GLIBCXX_TYPE_INT_N_3)
  185.   inline __GLIBCXX_TYPE_INT_N_3
  186.   abs(__GLIBCXX_TYPE_INT_N_3 __x) { return __x >= 0 ? __x : -__x; }
  187. #endif
  188.  
  189.   inline ldiv_t
  190.   div(long __i, long __j) { return ldiv(__i, __j); }
  191.  
  192. _GLIBCXX_END_NAMESPACE_VERSION
  193. } // namespace
  194.  
  195. #if _GLIBCXX_USE_C99
  196.  
  197. #undef _Exit
  198. #undef llabs
  199. #undef lldiv
  200. #undef atoll
  201. #undef strtoll
  202. #undef strtoull
  203. #undef strtof
  204. #undef strtold
  205.  
  206. namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
  207. {
  208. _GLIBCXX_BEGIN_NAMESPACE_VERSION
  209.  
  210. #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
  211.   using ::lldiv_t;
  212. #endif
  213. #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
  214.   extern "C" void (_Exit)(int) throw () _GLIBCXX_NORETURN;
  215. #endif
  216. #if !_GLIBCXX_USE_C99_DYNAMIC
  217.   using ::_Exit;
  218. #endif
  219.  
  220. #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
  221.   using ::llabs;
  222.  
  223.   inline lldiv_t
  224.   div(long long __n, long long __d)
  225.   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
  226.  
  227.   using ::lldiv;
  228. #endif
  229.  
  230. #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
  231.   extern "C" long long int (atoll)(const char *) throw ();
  232.   extern "C" long long int
  233.     (strtoll)(const char * __restrict, char ** __restrict, int) throw ();
  234.   extern "C" unsigned long long int
  235.     (strtoull)(const char * __restrict, char ** __restrict, int) throw ();
  236. #endif
  237. #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
  238.   using ::atoll;
  239.   using ::strtoll;
  240.   using ::strtoull;
  241. #endif
  242.   using ::strtof;
  243.   using ::strtold;
  244.  
  245. _GLIBCXX_END_NAMESPACE_VERSION
  246. } // namespace __gnu_cxx
  247.  
  248. namespace std
  249. {
  250. #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
  251.   using ::__gnu_cxx::lldiv_t;
  252. #endif
  253.   using ::__gnu_cxx::_Exit;
  254. #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
  255.   using ::__gnu_cxx::llabs;
  256.   using ::__gnu_cxx::div;
  257.   using ::__gnu_cxx::lldiv;
  258. #endif
  259.   using ::__gnu_cxx::atoll;
  260.   using ::__gnu_cxx::strtof;
  261.   using ::__gnu_cxx::strtoll;
  262.   using ::__gnu_cxx::strtoull;
  263.   using ::__gnu_cxx::strtold;
  264. } // namespace std
  265.  
  266. #endif // _GLIBCXX_USE_C99
  267.  
  268. #endif // !_GLIBCXX_HOSTED
  269.  
  270. #endif
  271.