Commit 494fff4c by Stephen M. Webb Committed by Benjamin Kosnik

stl_construct.h (construct): Remove.


2001-07-01  Stephen M. Webb <stephen@bregmasoft.com>

	* include/bits/stl_construct.h (construct): Remove.
      	(destroy): Remove.
      	(__destroy): Replaced by use of iterator_traits.
	* include/bits/stl_deque.h: replaced HP iterator functions with
	iterator_traits.
        (construct): changed to _Construct.
	(destroy): changed to _Destroy.
	* include/bits/stl_tempbuf.h: Same.
	* include/bits/stl_tree.h: Same.
	* include/bits/stl_vector.h: Same.
	* include/backward/iterator.h (construct): moved definition to here.
	(destroy): Same.

From-SVN: r43701
parent becbcf96
2001-07-01 Stephen M. Webb <stephen@bregmasoft.com>
* include/bits/stl_construct.h (construct): Remove.
(destroy): Remove.
(__destroy): Replaced by use of iterator_traits.
* include/bits/stl_deque.h: replaced HP iterator functions with
iterator_traits.
(construct): changed to _Construct.
(destroy): changed to _Destroy.
* include/bits/stl_tempbuf.h: Same.
* include/bits/stl_tree.h: Same.
* include/bits/stl_vector.h: Same.
* include/backward/iterator.h (construct): moved definition to here.
(destroy): Same.
2001-06-29 Benjamin Kosnik <bkoz@redhat.com> 2001-06-29 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/locale_facets.tcc (locale::combine): Clone _Impl. * include/bits/locale_facets.tcc (locale::combine): Clone _Impl.
......
// Backward-compat support -*- 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) 1994 * Copyright (c) 1994
...@@ -104,8 +75,26 @@ using std::istream_iterator; ...@@ -104,8 +75,26 @@ using std::istream_iterator;
using std::ostream_iterator; using std::ostream_iterator;
// Names from stl_construct.h // Names from stl_construct.h
using std::construct; template<class _T1, class _T2>
using std::destroy; inline void
construct(_T1* __p, const _T2& __value)
{ std::_Construct(__p, __value); }
template<class _T1>
inline void
construct(_T1* __p)
{ std::_Construct(__p); }
template <class _Tp>
inline void
destroy(_Tp* __pointer)
{ std::_Destroy(__pointer); }
template <class _ForwardIterator>
inline void
destroy(_ForwardIterator __first, _ForwardIterator __last)
{ std::_Destroy(__first, __last); }
}
// Names from stl_raw_storage_iter.h // Names from stl_raw_storage_iter.h
using std::raw_storage_iterator; using std::raw_storage_iterator;
......
...@@ -60,89 +60,85 @@ ...@@ -60,89 +60,85 @@
#ifndef _CPP_BITS_STL_CONSTRUCT_H #ifndef _CPP_BITS_STL_CONSTRUCT_H
#define _CPP_BITS_STL_CONSTRUCT_H 1 #define _CPP_BITS_STL_CONSTRUCT_H 1
#include <bits/type_traits.h>
#include <new> #include <new>
namespace std namespace std
{ {
/**
* Invoke an allocated object's constructor with an initializer.
*
* This function is not part of the C++ standard but is used internally
* within the library.
*/
template <class _T1, class _T2>
inline void
_Construct(_T1* __p, const _T2& __value)
{ new (static_cast<void*>(__p)) _T1(__value); }
// construct and destroy. These functions are not part of the C++ standard, /**
// and are provided for backward compatibility with the HP STL. We also * Invoke an allocated object's constructor without an initializer.
// provide internal names _Construct and _Destroy that can be used within *
// the library, so that standard-conforming pieces don't have to rely on * This function is not part of the C++ standard but is used internally
// non-standard extensions. * within the library.
*/
// Internal names template <class _T1>
inline void
template <class _T1, class _T2> _Construct(_T1* __p)
inline void _Construct(_T1* __p, const _T2& __value) { { new (static_cast<void*>(__p)) _T1(); }
new ((void*) __p) _T1(__value);
}
template <class _T1>
inline void _Construct(_T1* __p) {
new ((void*) __p) _T1();
}
template <class _Tp>
inline void _Destroy(_Tp* __pointer) {
__pointer->~_Tp();
}
template <class _ForwardIterator>
void
__destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
{
for ( ; __first != __last; ++__first)
destroy(&*__first);
}
template <class _ForwardIterator>
inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
template <class _ForwardIterator, class _Tp> /**
inline void * Destroy a range of objects with nontrivial destructors.
__destroy(_ForwardIterator __first, _ForwardIterator __last, _Tp*) *
{ * This is a helper function used only by _Destroy().
typedef typename __type_traits<_Tp>::has_trivial_destructor */
_Trivial_destructor; template <class _ForwardIterator>
__destroy_aux(__first, __last, _Trivial_destructor()); inline void
} __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
{ for ( ; __first != __last; ++__first) _Destroy(&*__first); }
template <class _ForwardIterator>
inline void _Destroy(_ForwardIterator __first, _ForwardIterator __last) { /**
__destroy(__first, __last, __value_type(__first)); * Destroy a range of objects with trivial destructors. Since the destructors
} * are trivial, there's nothing to do and hopefully this function will be
* entirely optimized away.
inline void _Destroy(char*, char*) {} *
inline void _Destroy(int*, int*) {} * This is a helper function used only by _Destroy().
inline void _Destroy(long*, long*) {} */
inline void _Destroy(float*, float*) {} template <class _ForwardIterator>
inline void _Destroy(double*, double*) {} inline void
inline void _Destroy(wchar_t*, wchar_t*) {} __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type)
{ }
// --------------------------------------------------
// Old names from the HP STL.
template <class _T1, class _T2>
inline void construct(_T1* __p, const _T2& __value) {
_Construct(__p, __value);
}
template <class _T1>
inline void construct(_T1* __p) {
_Construct(__p);
}
template <class _Tp>
inline void destroy(_Tp* __pointer) {
_Destroy(__pointer);
}
template <class _ForwardIterator>
inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
_Destroy(__first, __last);
}
/**
* Destroy the object pointed to by a pointer type.
*
* This function is not part of the C++ standard but is used internally
* within the library.
*/
template <class _Tp>
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
/**
* Destroy a range of objects. If the value_type of the object has
* a trivial destructor, the compiler should optimize all of this
* away, otherwise the objects' destructors must be invoked.
*
* This function is not part of the C++ standard but is used internally
* within the library.
*/
template <class _ForwardIterator>
inline void
_Destroy(_ForwardIterator __first, _ForwardIterator __last)
{
typedef typename iterator_traits<_ForwardIterator>::value_type
_Value_type;
typedef typename __type_traits<_Value_type>::has_trivial_destructor
_Has_trivial_destructor;
__destroy_aux(__first, __last, _Has_trivial_destructor());
}
} // namespace std } // namespace std
#endif /* _CPP_BITS_STL_CONSTRUCT_H */ #endif /* _CPP_BITS_STL_CONSTRUCT_H */
......
...@@ -149,7 +149,7 @@ public: ...@@ -149,7 +149,7 @@ public:
} }
~_Temporary_buffer() { ~_Temporary_buffer() {
destroy(_M_buffer, _M_buffer + _M_len); _Destroy(_M_buffer, _M_buffer + _M_len);
free(_M_buffer); free(_M_buffer);
} }
......
...@@ -552,11 +552,12 @@ protected: ...@@ -552,11 +552,12 @@ protected:
protected: protected:
_Link_type _M_create_node(const value_type& __x) _Link_type
_M_create_node(const value_type& __x)
{ {
_Link_type __tmp = _M_get_node(); _Link_type __tmp = _M_get_node();
__STL_TRY { __STL_TRY {
construct(&__tmp->_M_value_field, __x); _Construct(&__tmp->_M_value_field, __x);
} }
__STL_UNWIND(_M_put_node(__tmp)); __STL_UNWIND(_M_put_node(__tmp));
return __tmp; return __tmp;
...@@ -571,9 +572,10 @@ protected: ...@@ -571,9 +572,10 @@ protected:
return __tmp; return __tmp;
} }
void destroy_node(_Link_type __p) void
destroy_node(_Link_type __p)
{ {
destroy(&__p->_M_value_field); _Destroy(&__p->_M_value_field);
_M_put_node(__p); _M_put_node(__p);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment