blob: 6b447e135f168c1a0e499f00f7a232253eeb297f [file] [log] [blame]
// -*- 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 <rw/_defs.h>
#ifndef _RWSTD_NO_PURE_C_HEADERS
# include <ansi/_cstdlib.h>
#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