From 3b007b5d6bcefa3c87a920e834a7b1d0a34f38e5 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 4 Jan 2002 18:02:28 +0100 Subject: [PATCH] stl_tree.h (rb_tree): Move to... 2002-01-04 Paolo Carlini * include/bits/stl_tree.h (rb_tree): Move to... * include/ext/rb_tree: ...here, new file. * include/Makefile.am (ext_headers): Add new file. * include/Makefile.in: Regenerate. * include/bits/stl_tempbuf.h (get_temporary_buffer + helper, return_temporary_buffer, struct temporary_buffer): Move to... * include/ext/memory: ...here. * testsuite/ext/headers.cc: Include . * include/backward/tempbuf.h: Include , tweak. * include/backward/tree.h: Include + + * include/bits/stl_tree.h (rb_tree): Move to... + * include/ext/rb_tree: ...here, new file. + * include/Makefile.am (ext_headers): Add new file. + * include/Makefile.in: Regenerate. + * include/bits/stl_tempbuf.h (get_temporary_buffer + helper, + return_temporary_buffer, struct temporary_buffer): Move to... + * include/ext/memory: ...here. + * testsuite/ext/headers.cc: Include . + * include/backward/tempbuf.h: Include , tweak. + * include/backward/tree.h: Include * include/bits/stl_numeric.h (power + helpers, iota): Move to... diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index a4a4e44c87e..17c4baae0ec 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -179,6 +179,7 @@ ext_headers = \ ${ext_srcdir}/iterator \ ${ext_srcdir}/memory \ ${ext_srcdir}/numeric \ + ${ext_srcdir}/rb_tree \ ${ext_srcdir}/rope \ ${ext_srcdir}/ropeimpl.h \ ${ext_srcdir}/slist \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 46d1093e67a..f07088c2798 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -309,6 +309,7 @@ ext_headers = \ ${ext_srcdir}/iterator \ ${ext_srcdir}/memory \ ${ext_srcdir}/numeric \ + ${ext_srcdir}/rb_tree \ ${ext_srcdir}/rope \ ${ext_srcdir}/ropeimpl.h \ ${ext_srcdir}/slist \ diff --git a/libstdc++-v3/include/backward/tempbuf.h b/libstdc++-v3/include/backward/tempbuf.h index eb46ea88f2b..617cbc33c08 100644 --- a/libstdc++-v3/include/backward/tempbuf.h +++ b/libstdc++-v3/include/backward/tempbuf.h @@ -65,11 +65,11 @@ #include #include #include -#include +#include -using std::get_temporary_buffer; -using std::return_temporary_buffer; -using std::temporary_buffer; +using __gnu_cxx::get_temporary_buffer; +using __gnu_cxx::return_temporary_buffer; +using __gnu_cxx::temporary_buffer; #endif /* _CPP_BACKWARD_TEMPBUF_H */ diff --git a/libstdc++-v3/include/backward/tree.h b/libstdc++-v3/include/backward/tree.h index d88dbcb4441..f3ee6525b88 100644 --- a/libstdc++-v3/include/backward/tree.h +++ b/libstdc++-v3/include/backward/tree.h @@ -45,9 +45,9 @@ #define _CPP_EXT_TREE 1 #include "backward_warning.h" -#include +#include -using std::rb_tree; +using __gnu_cxx::rb_tree; #endif // Local Variables: diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h index 794b6ac9145..05565e02888 100644 --- a/libstdc++-v3/include/bits/stl_tempbuf.h +++ b/libstdc++-v3/include/bits/stl_tempbuf.h @@ -64,40 +64,6 @@ namespace std { -template -pair<_Tp*, ptrdiff_t> -__get_temporary_buffer(ptrdiff_t __len, _Tp*) -{ - if (__len > ptrdiff_t(INT_MAX / sizeof(_Tp))) - __len = INT_MAX / sizeof(_Tp); - - while (__len > 0) { - _Tp* __tmp = (_Tp*) malloc((size_t)__len * sizeof(_Tp)); - if (__tmp != 0) - return pair<_Tp*, ptrdiff_t>(__tmp, __len); - __len /= 2; - } - - return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0); -} - -/** - * This is a mostly-useless wrapper around malloc(). -*/ -template -inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len) { - return __get_temporary_buffer(__len, (_Tp*) 0); -} - -/** - * The companion to get_temporary_buffer(). -*/ -template -void return_temporary_buffer(_Tp* __p) { - free(__p); -} - - template class _Temporary_buffer { private: @@ -161,19 +127,6 @@ private: _Temporary_buffer(const _Temporary_buffer&) {} void operator=(const _Temporary_buffer&) {} }; - -// Class temporary_buffer is not part of the standard. It is an extension. - -template ::value_type - > -struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp> -{ - temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) - : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) {} - ~temporary_buffer() {} -}; } // namespace std diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 0ef936a7c0f..5a0b94839ae 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -1288,23 +1288,6 @@ bool _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const return true; } -// Class rb_tree is not part of the C++ standard. It is provided for -// compatibility with the HP STL. - -template > -struct rb_tree : public _Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc> -{ - typedef _Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc> _Base; - typedef typename _Base::allocator_type allocator_type; - - rb_tree(const _Compare& __comp = _Compare(), - const allocator_type& __a = allocator_type()) - : _Base(__comp, __a) {} - - ~rb_tree() {} -}; - } // namespace std #endif /* __GLIBCPP_INTERNAL_TREE_H */ diff --git a/libstdc++-v3/include/ext/memory b/libstdc++-v3/include/ext/memory index e8b85741c8c..84c31f05684 100644 --- a/libstdc++-v3/include/ext/memory +++ b/libstdc++-v3/include/ext/memory @@ -61,8 +61,10 @@ namespace __gnu_cxx { + using std::ptrdiff_t; using std::pair; using std::__iterator_category; + using std::_Temporary_buffer; // uninitialized_copy_n (not part of the C++ standard) @@ -122,6 +124,52 @@ namespace __gnu_cxx __iterator_category(__first)); } + template + pair<_Tp*, ptrdiff_t> + __get_temporary_buffer(ptrdiff_t __len, _Tp*) + { + if (__len > ptrdiff_t(INT_MAX / sizeof(_Tp))) + __len = INT_MAX / sizeof(_Tp); + + while (__len > 0) { + _Tp* __tmp = (_Tp*) std::malloc((std::size_t)__len * sizeof(_Tp)); + if (__tmp != 0) + return pair<_Tp*, ptrdiff_t>(__tmp, __len); + __len /= 2; + } + + return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0); + } + + /** + * This is a mostly-useless wrapper around malloc(). + */ + template + inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len) { + return __get_temporary_buffer(__len, (_Tp*) 0); + } + + /** + * The companion to get_temporary_buffer(). + */ + template + void return_temporary_buffer(_Tp* __p) { + std::free(__p); + } + + // Class temporary_buffer is not part of the standard. It is an extension. + + template ::value_type + > + struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp> + { + temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) + : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) {} + ~temporary_buffer() {} + }; + } // namespace __gnu_cxx #endif /* _EXT_MEMORY */ diff --git a/libstdc++-v3/include/ext/rb_tree b/libstdc++-v3/include/ext/rb_tree new file mode 100644 index 00000000000..103900e7d4d --- /dev/null +++ b/libstdc++-v3/include/ext/rb_tree @@ -0,0 +1,86 @@ +// rb_tree extension -*- C++ -*- + +// Copyright (C) 2002 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 + * Hewlett-Packard Company + * + * 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. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1996 + * 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. + */ + +#ifndef _EXT_RB_TREE +#define _EXT_RB_TREE + +#pragma GCC system_header +#include + +namespace __gnu_cxx +{ +using std::_Rb_tree; +using std::allocator; + +// Class rb_tree is not part of the C++ standard. It is provided for +// compatibility with the HP STL. + +template > +struct rb_tree : public _Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc> +{ + typedef _Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc> _Base; + typedef typename _Base::allocator_type allocator_type; + + rb_tree(const _Compare& __comp = _Compare(), + const allocator_type& __a = allocator_type()) + : _Base(__comp, __a) {} + + ~rb_tree() {} +}; + +} // namespace __gnu_cxx + +#endif /* _EXT_RB_TREE */ diff --git a/libstdc++-v3/testsuite/ext/headers.cc b/libstdc++-v3/testsuite/ext/headers.cc index f63b4ab11f6..a2c1233302d 100644 --- a/libstdc++-v3/testsuite/ext/headers.cc +++ b/libstdc++-v3/testsuite/ext/headers.cc @@ -30,6 +30,7 @@ #include #include #include +#include #include #include -- 2.30.2