diff options
| author | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-12-07 09:35:57 +0000 |
|---|---|---|
| committer | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-12-07 09:35:57 +0000 |
| commit | 0fe3068e3b47285bb5c21d6b19cf76ededffc68f (patch) | |
| tree | 076de9fd1585847daacdaac6c30b78058cce3aa0 /libstdc++-v3/include/std/std_memory.h | |
| parent | 2f603cf0eb135bf67ff0bb570452df725a43c9ce (diff) | |
| download | ppe42-gcc-0fe3068e3b47285bb5c21d6b19cf76ededffc68f.tar.gz ppe42-gcc-0fe3068e3b47285bb5c21d6b19cf76ededffc68f.zip | |
2006-12-06 Benjamin Kosnik <bkoz@redhat.com>
* include/Makefile.am (std_headers_rename): Remove.
(c_base_headers_rename): Remove.
(std_headers): Adjust to true names.
(c_base_headers): Adjust to true names.
(stamp-c_base, stamp_std, stamp_c_base_extra): Adjust.
* configure: Regenerate.
* include/Makefile.in: Regenerate.
* include/std/std_algorithm.h: To...
* include/std/std_bitset.h: To...
* include/std/std_complex.h: To...
* include/std/std_deque.h: To...
* include/std/std_fstream.h: To...
* include/std/std_functional.h: To...
* include/std/std_iomanip.h: To...
* include/std/std_iosfwd.h: To...
* include/std/std_ios.h: To...
* include/std/std_iostream.h: To...
* include/std/std_istream.h: To...
* include/std/std_iterator.h: To...
* include/std/std_limits.h: To...
* include/std/std_list.h: To...
* include/std/std_locale.h: To...
* include/std/std_map.h: To...
* include/std/std_memory.h: To...
* include/std/std_numeric.h: To...
* include/std/std_ostream.h: To...
* include/std/std_queue.h: To...
* include/std/std_set.h: To...
* include/std/std_sstream.h: To...
* include/std/std_stack.h: To...
* include/std/std_stdexcept.h: To...
* include/std/std_streambuf.h: To...
* include/std/std_string.h: To...
* include/std/std_utility.h: To...
* include/std/std_valarray.h: To...
* include/std/std_vector.h: To...
* include/std/algorithm: ...this.
* include/std/bitset: ...this.
* include/std/complex: ...this.
* include/std/deque: ...this.
* include/std/fstream: ...this.
* include/std/functional: ...this.
* include/std/iomanip: ...this.
* include/std/iosfwd: ...this.
* include/std/ios: ...this.
* include/std/iostream: ...this.
* include/std/istream: ...this.
* include/std/iterator: ...this.
* include/std/limits: ...this.
* include/std/list: ...this.
* include/std/locale: ...this.
* include/std/map: ...this.
* include/std/memory: ...this.
* include/std/numeric: ...this.
* include/std/ostream: ...this.
* include/std/queue: ...this.
* include/std/set: ...this.
* include/std/sstream: ...this.
* include/std/stack: ...this.
* include/std/stdexcept: ...this.
* include/std/streambuf: ...this.
* include/std/string: ...this.
* include/std/utility: ...this.
* include/std/valarray: ...this.
* include/std/vector: ...this.
* include/c_std/std_cassert.h: To...
* include/c_std/std_cctype.h: To...
* include/c_std/std_cerrno.h: To...
* include/c_std/std_cfloat.h: To...
* include/c_std/std_ciso646.h: To...
* include/c_std/std_climits.h: To...
* include/c_std/std_clocale.h: To...
* include/c_std/std_cmath.h: To...
* include/c_std/std_csetjmp.h: To...
* include/c_std/std_csignal.h: To...
* include/c_std/std_cstdarg.h: To...
* include/c_std/std_cstddef.h: To...
* include/c_std/std_cstdio.h: To...
* include/c_std/std_cstdlib.h: To...
* include/c_std/std_cstring.h: To...
* include/c_std/std_ctime.h: To...
* include/c_std/std_cwchar.h: To...
* include/c_std/std_cwctype.h: To...
* include/c_std/cassert: ...this.
* include/c_std/cctype: ...this.
* include/c_std/cerrno: ...this.
* include/c_std/cfloat: ...this.
* include/c_std/ciso646: ...this.
* include/c_std/climits: ...this.
* include/c_std/clocale: ...this.
* include/c_std/cmath: ...this.
* include/c_std/csetjmp: ...this.
* include/c_std/csignal: ...this.
* include/c_std/cstdarg: ...this.
* include/c_std/cstddef: ...this.
* include/c_std/cstdio: ...this.
* include/c_std/cstdlib: ...this.
* include/c_std/cstring: ...this.
* include/c_std/ctime: ...this.
* include/c_std/cwchar: ...this.
* include/c_std/cwctype: ...this.
* include/c/std_cassert.h: To...
* include/c/std_cctype.h: To...
* include/c/std_cerrno.h: To...
* include/c/std_cfloat.h: To...
* include/c/std_ciso646.h: To...
* include/c/std_climits.h: To...
* include/c/std_clocale.h: To...
* include/c/std_cmath.h: To...
* include/c/std_csetjmp.h: To...
* include/c/std_csignal.h: To...
* include/c/std_cstdarg.h: To...
* include/c/std_cstddef.h: To...
* include/c/std_cstdio.h: To...
* include/c/std_cstdlib.h: To...
* include/c/std_cstring.h: To...
* include/c/std_ctime.h: To...
* include/c/std_cwchar.h: To...
* include/c/std_cwctype.h: To...
* include/c/cassert: ...this.
* include/c/cctype: ...this.
* include/c/cerrno: ...this.
* include/c/cfloat: ...this.
* include/c/ciso646: ...this.
* include/c/climits: ...this.
* include/c/clocale: ...this.
* include/c/cmath: ...this.
* include/c/csetjmp: ...this.
* include/c/csignal: ...this.
* include/c/cstdarg: ...this.
* include/c/cstddef: ...this.
* include/c/cstdio: ...this.
* include/c/cstdlib: ...this.
* include/c/cstring: ...this.
* include/c/ctime: ...this.
* include/c/cwchar: ...this.
* include/c/cwctype: ...this.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119611 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/std_memory.h')
| -rw-r--r-- | libstdc++-v3/include/std/std_memory.h | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/libstdc++-v3/include/std/std_memory.h b/libstdc++-v3/include/std/std_memory.h deleted file mode 100644 index b57a94f4bbd..00000000000 --- a/libstdc++-v3/include/std/std_memory.h +++ /dev/null @@ -1,374 +0,0 @@ -// <memory> -*- C++ -*- - -// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -/* - * Copyright (c) 1997-1999 - * Silicon Graphics Computer Systems, Inc. - * - * Permission to use, copy, modify, distribute and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. Silicon Graphics makes no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied warranty. - * - */ - -/** @file include/memory - * This is a Standard C++ Library header. - */ - -#ifndef _GLIBCXX_MEMORY -#define _GLIBCXX_MEMORY 1 - -#pragma GCC system_header - -#include <bits/stl_algobase.h> -#include <bits/allocator.h> -#include <bits/stl_construct.h> -#include <bits/stl_iterator_base_types.h> //for iterator_traits -#include <bits/stl_uninitialized.h> -#include <bits/stl_raw_storage_iter.h> -#include <debug/debug.h> -#include <limits> - -_GLIBCXX_BEGIN_NAMESPACE(std) - - /** - * @if maint - * This is a helper function. The unused second parameter exists to - * permit the real get_temporary_buffer to use template parameter deduction. - * - * XXX This should perhaps use the pool. - * @endif - */ - template<typename _Tp> - pair<_Tp*, ptrdiff_t> - __get_temporary_buffer(ptrdiff_t __len, _Tp*) - { - const ptrdiff_t __max = numeric_limits<ptrdiff_t>::max() / sizeof(_Tp); - if (__len > __max) - __len = __max; - - while (__len > 0) - { - _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), - nothrow)); - if (__tmp != 0) - return pair<_Tp*, ptrdiff_t>(__tmp, __len); - __len /= 2; - } - return pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0); - } - - /** - * @brief Allocates a temporary buffer. - * @param len The number of objects of type Tp. - * @return See full description. - * - * Reinventing the wheel, but this time with prettier spokes! - * - * This function tries to obtain storage for @c len adjacent Tp - * objects. The objects themselves are not constructed, of course. - * A pair<> is returned containing "the buffer s address and - * capacity (in the units of sizeof(Tp)), or a pair of 0 values if - * no storage can be obtained." Note that the capacity obtained - * may be less than that requested if the memory is unavailable; - * you should compare len with the .second return value. - * - * Provides the nothrow exception guarantee. - */ - template<typename _Tp> - inline pair<_Tp*, ptrdiff_t> - get_temporary_buffer(ptrdiff_t __len) - { return std::__get_temporary_buffer(__len, static_cast<_Tp*>(0)); } - - /** - * @brief The companion to get_temporary_buffer(). - * @param p A buffer previously allocated by get_temporary_buffer. - * @return None. - * - * Frees the memory pointed to by p. - */ - template<typename _Tp> - void - return_temporary_buffer(_Tp* __p) - { ::operator delete(__p, nothrow); } - - /** - * A wrapper class to provide auto_ptr with reference semantics. - * For example, an auto_ptr can be assigned (or constructed from) - * the result of a function which returns an auto_ptr by value. - * - * All the auto_ptr_ref stuff should happen behind the scenes. - */ - template<typename _Tp1> - struct auto_ptr_ref - { - _Tp1* _M_ptr; - - explicit - auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } - }; - - - /** - * @brief A simple smart pointer providing strict ownership semantics. - * - * The Standard says: - * <pre> - * An @c auto_ptr owns the object it holds a pointer to. Copying - * an @c auto_ptr copies the pointer and transfers ownership to the - * destination. If more than one @c auto_ptr owns the same object - * at the same time the behavior of the program is undefined. - * - * The uses of @c auto_ptr include providing temporary - * exception-safety for dynamically allocated memory, passing - * ownership of dynamically allocated memory to a function, and - * returning dynamically allocated memory from a function. @c - * auto_ptr does not meet the CopyConstructible and Assignable - * requirements for Standard Library <a - * href="tables.html#65">container</a> elements and thus - * instantiating a Standard Library container with an @c auto_ptr - * results in undefined behavior. - * </pre> - * Quoted from [20.4.5]/3. - * - * Good examples of what can and cannot be done with auto_ptr can - * be found in the libstdc++ testsuite. - * - * @if maint - * _GLIBCXX_RESOLVE_LIB_DEFECTS - * 127. auto_ptr<> conversion issues - * These resolutions have all been incorporated. - * @endif - */ - template<typename _Tp> - class auto_ptr - { - private: - _Tp* _M_ptr; - - public: - /// The pointed-to type. - typedef _Tp element_type; - - /** - * @brief An %auto_ptr is usually constructed from a raw pointer. - * @param p A pointer (defaults to NULL). - * - * This object now @e owns the object pointed to by @a p. - */ - explicit - auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } - - /** - * @brief An %auto_ptr can be constructed from another %auto_ptr. - * @param a Another %auto_ptr of the same type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownsership. - */ - auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } - - /** - * @brief An %auto_ptr can be constructed from another %auto_ptr. - * @param a Another %auto_ptr of a different but related type. - * - * A pointer-to-Tp1 must be convertible to a - * pointer-to-Tp/element_type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownsership. - */ - template<typename _Tp1> - auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } - - /** - * @brief %auto_ptr assignment operator. - * @param a Another %auto_ptr of the same type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownsership. The object that this one @e - * used to own and track has been deleted. - */ - auto_ptr& - operator=(auto_ptr& __a) throw() - { - reset(__a.release()); - return *this; - } - - /** - * @brief %auto_ptr assignment operator. - * @param a Another %auto_ptr of a different but related type. - * - * A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownsership. The object that this one @e - * used to own and track has been deleted. - */ - template<typename _Tp1> - auto_ptr& - operator=(auto_ptr<_Tp1>& __a) throw() - { - reset(__a.release()); - return *this; - } - - /** - * When the %auto_ptr goes out of scope, the object it owns is - * deleted. If it no longer owns anything (i.e., @c get() is - * @c NULL), then this has no effect. - * - * @if maint - * The C++ standard says there is supposed to be an empty throw - * specification here, but omitting it is standard conforming. Its - * presence can be detected only if _Tp::~_Tp() throws, but this is - * prohibited. [17.4.3.6]/2 - * @endif - */ - ~auto_ptr() { delete _M_ptr; } - - /** - * @brief Smart pointer dereferencing. - * - * If this %auto_ptr no longer owns anything, then this - * operation will crash. (For a smart pointer, "no longer owns - * anything" is the same as being a null pointer, and you know - * what happens when you dereference one of those...) - */ - element_type& - operator*() const throw() - { - _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); - return *_M_ptr; - } - - /** - * @brief Smart pointer dereferencing. - * - * This returns the pointer itself, which the language then will - * automatically cause to be dereferenced. - */ - element_type* - operator->() const throw() - { - _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); - return _M_ptr; - } - - /** - * @brief Bypassing the smart pointer. - * @return The raw pointer being managed. - * - * You can get a copy of the pointer that this object owns, for - * situations such as passing to a function which only accepts - * a raw pointer. - * - * @note This %auto_ptr still owns the memory. - */ - element_type* - get() const throw() { return _M_ptr; } - - /** - * @brief Bypassing the smart pointer. - * @return The raw pointer being managed. - * - * You can get a copy of the pointer that this object owns, for - * situations such as passing to a function which only accepts - * a raw pointer. - * - * @note This %auto_ptr no longer owns the memory. When this object - * goes out of scope, nothing will happen. - */ - element_type* - release() throw() - { - element_type* __tmp = _M_ptr; - _M_ptr = 0; - return __tmp; - } - - /** - * @brief Forcibly deletes the managed object. - * @param p A pointer (defaults to NULL). - * - * This object now @e owns the object pointed to by @a p. The - * previous object has been deleted. - */ - void - reset(element_type* __p = 0) throw() - { - if (__p != _M_ptr) - { - delete _M_ptr; - _M_ptr = __p; - } - } - - /** - * @brief Automatic conversions - * - * These operations convert an %auto_ptr into and from an auto_ptr_ref - * automatically as needed. This allows constructs such as - * @code - * auto_ptr<Derived> func_returning_auto_ptr(.....); - * ... - * auto_ptr<Base> ptr = func_returning_auto_ptr(.....); - * @endcode - */ - auto_ptr(auto_ptr_ref<element_type> __ref) throw() - : _M_ptr(__ref._M_ptr) { } - - auto_ptr& - operator=(auto_ptr_ref<element_type> __ref) throw() - { - if (__ref._M_ptr != this->get()) - { - delete _M_ptr; - _M_ptr = __ref._M_ptr; - } - return *this; - } - - template<typename _Tp1> - operator auto_ptr_ref<_Tp1>() throw() - { return auto_ptr_ref<_Tp1>(this->release()); } - - template<typename _Tp1> - operator auto_ptr<_Tp1>() throw() - { return auto_ptr<_Tp1>(this->release()); } - }; - -_GLIBCXX_END_NAMESPACE - -#endif /* _GLIBCXX_MEMORY */ |

