new   [plain text]


/*
 * Copyright (c) 2010 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */
#ifndef _NEW
#define _NEW

#include <stddef.h>

#include <exception>

namespace std  // purposefully not using versioning namespace
{

class bad_alloc : public exception
{
public:
     __attribute__ ((__visibility__("hidden"), __always_inline__)) 
             bad_alloc() throw() {}
    virtual ~bad_alloc() throw();
    virtual const char* what() const throw();
};

class bad_array_new_length : public bad_alloc
{
public:
    __attribute__ ((__visibility__("hidden"), __always_inline__)) 
             bad_array_new_length() throw() {}
    virtual ~bad_array_new_length() throw();
    virtual const char* what() const throw();
};

void __throw_bad_alloc();

struct nothrow_t {};
extern const nothrow_t nothrow;
typedef void (*new_handler)();
new_handler set_new_handler(new_handler) throw();

}  // std

void* operator new(size_t) throw(std::bad_alloc);
void* operator new(size_t, const std::nothrow_t&) throw();
void  operator delete(void*) throw();
void  operator delete(void*, const std::nothrow_t&) throw();

void* operator new[](size_t) throw(std::bad_alloc);
void* operator new[](size_t, const std::nothrow_t&) throw();
void  operator delete[](void*) throw();
void  operator delete[](void*, const std::nothrow_t&) throw();

__attribute__ ((__visibility__("hidden"), __always_inline__))
inline void* operator new  (size_t, void* __p) throw() {return __p;}

__attribute__ ((__visibility__("hidden"), __always_inline__))
inline void* operator new[](size_t, void* __p) throw() {return __p;}

__attribute__ ((__visibility__("hidden"), __always_inline__))
inline void  operator delete  (void*, void*) throw() {}

__attribute__ ((__visibility__("hidden"), __always_inline__))
inline void  operator delete[](void*, void*) throw() {}

#endif  // _NEW