264 lines
5.7 KiB
C++
264 lines
5.7 KiB
C++
// -*- C++ -*-
|
|
/***************************************************************************
|
|
*
|
|
* cstdlib - C++ Standard library interface to the ANSI C header stdlib.h
|
|
*
|
|
* $Id: cstdlib 550991 2007-06-26 23:58:07Z sebor $
|
|
*
|
|
***************************************************************************
|
|
*
|
|
* 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
|