// -*- C++ -*- /*************************************************************************** * * cstdlib - C++ Standard library interface to the ANSI C header stdlib.h * * $Id$ * *************************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you 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. * * Copyright 1994-2006 Rogue Wave Software. * **************************************************************************/ #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 (_RWSTD_NO_ABS_INT) \ || defined (__HP_aCC) \ && defined (_MATH_INCLUDED) && !defined (__MATH_INCLUDED) // hacking around an HP aCC quirk when using system headers // in /usr/include without the compiler's wrappers (i.e., // when -I/usr/include is on the command line) } // namespace std extern "C" { inline int abs (int __x) { return __x < 0 ? -__x : __x; } } // extern "C" namespace std { #endif // _RWSTD_NO_ABS && _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