19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This file is part of the ustl library, an STL implementation. 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net> 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This file is free software, distributed under the MIT License. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/// \file unew.h 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/// 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/// \brief Same as \<new\>, but throws ustl:: exceptions. 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef UNEW_H_11D237512B324C9C05A55DAF1BF086F1 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define UNEW_H_11D237512B324C9C05A55DAF1BF086F1 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "uexception.h" 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/// Just like malloc, but throws on failure. 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid* throwing_malloc (size_t n) throw (ustl::bad_alloc); 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/// Just like free, but doesn't crash when given a NULL. 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid free_nullok (void* p) throw(); 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef WITHOUT_LIBSTDCPP 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// These are replaceable signatures: 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// - normal single new and delete (no arguments, throw @c bad_alloc on error) 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// - normal array new and delete (same) 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// - @c nothrow single new and delete (take a @c nothrow argument, return 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// @c NULL on error) 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// - @c nothrow array new and delete (same) 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Placement new and delete signatures (take a memory address argument, 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// does nothing) may not be replaced by a user's program. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void* operator new (size_t n) throw (ustl::bad_alloc) { return (throwing_malloc (n)); } 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void* operator new[] (size_t n) throw (ustl::bad_alloc) { return (throwing_malloc (n)); } 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void operator delete (void* p) throw() { free_nullok (p); } 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void operator delete[] (void* p) throw() { free_nullok (p); } 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Default placement versions of operator new. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void* operator new (size_t, void* p) throw() { return (p); } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void* operator new[] (size_t, void* p) throw() { return (p); } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Default placement versions of operator delete. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void operator delete (void*, void*) throw() { } 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline void operator delete[](void*, void*) throw() { } 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#else 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <new> 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // WITHOUT_LIBSTDCPP 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 53