// -*- C++ -*- /*************************************************************************** * * cstdlib - C++ Standard library interface to the ANSI C header stdlib.h * * $Id$ * *************************************************************************** * * Copyright (c) 1994-2005 Quovadx, Inc., acting through its Rogue Wave * Software division. Licensed under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. Unless required by * applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License * for the specific language governing permissions and limitations under * the License. * **************************************************************************/ #include #ifndef _RWSTD_NO_PURE_C_HEADERS # include #else #ifndef _RWSTD_NO_DEPRECATED_C_HEADERS #ifndef _RWSTD_NAMESPACE_STD_OPEN #define _RWSTD_NAMESPACE_STD_OPEN 15 _RWSTD_NAMESPACE (std) { #endif // _RWSTD_NAMESPACE_STD_OPEN #include _RWSTD_ANSI_C_STDLIB_H #ifndef _RWSTD_CSTDLIB_INCLUDED #define _RWSTD_CSTDLIB_INCLUDED #ifdef _RWSTD_NO_ABS_LONG inline long abs (long __x) { return __x < 0L ? -__x : __x; } #endif // _RWSTD_NO_ABS_LONG #ifdef _RWSTD_NO_DIV_LONG # ifndef _RWSTD_NO_LDIV inline ldiv_t div (long __x, long __y) { return ldiv (__x, __y); } # endif // _RWSTD_NO_LDIV #endif // _RWSTD_NO_DIV_LONG #endif // _RWSTD_CSTDLIB_INCLUDED #if _RWSTD_NAMESPACE_STD_OPEN == 15 # undef _RWSTD_NAMESPACE_STD_OPEN } // namespace std #endif // _RWSTD_NAMESPACE_STD_OPEN == 15 #else // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS) #ifndef _RWSTD_CSTDLIB_INCLUDED #define _RWSTD_CSTDLIB_INCLUDED #include _RWSTD_ANSI_C_STDLIB_H #undef ldiv #if !defined (_RWSTD_NO_NAMESPACE) && !defined (_RWSTD_NO_HONOR_STD) && \ !defined (_RWSTD_NO_USING_LIBC_IN_STD) namespace std { #ifdef _RWSTD_NO_ABS_UINT inline unsigned abs (unsigned __x) { return __x; } #endif // _RWSTD_NO_ABS_UINT #ifdef _RWSTD_NO_ABS_LONG inline long abs (long __x) { return __x < 0L ? -__x : __x; } #endif // _RWSTD_NO_ABS_LONG #ifdef _RWSTD_NO_ABS_ULONG inline unsigned long abs (unsigned long __x) { return __x; } #endif // _RWSTD_NO_ABS_ULONG #ifdef _RWSTD_LONG_LONG # ifdef _RWSTD_NO_ABS_LLONG inline _RWSTD_LONG_LONG abs (_RWSTD_LONG_LONG __x) { return __x < (_RWSTD_LONG_LONG)0 ? -__x : __x; } # endif // _RWSTD_NO_ABS_LLONG # ifdef _RWSTD_NO_ABS_ULLONG inline unsigned _RWSTD_LONG_LONG abs (unsigned _RWSTD_LONG_LONG __x) { return __x; } # endif // _RWSTD_NO_ABS_ULLONG #endif // _RWSTD_LONG_LONG #ifdef _RWSTD_NO_DIV_LONG # ifndef _RWSTD_NO_LDIV inline ldiv_t div (long __x, long __y) { return ldiv (__x, __y); } # endif // _RWSTD_NO_LDIV #endif // _RWSTD_NO_DIV_LONG #ifndef _RWSTD_NO_EXTERN_C_COMPATIBILITY # ifndef _RWSTD_NO_EXTERN_C_OVERLOAD extern "C" { typedef int (*__rw_compar_t)(const void*, const void*); } extern "C++" { // 25.4, p3 inline void* bsearch (const void *__key, const void *__base, size_t __n, size_t __size, int (*__cmp)(const void*, const void*)) { return ::bsearch (__key, __base, __n, __size, _RWSTD_REINTERPRET_CAST (__rw_compar_t, __cmp)); } // 25.4, p4 inline void qsort (void *__base, size_t __n, size_t __size, int (*__cmp)(const void*, const void*)) { return ::qsort (__base, __n, __size, _RWSTD_REINTERPRET_CAST (__rw_compar_t, __cmp)); } } // extern "C++" # endif // _RWSTD_NO_EXTERN_C_OVERLOAD #endif // _RWSTD_NO_EXTERN_C_COMPATIBILITY // using statements must come after the overloads. // working around MSVC6 PR# 27677 using ::size_t; using ::div_t; #ifndef _RWSTD_NO_LDIV using ::ldiv_t; #endif // _RWSTD_NO_LDIV using ::abort; #if (defined (_RWSTD_NO_ABS) || defined (__hpux)) && defined (_RWSTD_NO_ABS_INT) // working around a quirk in HP-UX and } // namespace std extern "C" { inline int abs (int __x) { return __x < 0 ? -__x : __x; } } // extern "C" namespace std { #endif // (_RWSTD_NO_ABS || __hpux) && _RWSTD_NO_ABS_INT using ::abs; using ::atexit; using ::atof; using ::atoi; using ::atol; using ::bsearch; using ::calloc; using ::div; using ::exit; using ::free; using ::getenv; using ::labs; using ::ldiv; using ::malloc; using ::mblen; using ::mbstowcs; #ifndef _RWSTD_NO_MBTOWC using ::mbtowc; #endif // _RWSTD_NO_MBTOWC using ::qsort; using ::rand; using ::realloc; using ::srand; using ::strtod; using ::strtol; using ::strtoul; using ::system; using ::wcstombs; using ::wctomb; } // namespace std #endif // !_RWSTD_NO_NAMESPACE && !_RWSTD_NO_HONOR_STD && !_RWSTD_NO_USING_LIBC_IN_STD #endif // _RWSTD_CSTDLIB_INCLUDED #endif // _RWSTD_NO_DEPRECATED_C_HEADERS #endif // _RWSTD_NO_PURE_C_HEADERS