diff options
author | obrien <obrien@FreeBSD.org> | 2002-05-28 16:16:03 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2002-05-28 16:16:03 +0000 |
commit | 0895e1acb698e05d503c26bec5471de2e88b7d93 (patch) | |
tree | 7b14e1142a8f8cf48f311f5246aa3b355f2380b6 /contrib/libstdc++/include/c_shadow/bits/std_cstdlib.h | |
parent | efbfe7b228c18b8cc364aabaefd6f8253bc6b5ad (diff) | |
download | FreeBSD-src-0895e1acb698e05d503c26bec5471de2e88b7d93.zip FreeBSD-src-0895e1acb698e05d503c26bec5471de2e88b7d93.tar.gz |
Gcc 3.1.0 pre-release's C++ support bits from the FSF anoncvs repo
on 9-May-2002 15:57:15 EDT.
Diffstat (limited to 'contrib/libstdc++/include/c_shadow/bits/std_cstdlib.h')
-rw-r--r-- | contrib/libstdc++/include/c_shadow/bits/std_cstdlib.h | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/contrib/libstdc++/include/c_shadow/bits/std_cstdlib.h b/contrib/libstdc++/include/c_shadow/bits/std_cstdlib.h new file mode 100644 index 0000000..d219efd --- /dev/null +++ b/contrib/libstdc++/include/c_shadow/bits/std_cstdlib.h @@ -0,0 +1,197 @@ +// -*- C++ -*- header wrapper + +// Copyright (C) 1997-1999, 2000 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 20.4.6 C library +// + +// Function decls in this header are overloaded on the +// extern "C"-ness of arguments. This is a rich ground +// for compiler bugs. + +#ifndef _CPP_CSTDLIB +#define _CPP_CSTDLIB 1 + +# include <bits/c++config.h> +# include <bits/std_cstddef.h> + +namespace _C_legacy { + extern "C" { +# define _IN_C_LEGACY_ +# pragma GCC system_header +# include_next <stdlib.h> + typedef int (*_C_cmp_fun_ptr)(const void*, const void*); // C fn ptr + } + + typedef div_t _CPP_div_t_capture; + typedef ldiv_t _CPP_ldiv_t_capture; + +# if _GLIBCPP_HAVE_LLDIV_T + typedef lldiv_t _CPP_lldiv_t_capture; +# endif +} // namespace _C_legacy + +# undef wchar_t +# undef div_t +# undef ldiv_t + +# undef atof +# undef atoi +# undef atol +# undef strtod +# undef strtol +# undef strtoul +#ifdef _GLIBCPP_HAVE_STRTOLD +# undef strtold +#endif +# undef rand +# undef srand +# undef calloc +# undef free +# undef malloc +# undef realloc +# undef abort +# undef atexit +# undef exit +# undef getenv +# undef system +# undef bsearch +# undef qsort +# undef abs +# undef div +# undef labs +# undef ldiv +#ifdef _GLIBCPP_USE_C99 +# undef llabs +# undef lldiv +#endif +# undef mblen +# undef mbtowc +# undef wctomb +# undef mbstowcs +# undef wcstombs + +namespace std { + struct div_t : _C_legacy::_CPP_div_t_capture { }; + struct ldiv_t : _C_legacy::_CPP_ldiv_t_capture { }; + +#ifdef _GLIBCPP_USE_C99 +# ifdef _GLIBCPP_HAVE_LLDIV_T + struct lldiv_t : _C_legacy::_CPP_lldiv_t_capture { }; +# else + struct lldiv_t + { + long long quot; + long long rem; + }; +# endif +#endif + + using _C_legacy::atof; + using _C_legacy::atoi; + using _C_legacy::atol; + using _C_legacy::strtod; + using _C_legacy::strtol; + using _C_legacy::strtoul; + using _C_legacy::rand; + using _C_legacy::srand; + using _C_legacy::calloc; + using _C_legacy::free; + using _C_legacy::malloc; + using _C_legacy::realloc; + + // using _C_legacy::abort; + using _C_legacy::atexit; + // using _C_legacy::exit; + using _C_legacy::bsearch; + using _C_legacy::qsort; + + using _C_legacy::getenv; + using _C_legacy::system; + using _C_legacy::mbtowc; + using _C_legacy::wctomb; + using _C_legacy::mbstowcs; + using _C_legacy::wcstombs; + + using _C_legacy::strtof; + +#ifdef _GLIBCPP_USE_LONG_LONG + using _C_legacy::strtoll; + using _C_legacy::strtoull; +#endif + +#ifdef _GLIBCPP_HAVE_STRTOLD + using _C_legacy::strtold; +#endif + + using _C_legacy::mblen; + + inline int + abs(int __x) { return __x >= 0 ? __x : -__x; } + + inline div_t + div(int __n, int __d) + { div_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } + + inline long + labs(long __x) { return __x >= 0 ? __x : -__x; } + + inline long + abs(long __x) { return __x >= 0 ? __x : -__x; } + + inline ldiv_t + ldiv(long __n, long __d) + { ldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } + + inline ldiv_t + div(long __n, long __d) + { ldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } + +#ifdef _GLIBCPP_USE_C99 + inline long long + llabs(long long __x) { return __x >= 0 ? __x : -__x; } + + inline long long + abs(long long __x) { return __x >= 0 ? __x : -__x; } + + inline lldiv_t + lldiv(long long __n, long long __d) + { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } + + inline lldiv_t + div(long long __n, long long __d) + { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } +#endif +} // namespace std + +# undef _IN_C_LEGACY_ + +#endif + + |