// -*- C++ -*-
/***************************************************************************
 *
 * new - declarations for the Standard Library new header
 *
 * $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.
 * 
 **************************************************************************/

#ifndef _RWSTD_NEW_INCLUDED
#define _RWSTD_NEW_INCLUDED


#include <rw/_exception.h>
#include <rw/_new.h>
#include <rw/_defs.h>


// for compilers that define ::nothrow_t, as opposed to std::nothow_t,
// in their support library, struct nothrow_t is defined in the global
// namespace, otherwise in std
//
// +-------------------+-------------------+---------------------+
// | declaration/macro | _NO_STD_NOTHROW_T |  _NO_GLOBAL_NOTHROW |
// +-------------------+-------------------+---------------------+
// | std::nothrow_t    |       !defined    |         defined     |
// +-------------------+-------------------+---------------------+
// | std::nothrow_t    |       !defined    |        !defined     |
// +-------------------+-------------------+---------------------+
// | std::nothrow_t    |        defined    |         defined     |
// +-------------------+-------------------+---------------------+
// | using ::nothrow_t |        defined    |        !defined     |
// +-------------------+-------------------+---------------------+


#if !defined (_RWSTD_NO_STD_NOTHROW_T) || defined (_RWSTD_NO_GLOBAL_NOTHROW_T)

_RWSTD_NAMESPACE (std) {

#endif   // !_RWSTD_NO_STD_NOTHROW_T || _RWSTD_NO_GLOBAL_NOTHROW_T


#if !defined (_MSC_VER) || !defined (__NOTHROW_T_DEFINED)

   // disable definitions of nothrow_t in MSVC's <new.h>
#  define __NOTHROW_T_DEFINED

struct nothrow_t { };

#endif   // !_MSC_VER || !__NOTHROW_T_DEFINED


#if !defined (_RWSTD_NO_STD_NOTHROW_T) || defined (_RWSTD_NO_GLOBAL_NOTHROW_T)

}   // namespace std

#endif   // !_RWSTD_NO_STD_NOTHROW_T || _RWSTD_NO_GLOBAL_NOTHROW_T


#if    defined (_RWSTD_NO_STD_NOTHROW)           \
    && (    defined (_RWSTD_NO_GLOBAL_NOTHROW)   \
        || !defined (_RWSTD_NO_HONOR_STD))
#  define _RWSTD_EXPORT_NOTHROW   _RWSTD_EXPORT
#else
#  define _RWSTD_EXPORT_NOTHROW   /* empty */
#endif

// declare global nothrow if we need to bring it into std namespace
#if !defined (_RWSTD_NO_GLOBAL_NOTHROW) && defined (_RWSTD_NO_STD_NOTHROW)

// export the nothrow object iff it is also defined in the library
_RWSTD_EXPORT_NOTHROW extern const nothrow_t nothrow;

#endif   // !_RWSTD_NO_GLOBAL_NOTHROW_T && _RWSTD_NO_STD_NOTHROW


_RWSTD_NAMESPACE (std) {

#if defined (_RWSTD_NO_STD_NOTHROW_T) && !defined (_RWSTD_NO_GLOBAL_NOTHROW_T)

// bring the global nothrow_t into the std namespace
using ::nothrow_t;

#endif   // _RWSTD_NO_STD_NOTHROW_T || !_RWSTD_NO_GLOBAL_NOTHROW_T


#if __HP_aCC != 33000 && __HP_aCC != 33100

// 18.4.1
_RWSTD_EXPORT_NOTHROW extern const nothrow_t nothrow;

#else   // if (__HP_aCC == 33000) || (__HP_aCC == 33100)

// working around an HP aCC 3.30 bug (see PR #25382)
const nothrow_t nothrow = nothrow_t ();

#endif   // __HP_aCC == 33000 || __HP_aCC == 33100

}   // namespace std


#if    !defined (_RWSTD_NO_STD_BAD_ALLOC) \
    || !defined (_RWSTD_NO_RUNTIME_IN_STD)

_RWSTD_NAMESPACE (std) {

#endif   // _RWSTD_NO_STD_BAD_ALLOC || !_RWSTD_NO_RUNTIME_IN_STD


// 18.4.2.1
class _RWSTD_EXPORT bad_alloc: public _STD::exception
{
public:
    // 18.4.2.1, p2
    bad_alloc () _THROWS (());

    // 18.4.2.1, p4
    bad_alloc (const bad_alloc&) _THROWS (());

    // 18.4.2.1, p4
    bad_alloc& operator= (const bad_alloc&) _THROWS (());

#if !__INTEL_COMPILER || __INTEL_COMPILER > 800

    // prevent ld error when replacing operator new:
    // multiple definition of `operator new(unsigned long)'

    ~bad_alloc () _THROWS (());

    // 18.4.2.1, p5
    virtual const char* what () const  _THROWS (());

#endif   // Intel C++ > 8.0

};


#if    !defined (_RWSTD_NO_STD_BAD_ALLOC) \
    || !defined (_RWSTD_NO_RUNTIME_IN_STD)

#  define _RWSTD_BAD_ALLOC _STD::bad_alloc

}   // namespace std

#else   // if _RWSTD_NO_STD_BAD_ALLOC && _RWSTD_NO_RUNTIME_IN_STD

   // working around a gcc 2.x bug (PR #24400)
#  if !defined (__GNUG__) || __GNUG__ > 2

_RWSTD_NAMESPACE (std) {

_USING (::bad_alloc);

#    define _RWSTD_BAD_ALLOC _STD::bad_alloc

}   // namespace std

#  else
#    define _RWSTD_BAD_ALLOC ::bad_alloc
#  endif   // gcc > 2.x
#endif   // _RWSTD_NO_STD_BAD_ALLOC || !_RWSTD_NO_RUNTIME_IN_STD


#if !defined (_RWSTD_NO_STD_SET_NEW_HANDLER) || defined (_MSC_VER)

  // when using MSVC, declare set_new_handler() in namespace std
  // even though the runtime library doesn't define it there, so
  // that the declaration matches the one in the compiler's <new.h>
  // (the function is defined in our library)

_RWSTD_NAMESPACE (std) {

#endif   // !_RWSTD_NO_STD_SET_NEW_HANDLER || MSVC

// 18.4.2.3
typedef void (*new_handler) ();
_RWSTD_EXPORT new_handler set_new_handler (new_handler) _THROWS (());

#if !defined (_RWSTD_NO_STD_SET_NEW_HANDLER) || defined (_MSC_VER)

}   // namespace std

#else   // if !(!defined (_RWSTD_NO_STD_SET_NEW_HANDLER) || defined (_MSC_VER))

_RWSTD_NAMESPACE (std) {

_USING (::new_handler);
_USING (::set_new_handler);

}   // namespace std

#endif   // !_RWSTD_NO_STD_SET_NEW_HANDLER || MSVC


// 18.4.1.1 - replaceable
void* operator new (_RWSTD_SIZE_T) _NEW_THROWS ((_RWSTD_BAD_ALLOC));

#ifdef _RWSTD_NO_OPERATOR_NEW_NOTHROW
_RWSTD_EXPORT
#endif   // _RWSTD_NO_OPERATOR_NEW_NOTHROW
void* operator new (_RWSTD_SIZE_T, const _STD::nothrow_t&) _NEW_THROWS (());

void operator delete (void*) _NEW_THROWS (());

// guarded in case a compiler has trouble with these
// (e.g. gcc 2.95.2 in conjunction with placement new)
#ifndef _RWSTD_NO_PLACEMENT_DELETE

#  ifdef _RWSTD_NO_OPERATOR_DELETE_NOTHROW
_RWSTD_EXPORT
#  endif   // _RWSTD_NO_OPERATOR_DELETE_NOTHROW
void operator delete (void*, const _STD::nothrow_t&) _NEW_THROWS (());

#endif   // _RWSTD_NO_PLACEMENT_DELETE

// 18.4.1.2 - replaceable
#ifdef _RWSTD_NO_OPERATOR_NEW_ARRAY
_RWSTD_EXPORT
#endif   // _RWSTD_NO_OPERATOR_NEW_ARRAY
void* operator new[] (_RWSTD_SIZE_T) _NEW_THROWS ((_RWSTD_BAD_ALLOC));

#ifdef _RWSTD_NO_OPERATOR_NEW_ARRAY_NOTHROW
_RWSTD_EXPORT
#endif   // _RWSTD_NO_OPERATOR_NEW_ARRAY_NOTHROW
void* operator new[] (_RWSTD_SIZE_T, const _STD::nothrow_t&) _NEW_THROWS (());

#ifdef _RWSTD_NO_OPERATOR_DELETE_ARRAY
_RWSTD_EXPORT
#endif   // _RWSTD_NO_OPERATOR_DELETE_ARRAY
void operator delete[] (void*) _NEW_THROWS (());

#ifndef _RWSTD_NO_PLACEMENT_DELETE

#  ifdef _RWSTD_NO_OPERATOR_DELETE_ARRAY_NOTHROW
_RWSTD_EXPORT
#  endif   // _RWSTD_NO_OPERATOR_DELETE_ARRAY_NOTHROW
void operator delete[] (void*, const _STD::nothrow_t&) _NEW_THROWS (());

#endif   // _RWSTD_NO_PLACEMENT_DELETE

// 18.4.1.3, p2 - not replaceable (see <rw/_new.h>)
// void* operator new (_RWSTD_SIZE_T, void*) _NEW_THROWS (());

// 18.4.1.3, p5 - not replaceable
#ifdef _RWSTD_NO_OPERATOR_NEW_ARRAY_PLACEMENT
_RWSTD_EXPORT
#endif   // _RWSTD_NO_OPERATOR_NEW_ARRAY_PLACEMENT
void* operator new[] (_RWSTD_SIZE_T, void*) _NEW_THROWS (());

#ifdef _RWSTD_NO_OPERATOR_NEW_ARRAY_PLACEMENT

// not replaceable
inline void* operator new[] (_RWSTD_SIZE_T, void *__ptr) _NEW_THROWS (())
{
    return __ptr;   // inline for efficiency
}

#endif   // _RWSTD_NO_OPERATOR_NEW_ARRAY_PLACEMENT


#ifndef _RWSTD_NO_PLACEMENT_DELETE

// 18.4.1.3, p7 - not replaceable (see <rw/_new.h>)
// void operator delete (void*, void*) _NEW_THROWS (());

// 18.4.1.3, p9 - not replaceable
#  ifdef _RWSTD_NO_OPERATOR_DELETE_ARRAY_PLACEMENT
_RWSTD_EXPORT
#  endif   // _RWSTD_NO_OPERATOR_DELETE_ARRAY_PLACEMENT
void operator delete[] (void*, void*) _NEW_THROWS (());

#  if defined (_RWSTD_NO_OPERATOR_DELETE_ARRAY_PLACEMENT)

// not replaceable
inline void operator delete[] (void*, void*) _NEW_THROWS (())
{
    // no-op, inline for efficiency
}

#  endif   // _RWSTD_NO_OPERATOR_DELETE_ARRAY_PLACEMENT

#endif   // _RWSTD_NO_PLACEMENT_DELETE


#endif   // _RWSTD_NEW_INCLUDED
