summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/std/std_memory.h
diff options
context:
space:
mode:
authorpme <pme@138bc75d-0d04-0410-961f-82ee72b054a4>2002-01-12 00:50:04 +0000
committerpme <pme@138bc75d-0d04-0410-961f-82ee72b054a4>2002-01-12 00:50:04 +0000
commitb71a79688e3048bf4a49da53df92429c562456c8 (patch)
treeab8b6c5714b0948e27ee85110a85045972d08c6e /libstdc++-v3/include/std/std_memory.h
parentea7f40600b3be0b8e1ab7a9cb92b2c79373d7151 (diff)
downloadppe42-gcc-b71a79688e3048bf4a49da53df92429c562456c8.tar.gz
ppe42-gcc-b71a79688e3048bf4a49da53df92429c562456c8.zip
2002-01-11 Phil Edwards <pme@gcc.gnu.org>
* include/Makefile.am (std_headers): Update list with new names. (stamp-std): Link to standardized name. * include/Makefile.in: Regenerate. * include/std/algorithm, include/std/bitset, include/std/complex, include/std/deque, include/std/fstream, include/std/functional, include/std/iomanip, include/std/ios, include/std/iosfwd, include/std/iostream, include/std/istream, include/std/iterator, include/std/limits, include/std/list, include/std/locale, include/std/map, include/std/memory, include/std/numeric, include/std/ostream, include/std/queue, include/std/set, include/std/sstream, include/std/stack, include/std/stdexcept, include/std/streambuf, include/std/string, include/std/utility, include/std/valarray, include/std/vector: Rename to... * include/std/std_algorithm.h, include/std/std_bitset.h, include/std/std_complex.h, include/std/std_deque.h, include/std/std_fstream.h, include/std/std_functional.h, include/std/std_iomanip.h, include/std/std_ios.h, include/std/std_iosfwd.h, include/std/std_iostream.h, include/std/std_istream.h, include/std/std_iterator.h, include/std/std_limits.h, include/std/std_list.h, include/std/std_locale.h, include/std/std_map.h, include/std/std_memory.h, include/std/std_numeric.h, include/std/std_ostream.h, include/std/std_queue.h, include/std/std_set.h, include/std/std_sstream.h, include/std/std_stack.h, include/std/std_stdexcept.h, include/std/std_streambuf.h, include/std/std_string.h, include/std/std_utility.h, include/std/std_valarray.h, include/std/std_vector.h: ...this. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48788 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/std_memory.h')
-rw-r--r--libstdc++-v3/include/std/std_memory.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/std_memory.h b/libstdc++-v3/include/std/std_memory.h
new file mode 100644
index 00000000000..c9a2e59e48e
--- /dev/null
+++ b/libstdc++-v3/include/std/std_memory.h
@@ -0,0 +1,149 @@
+// <memory> -*- C++ -*-
+
+// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// 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 std_memory.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _CPP_MEMORY
+#define _CPP_MEMORY 1
+
+#pragma GCC system_header
+
+#include <bits/stl_algobase.h>
+#include <bits/stl_alloc.h>
+#include <bits/stl_construct.h>
+#include <bits/stl_iterator_base_types.h> //for iterator_traits
+#include <bits/stl_tempbuf.h>
+#include <bits/stl_uninitialized.h>
+#include <bits/stl_raw_storage_iter.h>
+
+namespace std
+{
+
+ template<class _Tp1> struct auto_ptr_ref {
+ _Tp1* _M_ptr;
+ auto_ptr_ref(_Tp1* __p) : _M_ptr(__p) {}
+};
+
+/**
+ * A simple smart pointer providing strict ownership semantics. (More later.)
+*/
+template <class _Tp> class auto_ptr {
+private:
+ _Tp* _M_ptr;
+
+public:
+ typedef _Tp element_type;
+
+ explicit auto_ptr(_Tp* __p = 0) throw() : _M_ptr(__p) {}
+ auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) {}
+
+ template <class _Tp1> auto_ptr(auto_ptr<_Tp1>& __a) throw()
+ : _M_ptr(__a.release()) {}
+
+ auto_ptr& operator=(auto_ptr& __a) throw() {
+ reset(__a.release());
+ return *this;
+ }
+
+ template <class _Tp1>
+ auto_ptr& operator=(auto_ptr<_Tp1>& __a) throw() {
+ reset(__a.release());
+ return *this;
+ }
+
+ // Note: 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 (17.4.3.6/2)
+ // this is prohibited.
+ ~auto_ptr() { delete _M_ptr; }
+
+ _Tp& operator*() const throw() {
+ return *_M_ptr;
+ }
+ _Tp* operator->() const throw() {
+ return _M_ptr;
+ }
+ _Tp* get() const throw() {
+ return _M_ptr;
+ }
+ _Tp* release() throw() {
+ _Tp* __tmp = _M_ptr;
+ _M_ptr = 0;
+ return __tmp;
+ }
+ void reset(_Tp* __p = 0) throw() {
+ if (__p != _M_ptr) {
+ delete _M_ptr;
+ _M_ptr = __p;
+ }
+ }
+
+public:
+ auto_ptr(auto_ptr_ref<_Tp> __ref) throw()
+ : _M_ptr(__ref._M_ptr) {}
+
+ auto_ptr& operator=(auto_ptr_ref<_Tp> __ref) throw() {
+ if (__ref._M_ptr != this->get()) {
+ delete _M_ptr;
+ _M_ptr = __ref._M_ptr;
+ }
+ return *this;
+ }
+
+ template <class _Tp1> operator auto_ptr_ref<_Tp1>() throw()
+ { return auto_ptr_ref<_Tp>(this->release()); }
+ template <class _Tp1> operator auto_ptr<_Tp1>() throw()
+ { return auto_ptr<_Tp1>(this->release()); }
+};
+
+} // namespace std
+
+#endif /* _CPP_MEMORY */
+
+
+// Local Variables:
+// mode:C++
+// End:
OpenPOWER on IntegriCloud