diff options
Diffstat (limited to 'contrib/libstdc++/include/tr1')
55 files changed, 0 insertions, 15525 deletions
diff --git a/contrib/libstdc++/include/tr1/array b/contrib/libstdc++/include/tr1/array deleted file mode 100644 index 23808b334620b..0000000000000 --- a/contrib/libstdc++/include/tr1/array +++ /dev/null @@ -1,251 +0,0 @@ -// class template array -*- C++ -*- - -// Copyright (C) 2004, 2005, 2006 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. - -/** @file tr1/array - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_ARRAY -#define _TR1_ARRAY 1 - -#include <new> -#include <iterator> -#include <algorithm> -#include <cstddef> -#include <bits/functexcept.h> -#include <ext/type_traits.h> - -//namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - /// @brief struct array [6.2.2]. - /// NB: Requires complete type _Tp. - template<typename _Tp, std::size_t _Nm> - struct array - { - typedef _Tp value_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* iterator; - typedef const value_type* const_iterator; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - - // Support for zero-sized arrays mandatory. - value_type _M_instance[_Nm ? _Nm : 1] __attribute__((__aligned__)); - - // No explicit construct/copy/destroy for aggregate type. - - void - assign(const value_type& __u) - { std::fill_n(begin(), size(), __u); } - - void - swap(array& __other) - { std::swap_ranges(begin(), end(), __other.begin()); } - - // Iterators. - iterator - begin() - { return iterator(&_M_instance[0]); } - - const_iterator - begin() const - { return const_iterator(&_M_instance[0]); } - - iterator - end() - { return iterator(&_M_instance[_Nm]); } - - const_iterator - end() const - { return const_iterator(&_M_instance[_Nm]); } - - reverse_iterator - rbegin() - { return reverse_iterator(end()); } - - const_reverse_iterator - rbegin() const - { return const_reverse_iterator(end()); } - - reverse_iterator - rend() - { return reverse_iterator(begin()); } - - const_reverse_iterator - rend() const - { return const_reverse_iterator(begin()); } - - // Capacity. - size_type - size() const { return _Nm; } - - size_type - max_size() const { return _Nm; } - - bool - empty() const { return size() == 0; } - - // Element access. - reference - operator[](size_type __n) - { return _M_instance[__n]; } - - const_reference - operator[](size_type __n) const - { return _M_instance[__n]; } - - reference - at(size_type __n) - { - _M_check<_Nm>(__n); - return _M_instance[__n]; - } - - const_reference - at(size_type __n) const - { - _M_check<_Nm>(__n); - return _M_instance[__n]; - } - - reference - front() - { return *begin(); } - - const_reference - front() const - { return *begin(); } - - reference - back() - { return _Nm ? *(end() - 1) : *end(); } - - const_reference - back() const - { return _Nm ? *(end() - 1) : *end(); } - - _Tp* - data() - { return &_M_instance[0]; } - - const _Tp* - data() const - { return &_M_instance[0]; } - - private: - template<std::size_t _Mm> - typename __gnu_cxx::__enable_if<_Mm, void>::__type - _M_check(size_type __n) const - { - if (__builtin_expect(__n >= _Mm, false)) - std::__throw_out_of_range(__N("array::_M_check")); - } - - // Avoid "unsigned comparison with zero" warnings. - template<std::size_t _Mm> - typename __gnu_cxx::__enable_if<!_Mm, void>::__type - _M_check(size_type) const - { std::__throw_out_of_range(__N("array::_M_check")); } - }; - - // Array comparisons. - template<typename _Tp, std::size_t _Nm> - inline bool - operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return std::equal(__one.begin(), __one.end(), __two.begin()); } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one == __two); } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) - { - return std::lexicographical_compare(__a.begin(), __a.end(), - __b.begin(), __b.end()); - } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return __two < __one; } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one > __two); } - - template<typename _Tp, std::size_t _Nm> - inline bool - operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one < __two); } - - // Specialized algorithms [6.2.2.2]. - template<typename _Tp, std::size_t _Nm> - inline void - swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) - { std::swap_ranges(__one.begin(), __one.end(), __two.begin()); } - - // Tuple interface to class template array [6.2.2.5]. - template<typename _Tp> class tuple_size; - template<int _Int, typename _Tp> class tuple_element; - - template<typename _Tp, std::size_t _Nm> - struct tuple_size<array<_Tp, _Nm> > - { static const int value = _Nm; }; - - template<typename _Tp, std::size_t _Nm> - const int tuple_size<array<_Tp, _Nm> >::value; - - template<int _Int, typename _Tp, std::size_t _Nm> - struct tuple_element<_Int, array<_Tp, _Nm> > - { typedef _Tp type; }; - - template<int _Int, typename _Tp, std::size_t _Nm> - inline _Tp& - get(array<_Tp, _Nm>& __arr) - { return __arr[_Int]; } - - template<int _Int, typename _Tp, std::size_t _Nm> - inline const _Tp& - get(const array<_Tp, _Nm>& __arr) - { return __arr[_Int]; } - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/bind_iterate.h b/contrib/libstdc++/include/tr1/bind_iterate.h deleted file mode 100644 index 3de49a77b6c0e..0000000000000 --- a/contrib/libstdc++/include/tr1/bind_iterate.h +++ /dev/null @@ -1,78 +0,0 @@ -// TR1 functional -*- C++ -*- - -// Copyright (C) 2005 Free Software Foundation, Inc. -// Written by Douglas Gregor <doug.gregor -at- gmail.com> -// -// 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. - -/** @file tr1/bind_iterate.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#if _GLIBCXX_BIND_NUM_ARGS > 0 -template<_GLIBCXX_BIND_TEMPLATE_PARAMS> -#endif -#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE -result_type -#else -typename result_of<_Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS())>::type -#endif -operator()(_GLIBCXX_BIND_PARAMS) -{ return _M_f(_GLIBCXX_BIND_V_ARGS); } - -#if _GLIBCXX_BIND_NUM_ARGS > 0 -template<_GLIBCXX_BIND_TEMPLATE_PARAMS> -#endif -#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE -result_type -#else -typename result_of<const _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(const))>::type -#endif -operator()(_GLIBCXX_BIND_PARAMS) const -{ return _M_f(_GLIBCXX_BIND_V_ARGS); } - -#if _GLIBCXX_BIND_NUM_ARGS > 0 -template<_GLIBCXX_BIND_TEMPLATE_PARAMS> -#endif -#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE -result_type -#else -typename result_of<volatile _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(volatile))>::type -#endif -operator()(_GLIBCXX_BIND_PARAMS) volatile -{ return _M_f(_GLIBCXX_BIND_V_ARGS); } - -#if _GLIBCXX_BIND_NUM_ARGS > 0 -template<_GLIBCXX_BIND_TEMPLATE_PARAMS> -#endif -#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE -result_type -#else -typename result_of<const volatile _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(const volatile))>::type -#endif -operator()(_GLIBCXX_BIND_PARAMS) const volatile -{ return _M_f(_GLIBCXX_BIND_V_ARGS); } diff --git a/contrib/libstdc++/include/tr1/bind_repeat.h b/contrib/libstdc++/include/tr1/bind_repeat.h deleted file mode 100644 index 8ec29a2283f5d..0000000000000 --- a/contrib/libstdc++/include/tr1/bind_repeat.h +++ /dev/null @@ -1,192 +0,0 @@ -// TR1 code repetition for bind -*- C++ -*- - -// Copyright (C) 2005 Free Software Foundation, Inc. -// Written by Douglas Gregor <doug.gregor -at- gmail.com> -// -// 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. - -/** @file tr1/bind_repeat.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _GLIBCXX_BIND_REPEAT_HEADER -# error Internal error: _GLIBCXX_BIND_REPEAT_HEADER must be set -#endif /* _GLIBCXX_BIND_REPEAT_HEADER */ - -#define _GLIBCXX_BIND_NUM_ARGS 0 -#define _GLIBCXX_BIND_COMMA -#define _GLIBCXX_BIND_TEMPLATE_PARAMS -#define _GLIBCXX_BIND_TEMPLATE_ARGS -#define _GLIBCXX_BIND_PARAMS -#define _GLIBCXX_BIND_ARGS -# include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 1 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1 -#define _GLIBCXX_BIND_PARAMS _U1& __u1 -#define _GLIBCXX_BIND_ARGS __u1 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS -#define _GLIBCXX_BIND_NUM_ARGS 2 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2 -#define _GLIBCXX_BIND_ARGS __u1, __u2 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 3 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 4 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 5 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 6 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 7 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 8 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 9 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - -#define _GLIBCXX_BIND_NUM_ARGS 10 -#define _GLIBCXX_BIND_COMMA , -#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10 -#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10 -#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10 -#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10 -#include _GLIBCXX_BIND_REPEAT_HEADER -#undef _GLIBCXX_BIND_ARGS -#undef _GLIBCXX_BIND_PARAMS -#undef _GLIBCXX_BIND_TEMPLATE_ARGS -#undef _GLIBCXX_BIND_TEMPLATE_PARAMS -#undef _GLIBCXX_BIND_COMMA -#undef _GLIBCXX_BIND_NUM_ARGS - diff --git a/contrib/libstdc++/include/tr1/boost_shared_ptr.h b/contrib/libstdc++/include/tr1/boost_shared_ptr.h deleted file mode 100644 index d83bde692a618..0000000000000 --- a/contrib/libstdc++/include/tr1/boost_shared_ptr.h +++ /dev/null @@ -1,1149 +0,0 @@ -// <tr1/boost_shared_ptr.h> -*- C++ -*- - -// Copyright (C) 2005, 2006 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. - -// shared_count.hpp -// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. - -// shared_ptr.hpp -// Copyright (C) 1998, 1999 Greg Colvin and Beman Dawes. -// Copyright (C) 2001, 2002, 2003 Peter Dimov - -// weak_ptr.hpp -// Copyright (C) 2001, 2002, 2003 Peter Dimov - -// enable_shared_from_this.hpp -// Copyright (C) 2002 Peter Dimov - -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// GCC Note: based on version 1.32.0 of the Boost library. - -/** @file tr1/boost_shared_ptr.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _BOOST_SHARED_PTR_H -#define _BOOST_SHARED_PTR_H 1 - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - class bad_weak_ptr : public std::exception - { - public: - virtual char const* - what() const throw() - { return "tr1::bad_weak_ptr"; } - }; - - // Substitute for bad_weak_ptr object in the case of -fno-exceptions. - inline void - __throw_bad_weak_ptr() - { -#if __EXCEPTIONS - throw bad_weak_ptr(); -#else - std::abort(); -#endif - } - - using __gnu_cxx::_Lock_policy; - using __gnu_cxx::__default_lock_policy; - using __gnu_cxx::_S_single; - using __gnu_cxx::_S_mutex; - using __gnu_cxx::_S_atomic; - - template<typename _Tp> - struct _Sp_deleter - { - typedef void result_type; - typedef _Tp* argument_type; - - void - operator()(_Tp* __p) const - { delete __p; } - }; - - // Empty helper class except when the template argument is _S_mutex. - template<_Lock_policy _Lp> - class _Mutex_base - { }; - - template<> - class _Mutex_base<_S_mutex> - : public __gnu_cxx::__mutex - { }; - - template<_Lock_policy _Lp = __default_lock_policy> - class _Sp_counted_base - : public _Mutex_base<_Lp> - { - public: - _Sp_counted_base() - : _M_use_count(1), _M_weak_count(1) { } - - virtual - ~_Sp_counted_base() // nothrow - { } - - // Called when _M_use_count drops to zero, to release the resources - // managed by *this. - virtual void - _M_dispose() = 0; // nothrow - - // Called when _M_weak_count drops to zero. - virtual void - _M_destroy() // nothrow - { delete this; } - - virtual void* - _M_get_deleter(const std::type_info&) = 0; - - void - _M_add_ref_copy() - { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } - - void - _M_add_ref_lock(); - - void - _M_release() // nothrow - { - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, - -1) == 1) - { - _M_dispose(); -#ifdef __GTHREADS - _GLIBCXX_READ_MEM_BARRIER; - _GLIBCXX_WRITE_MEM_BARRIER; -#endif - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, - -1) == 1) - _M_destroy(); - } - } - - void - _M_weak_add_ref() // nothrow - { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } - - void - _M_weak_release() // nothrow - { - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1) - { -#ifdef __GTHREADS - _GLIBCXX_READ_MEM_BARRIER; - _GLIBCXX_WRITE_MEM_BARRIER; -#endif - _M_destroy(); - } - } - - long - _M_get_use_count() const // nothrow - { return _M_use_count; } // XXX is this MT safe? - - private: - _Sp_counted_base(_Sp_counted_base const&); - _Sp_counted_base& operator=(_Sp_counted_base const&); - - _Atomic_word _M_use_count; // #shared - _Atomic_word _M_weak_count; // #weak + (#shared != 0) - }; - - template<> - inline void - _Sp_counted_base<_S_single>:: - _M_add_ref_lock() - { - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) - { - _M_use_count = 0; - __throw_bad_weak_ptr(); - } - } - -#ifdef __GTHREADS - template<> - inline void - _Sp_counted_base<_S_mutex>:: - _M_add_ref_lock() - { - __gnu_cxx::__scoped_lock sentry(*this); - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) - { - _M_use_count = 0; - __throw_bad_weak_ptr(); - } - } -#endif - - template<> - inline void - _Sp_counted_base<_S_atomic>:: - _M_add_ref_lock() - { - // Perform lock-free add-if-not-zero operation. - _Atomic_word __count; - do - { - __count = _M_use_count; - if (__count == 0) - __throw_bad_weak_ptr(); - - // Replace the current counter value with the old value + 1, as - // long as it's not changed meanwhile. - } - while (!__sync_bool_compare_and_swap(&_M_use_count, __count, - __count + 1)); - } - - template<typename _Ptr, typename _Deleter, _Lock_policy _Lp> - class _Sp_counted_base_impl - : public _Sp_counted_base<_Lp> - { - public: - /** - * @brief - * @pre __d(__p) must not throw. - */ - _Sp_counted_base_impl(_Ptr __p, _Deleter __d) - : _M_ptr(__p), _M_del(__d) { } - - virtual void - _M_dispose() // nothrow - { _M_del(_M_ptr); } - - virtual void* - _M_get_deleter(const std::type_info& __ti) - { return __ti == typeid(_Deleter) ? &_M_del : 0; } - - private: - _Sp_counted_base_impl(const _Sp_counted_base_impl&); - _Sp_counted_base_impl& operator=(const _Sp_counted_base_impl&); - - _Ptr _M_ptr; // copy constructor must not throw - _Deleter _M_del; // copy constructor must not throw - }; - - template<_Lock_policy _Lp = __default_lock_policy> - class __weak_count; - - template<_Lock_policy _Lp = __default_lock_policy> - class __shared_count - { - public: - __shared_count() - : _M_pi(0) // nothrow - { } - - template<typename _Ptr, typename _Deleter> - __shared_count(_Ptr __p, _Deleter __d) : _M_pi(0) - { - try - { - _M_pi = new _Sp_counted_base_impl<_Ptr, _Deleter, _Lp>(__p, __d); - } - catch(...) - { - __d(__p); // Call _Deleter on __p. - __throw_exception_again; - } - } - - // Special case for auto_ptr<_Tp> to provide the strong guarantee. - template<typename _Tp> - explicit - __shared_count(std::auto_ptr<_Tp>& __r) - : _M_pi(new _Sp_counted_base_impl<_Tp*, - _Sp_deleter<_Tp>, _Lp >(__r.get(), _Sp_deleter<_Tp>())) - { __r.release(); } - - // Throw bad_weak_ptr when __r._M_get_use_count() == 0. - explicit - __shared_count(const __weak_count<_Lp>& __r); - - ~__shared_count() // nothrow - { - if (_M_pi != 0) - _M_pi->_M_release(); - } - - __shared_count(const __shared_count& __r) - : _M_pi(__r._M_pi) // nothrow - { - if (_M_pi != 0) - _M_pi->_M_add_ref_copy(); - } - - __shared_count& - operator=(const __shared_count& __r) // nothrow - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - if (__tmp != _M_pi) - { - if (__tmp != 0) - __tmp->_M_add_ref_copy(); - if (_M_pi != 0) - _M_pi->_M_release(); - _M_pi = __tmp; - } - return *this; - } - - void - _M_swap(__shared_count& __r) // nothrow - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - __r._M_pi = _M_pi; - _M_pi = __tmp; - } - - long - _M_get_use_count() const // nothrow - { return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; } - - bool - _M_unique() const // nothrow - { return this->_M_get_use_count() == 1; } - - friend inline bool - operator==(const __shared_count& __a, const __shared_count& __b) - { return __a._M_pi == __b._M_pi; } - - friend inline bool - operator<(const __shared_count& __a, const __shared_count& __b) - { return std::less<_Sp_counted_base<_Lp>*>()(__a._M_pi, __b._M_pi); } - - void* - _M_get_deleter(const std::type_info& __ti) const - { return _M_pi ? _M_pi->_M_get_deleter(__ti) : 0; } - - private: - friend class __weak_count<_Lp>; - - _Sp_counted_base<_Lp>* _M_pi; - }; - - template<_Lock_policy _Lp> - class __weak_count - { - public: - __weak_count() - : _M_pi(0) // nothrow - { } - - __weak_count(const __shared_count<_Lp>& __r) - : _M_pi(__r._M_pi) // nothrow - { - if (_M_pi != 0) - _M_pi->_M_weak_add_ref(); - } - - __weak_count(const __weak_count<_Lp>& __r) - : _M_pi(__r._M_pi) // nothrow - { - if (_M_pi != 0) - _M_pi->_M_weak_add_ref(); - } - - ~__weak_count() // nothrow - { - if (_M_pi != 0) - _M_pi->_M_weak_release(); - } - - __weak_count<_Lp>& - operator=(const __shared_count<_Lp>& __r) // nothrow - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - if (__tmp != 0) - __tmp->_M_weak_add_ref(); - if (_M_pi != 0) - _M_pi->_M_weak_release(); - _M_pi = __tmp; - return *this; - } - - __weak_count<_Lp>& - operator=(const __weak_count<_Lp>& __r) // nothrow - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - if (__tmp != 0) - __tmp->_M_weak_add_ref(); - if (_M_pi != 0) - _M_pi->_M_weak_release(); - _M_pi = __tmp; - return *this; - } - - void - _M_swap(__weak_count<_Lp>& __r) // nothrow - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - __r._M_pi = _M_pi; - _M_pi = __tmp; - } - - long - _M_get_use_count() const // nothrow - { return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; } - - friend inline bool - operator==(const __weak_count<_Lp>& __a, const __weak_count<_Lp>& __b) - { return __a._M_pi == __b._M_pi; } - - friend inline bool - operator<(const __weak_count<_Lp>& __a, const __weak_count<_Lp>& __b) - { return std::less<_Sp_counted_base<_Lp>*>()(__a._M_pi, __b._M_pi); } - - private: - friend class __shared_count<_Lp>; - - _Sp_counted_base<_Lp>* _M_pi; - }; - - template<_Lock_policy _Lp> - inline - __shared_count<_Lp>:: - __shared_count(const __weak_count<_Lp>& __r) - : _M_pi(__r._M_pi) - { - if (_M_pi != 0) - _M_pi->_M_add_ref_lock(); - else - __throw_bad_weak_ptr(); - } - - - // Forward declarations. - template<typename _Tp, _Lock_policy _Lp = __default_lock_policy> - class __shared_ptr; - - template<typename _Tp, _Lock_policy _Lp = __default_lock_policy> - class __weak_ptr; - - template<typename _Tp, _Lock_policy _Lp = __default_lock_policy> - class __enable_shared_from_this; - - template<typename _Tp> - class shared_ptr; - - template<typename _Tp> - class weak_ptr; - - template<typename _Tp> - class enable_shared_from_this; - - // Support for enable_shared_from_this. - - // Friend of __enable_shared_from_this. - template<_Lock_policy _Lp, typename _Tp1, typename _Tp2> - void - __enable_shared_from_this_helper(const __shared_count<_Lp>&, - const __enable_shared_from_this<_Tp1, - _Lp>*, const _Tp2*); - - // Friend of enable_shared_from_this. - template<typename _Tp1, typename _Tp2> - void - __enable_shared_from_this_helper(const __shared_count<>&, - const enable_shared_from_this<_Tp1>*, - const _Tp2*); - - template<_Lock_policy _Lp> - inline void - __enable_shared_from_this_helper(const __shared_count<_Lp>&, ...) - { } - - - struct __static_cast_tag { }; - struct __const_cast_tag { }; - struct __dynamic_cast_tag { }; - - /** - * @class shared_ptr <tr1/memory> - * - * A smart pointer with reference-counted copy semantics. - * The object pointed to is deleted when the last shared_ptr pointing to - * it is destroyed or reset. - */ - template<typename _Tp, _Lock_policy _Lp> - class __shared_ptr - { - public: - typedef _Tp element_type; - - /** @brief Construct an empty %__shared_ptr. - * @post use_count()==0 && get()==0 - */ - __shared_ptr() - : _M_ptr(0), _M_refcount() // never throws - { } - - /** @brief Construct a %__shared_ptr that owns the pointer @a __p. - * @param __p A pointer that is convertible to element_type*. - * @post use_count() == 1 && get() == __p - * @throw std::bad_alloc, in which case @c delete @a __p is called. - */ - template<typename _Tp1> - explicit - __shared_ptr(_Tp1* __p) - : _M_ptr(__p), _M_refcount(__p, _Sp_deleter<_Tp1>()) - { - __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) - // __glibcxx_function_requires(_CompleteConcept<_Tp1*>) - __enable_shared_from_this_helper(_M_refcount, __p, __p); - } - - // - // Requirements: _Deleter' copy constructor and destructor must not throw - // - // __shared_ptr will release __p by calling __d(__p) - // - /** @brief Construct a %__shared_ptr that owns the pointer @a __p - * and the deleter @a __d. - * @param __p A pointer. - * @param __d A deleter. - * @post use_count() == 1 && get() == __p - * @throw std::bad_alloc, in which case @a __d(__p) is called. - */ - template<typename _Tp1, typename _Deleter> - __shared_ptr(_Tp1* __p, _Deleter __d) - : _M_ptr(__p), _M_refcount(__p, __d) - { - __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) - // TODO requires _Deleter CopyConstructible and __d(__p) well-formed - __enable_shared_from_this_helper(_M_refcount, __p, __p); - } - - // generated copy constructor, assignment, destructor are fine. - - /** @brief If @a __r is empty, constructs an empty %__shared_ptr; - * otherwise construct a %__shared_ptr that shares ownership - * with @a __r. - * @param __r A %__shared_ptr. - * @post get() == __r.get() && use_count() == __r.use_count() - * @throw std::bad_alloc, in which case - */ - template<typename _Tp1> - __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r) - : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws - { __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) } - - /** @brief Constructs a %__shared_ptr that shares ownership with @a __r - * and stores a copy of the pointer stored in @a __r. - * @param __r A weak_ptr. - * @post use_count() == __r.use_count() - * @throw bad_weak_ptr when __r.expired(), - * in which case the constructor has no effect. - */ - template<typename _Tp1> - explicit - __shared_ptr(const __weak_ptr<_Tp1, _Lp>& __r) - : _M_refcount(__r._M_refcount) // may throw - { - __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) - // It is now safe to copy __r._M_ptr, as _M_refcount(__r._M_refcount) - // did not throw. - _M_ptr = __r._M_ptr; - } - - /** - * @post use_count() == 1 and __r.get() == 0 - */ - template<typename _Tp1> - explicit - __shared_ptr(std::auto_ptr<_Tp1>& __r) - : _M_ptr(__r.get()), _M_refcount() - { - // TODO requires __r.release() convertible to _Tp*, _Tp1 is complete, - // delete __r.release() well-formed - _Tp1* __tmp = __r.get(); - _M_refcount = __shared_count<_Lp>(__r); - __enable_shared_from_this_helper(_M_refcount, __tmp, __tmp); - } - - template<typename _Tp1> - __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, __static_cast_tag) - : _M_ptr(static_cast<element_type*>(__r._M_ptr)), - _M_refcount(__r._M_refcount) - { } - - template<typename _Tp1> - __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, __const_cast_tag) - : _M_ptr(const_cast<element_type*>(__r._M_ptr)), - _M_refcount(__r._M_refcount) - { } - - template<typename _Tp1> - __shared_ptr(const __shared_ptr<_Tp1, _Lp>& __r, __dynamic_cast_tag) - : _M_ptr(dynamic_cast<element_type*>(__r._M_ptr)), - _M_refcount(__r._M_refcount) - { - if (_M_ptr == 0) // need to allocate new counter -- the cast failed - _M_refcount = __shared_count<_Lp>(); - } - - template<typename _Tp1> - __shared_ptr& - operator=(const __shared_ptr<_Tp1, _Lp>& __r) // never throws - { - _M_ptr = __r._M_ptr; - _M_refcount = __r._M_refcount; // __shared_count::op= doesn't throw - return *this; - } - - template<typename _Tp1> - __shared_ptr& - operator=(std::auto_ptr<_Tp1>& __r) - { - __shared_ptr(__r).swap(*this); - return *this; - } - - void - reset() // never throws - { __shared_ptr().swap(*this); } - - template<typename _Tp1> - void - reset(_Tp1* __p) // _Tp1 must be complete. - { - // Catch self-reset errors. - _GLIBCXX_DEBUG_ASSERT(__p == 0 || __p != _M_ptr); - __shared_ptr(__p).swap(*this); - } - - template<typename _Tp1, typename _Deleter> - void - reset(_Tp1* __p, _Deleter __d) - { __shared_ptr(__p, __d).swap(*this); } - - // Allow class instantiation when _Tp is [cv-qual] void. - typename add_reference<_Tp>::type - operator*() const // never throws - { - _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); - return *_M_ptr; - } - - _Tp* - operator->() const // never throws - { - _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); - return _M_ptr; - } - - _Tp* - get() const // never throws - { return _M_ptr; } - - // Implicit conversion to "bool" - private: - typedef _Tp* __shared_ptr::*__unspecified_bool_type; - - public: - operator __unspecified_bool_type() const // never throws - { return _M_ptr == 0 ? 0 : &__shared_ptr::_M_ptr; } - - bool - unique() const // never throws - { return _M_refcount._M_unique(); } - - long - use_count() const // never throws - { return _M_refcount._M_get_use_count(); } - - void - swap(__shared_ptr<_Tp, _Lp>& __other) // never throws - { - std::swap(_M_ptr, __other._M_ptr); - _M_refcount._M_swap(__other._M_refcount); - } - - private: - void* - _M_get_deleter(const std::type_info& __ti) const - { return _M_refcount._M_get_deleter(__ti); } - - template<typename _Tp1, _Lock_policy _Lp1> - bool - _M_less(const __shared_ptr<_Tp1, _Lp1>& __rhs) const - { return _M_refcount < __rhs._M_refcount; } - - template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr; - template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr; - - template<typename _Del, typename _Tp1, _Lock_policy _Lp1> - friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&); - - // Friends injected into enclosing namespace and found by ADL: - template<typename _Tp1> - friend inline bool - operator==(const __shared_ptr& __a, const __shared_ptr<_Tp1, _Lp>& __b) - { return __a.get() == __b.get(); } - - template<typename _Tp1> - friend inline bool - operator!=(const __shared_ptr& __a, const __shared_ptr<_Tp1, _Lp>& __b) - { return __a.get() != __b.get(); } - - template<typename _Tp1> - friend inline bool - operator<(const __shared_ptr& __a, const __shared_ptr<_Tp1, _Lp>& __b) - { return __a._M_less(__b); } - - _Tp* _M_ptr; // Contained pointer. - __shared_count<_Lp> _M_refcount; // Reference counter. - }; - - // 2.2.3.8 shared_ptr specialized algorithms. - template<typename _Tp, _Lock_policy _Lp> - inline void - swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) - { __a.swap(__b); } - - // 2.2.3.9 shared_ptr casts - /** @warning The seemingly equivalent - * <code>shared_ptr<_Tp, _Lp>(static_cast<_Tp*>(__r.get()))</code> - * will eventually result in undefined behaviour, - * attempting to delete the same object twice. - */ - template<typename _Tp, typename _Tp1, _Lock_policy _Lp> - __shared_ptr<_Tp, _Lp> - static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) - { return __shared_ptr<_Tp, _Lp>(__r, __static_cast_tag()); } - - /** @warning The seemingly equivalent - * <code>shared_ptr<_Tp, _Lp>(const_cast<_Tp*>(__r.get()))</code> - * will eventually result in undefined behaviour, - * attempting to delete the same object twice. - */ - template<typename _Tp, typename _Tp1, _Lock_policy _Lp> - __shared_ptr<_Tp, _Lp> - const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) - { return __shared_ptr<_Tp, _Lp>(__r, __const_cast_tag()); } - - /** @warning The seemingly equivalent - * <code>shared_ptr<_Tp, _Lp>(dynamic_cast<_Tp*>(__r.get()))</code> - * will eventually result in undefined behaviour, - * attempting to delete the same object twice. - */ - template<typename _Tp, typename _Tp1, _Lock_policy _Lp> - __shared_ptr<_Tp, _Lp> - dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) - { return __shared_ptr<_Tp, _Lp>(__r, __dynamic_cast_tag()); } - - // 2.2.3.7 shared_ptr I/O - template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp> - std::basic_ostream<_Ch, _Tr>& - operator<<(std::basic_ostream<_Ch, _Tr>& __os, - const __shared_ptr<_Tp, _Lp>& __p) - { - __os << __p.get(); - return __os; - } - - // 2.2.3.10 shared_ptr get_deleter (experimental) - template<typename _Del, typename _Tp, _Lock_policy _Lp> - inline _Del* - get_deleter(const __shared_ptr<_Tp, _Lp>& __p) - { return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); } - - - template<typename _Tp, _Lock_policy _Lp> - class __weak_ptr - { - public: - typedef _Tp element_type; - - __weak_ptr() - : _M_ptr(0), _M_refcount() // never throws - { } - - // Generated copy constructor, assignment, destructor are fine. - - // The "obvious" converting constructor implementation: - // - // template<typename _Tp1> - // __weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r) - // : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws - // { } - // - // has a serious problem. - // - // __r._M_ptr may already have been invalidated. The _M_ptr(__r._M_ptr) - // conversion may require access to *__r._M_ptr (virtual inheritance). - // - // It is not possible to avoid spurious access violations since - // in multithreaded programs __r._M_ptr may be invalidated at any point. - template<typename _Tp1> - __weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r) - : _M_refcount(__r._M_refcount) // never throws - { - __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) - _M_ptr = __r.lock().get(); - } - - template<typename _Tp1> - __weak_ptr(const __shared_ptr<_Tp1, _Lp>& __r) - : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws - { __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) } - - template<typename _Tp1> - __weak_ptr& - operator=(const __weak_ptr<_Tp1, _Lp>& __r) // never throws - { - _M_ptr = __r.lock().get(); - _M_refcount = __r._M_refcount; - return *this; - } - - template<typename _Tp1> - __weak_ptr& - operator=(const __shared_ptr<_Tp1, _Lp>& __r) // never throws - { - _M_ptr = __r._M_ptr; - _M_refcount = __r._M_refcount; - return *this; - } - - __shared_ptr<_Tp, _Lp> - lock() const // never throws - { -#ifdef __GTHREADS - // Optimization: avoid throw overhead. - if (expired()) - return __shared_ptr<element_type, _Lp>(); - - try - { - return __shared_ptr<element_type, _Lp>(*this); - } - catch(const bad_weak_ptr&) - { - // Q: How can we get here? - // A: Another thread may have invalidated r after the - // use_count test above. - return __shared_ptr<element_type, _Lp>(); - } - -#else - // Optimization: avoid try/catch overhead when single threaded. - return expired() ? __shared_ptr<element_type, _Lp>() - : __shared_ptr<element_type, _Lp>(*this); - -#endif - } // XXX MT - - long - use_count() const // never throws - { return _M_refcount._M_get_use_count(); } - - bool - expired() const // never throws - { return _M_refcount._M_get_use_count() == 0; } - - void - reset() // never throws - { __weak_ptr().swap(*this); } - - void - swap(__weak_ptr& __s) // never throws - { - std::swap(_M_ptr, __s._M_ptr); - _M_refcount._M_swap(__s._M_refcount); - } - - private: - // Used by __enable_shared_from_this. - void - _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) - { - _M_ptr = __ptr; - _M_refcount = __refcount; - } - - template<typename _Tp1> - bool - _M_less(const __weak_ptr<_Tp1, _Lp>& __rhs) const - { return _M_refcount < __rhs._M_refcount; } - - template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr; - template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr; - friend class __enable_shared_from_this<_Tp, _Lp>; - friend class enable_shared_from_this<_Tp>; - - // Friend injected into namespace and found by ADL. - template<typename _Tp1> - friend inline bool - operator<(const __weak_ptr& __lhs, const __weak_ptr<_Tp1, _Lp>& __rhs) - { return __lhs._M_less(__rhs); } - - _Tp* _M_ptr; // Contained pointer. - __weak_count<_Lp> _M_refcount; // Reference counter. - }; - - // 2.2.4.7 weak_ptr specialized algorithms. - template<typename _Tp, _Lock_policy _Lp> - inline void - swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) - { __a.swap(__b); } - - - template<typename _Tp, _Lock_policy _Lp> - class __enable_shared_from_this - { - protected: - __enable_shared_from_this() { } - - __enable_shared_from_this(const __enable_shared_from_this&) { } - - __enable_shared_from_this& - operator=(const __enable_shared_from_this&) - { return *this; } - - ~__enable_shared_from_this() { } - - public: - __shared_ptr<_Tp, _Lp> - shared_from_this() - { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); } - - __shared_ptr<const _Tp, _Lp> - shared_from_this() const - { return __shared_ptr<const _Tp, _Lp>(this->_M_weak_this); } - - private: - template<typename _Tp1> - void - _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const - { _M_weak_this._M_assign(__p, __n); } - - template<typename _Tp1> - friend void - __enable_shared_from_this_helper(const __shared_count<_Lp>& __pn, - const __enable_shared_from_this* __pe, - const _Tp1* __px) - { - if (__pe != 0) - __pe->_M_weak_assign(const_cast<_Tp1*>(__px), __pn); - } - - mutable __weak_ptr<_Tp, _Lp> _M_weak_this; - }; - - - // The actual TR1 shared_ptr, with forwarding constructors and - // assignment operators. - template<typename _Tp> - class shared_ptr - : public __shared_ptr<_Tp> - { - public: - shared_ptr() - : __shared_ptr<_Tp>() { } - - template<typename _Tp1> - explicit - shared_ptr(_Tp1* __p) - : __shared_ptr<_Tp>(__p) { } - - template<typename _Tp1, typename _Deleter> - shared_ptr(_Tp1* __p, _Deleter __d) - : __shared_ptr<_Tp>(__p, __d) { } - - template<typename _Tp1> - shared_ptr(const shared_ptr<_Tp1>& __r) - : __shared_ptr<_Tp>(__r) { } - - template<typename _Tp1> - explicit - shared_ptr(const weak_ptr<_Tp1>& __r) - : __shared_ptr<_Tp>(__r) { } - - template<typename _Tp1> - explicit - shared_ptr(std::auto_ptr<_Tp1>& __r) - : __shared_ptr<_Tp>(__r) { } - - template<typename _Tp1> - shared_ptr(const shared_ptr<_Tp1>& __r, __static_cast_tag) - : __shared_ptr<_Tp>(__r, __static_cast_tag()) { } - - template<typename _Tp1> - shared_ptr(const shared_ptr<_Tp1>& __r, __const_cast_tag) - : __shared_ptr<_Tp>(__r, __const_cast_tag()) { } - - template<typename _Tp1> - shared_ptr(const shared_ptr<_Tp1>& __r, __dynamic_cast_tag) - : __shared_ptr<_Tp>(__r, __dynamic_cast_tag()) { } - - template<typename _Tp1> - shared_ptr& - operator=(const shared_ptr<_Tp1>& __r) // never throws - { - this->__shared_ptr<_Tp>::operator=(__r); - return *this; - } - - template<typename _Tp1> - shared_ptr& - operator=(std::auto_ptr<_Tp1>& __r) - { - this->__shared_ptr<_Tp>::operator=(__r); - return *this; - } - }; - - template<typename _Tp, typename _Tp1> - shared_ptr<_Tp> - static_pointer_cast(const shared_ptr<_Tp1>& __r) - { return shared_ptr<_Tp>(__r, __static_cast_tag()); } - - template<typename _Tp, typename _Tp1> - shared_ptr<_Tp> - const_pointer_cast(const shared_ptr<_Tp1>& __r) - { return shared_ptr<_Tp>(__r, __const_cast_tag()); } - - template<typename _Tp, typename _Tp1> - shared_ptr<_Tp> - dynamic_pointer_cast(const shared_ptr<_Tp1>& __r) - { return shared_ptr<_Tp>(__r, __dynamic_cast_tag()); } - - - // The actual TR1 weak_ptr, with forwarding constructors and - // assignment operators. - template<typename _Tp> - class weak_ptr - : public __weak_ptr<_Tp> - { - public: - weak_ptr() - : __weak_ptr<_Tp>() { } - - template<typename _Tp1> - weak_ptr(const weak_ptr<_Tp1>& __r) - : __weak_ptr<_Tp>(__r) { } - - template<typename _Tp1> - weak_ptr(const shared_ptr<_Tp1>& __r) - : __weak_ptr<_Tp>(__r) { } - - template<typename _Tp1> - weak_ptr& - operator=(const weak_ptr<_Tp1>& __r) // never throws - { - this->__weak_ptr<_Tp>::operator=(__r); - return *this; - } - - template<typename _Tp1> - weak_ptr& - operator=(const shared_ptr<_Tp1>& __r) // never throws - { - this->__weak_ptr<_Tp>::operator=(__r); - return *this; - } - - shared_ptr<_Tp> - lock() const // never throws - { -#ifdef __GTHREADS - if (this->expired()) - return shared_ptr<_Tp>(); - - try - { - return shared_ptr<_Tp>(*this); - } - catch(const bad_weak_ptr&) - { - return shared_ptr<_Tp>(); - } -#else - return this->expired() ? shared_ptr<_Tp>() - : shared_ptr<_Tp>(*this); -#endif - } - }; - - - template<typename _Tp> - class enable_shared_from_this - { - protected: - enable_shared_from_this() { } - - enable_shared_from_this(const enable_shared_from_this&) { } - - enable_shared_from_this& - operator=(const enable_shared_from_this&) - { return *this; } - - ~enable_shared_from_this() { } - - public: - shared_ptr<_Tp> - shared_from_this() - { return shared_ptr<_Tp>(this->_M_weak_this); } - - shared_ptr<const _Tp> - shared_from_this() const - { return shared_ptr<const _Tp>(this->_M_weak_this); } - - private: - template<typename _Tp1> - void - _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const - { _M_weak_this._M_assign(__p, __n); } - - template<typename _Tp1> - friend void - __enable_shared_from_this_helper(const __shared_count<>& __pn, - const enable_shared_from_this* __pe, - const _Tp1* __px) - { - if (__pe != 0) - __pe->_M_weak_assign(const_cast<_Tp1*>(__px), __pn); - } - - mutable weak_ptr<_Tp> _M_weak_this; - }; - -_GLIBCXX_END_NAMESPACE -} // namespace std - -#endif diff --git a/contrib/libstdc++/include/tr1/cctype b/contrib/libstdc++/include/tr1/cctype deleted file mode 100644 index 8ddfa89002e0f..0000000000000 --- a/contrib/libstdc++/include/tr1/cctype +++ /dev/null @@ -1,56 +0,0 @@ -// TR1 cctype -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cctype - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CCTYPE -#define _TR1_CCTYPE 1 - -#include <bits/c++config.h> -#include <cctype> - -#if _GLIBCXX_USE_C99_CTYPE_TR1 - -#undef isblank - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - using ::isblank; - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cfenv b/contrib/libstdc++/include/tr1/cfenv deleted file mode 100644 index ddcce74c591af..0000000000000 --- a/contrib/libstdc++/include/tr1/cfenv +++ /dev/null @@ -1,84 +0,0 @@ -// TR1 cctype -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cfenv - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CFENV -#define _TR1_CFENV 1 - -#include <bits/c++config.h> - -#if _GLIBCXX_USE_C99_FENV_TR1 - -#include <fenv.h> - -#undef feclearexcept -#undef fegetexceptflag -#undef feraiseexcept -#undef fesetexceptflag -#undef fetestexcept -#undef fegetround -#undef fesetround -#undef fegetenv -#undef feholdexcept -#undef fesetenv -#undef feupdateenv - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // types - using ::fenv_t; - using ::fexcept_t; - - // functions - using ::feclearexcept; - using ::fegetexceptflag; - using ::feraiseexcept; - using ::fesetexceptflag; - using ::fetestexcept; - - using ::fegetround; - using ::fesetround; - - using ::fegetenv; - using ::feholdexcept; - using ::fesetenv; - using ::feupdateenv; - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cfloat b/contrib/libstdc++/include/tr1/cfloat deleted file mode 100644 index 1514ff76066ca..0000000000000 --- a/contrib/libstdc++/include/tr1/cfloat +++ /dev/null @@ -1,47 +0,0 @@ -// TR1 cfloat -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cfloat - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CFLOAT -#define _TR1_CFLOAT 1 - -#include <cfloat> - -#ifndef DECIMAL_DIG -#define DECIMAL_DIG __DECIMAL_DIG__ -#endif - -#ifndef FLT_EVAL_METHOD -#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cinttypes b/contrib/libstdc++/include/tr1/cinttypes deleted file mode 100644 index 03bdd30c61570..0000000000000 --- a/contrib/libstdc++/include/tr1/cinttypes +++ /dev/null @@ -1,81 +0,0 @@ -// TR1 cinttypes -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cinttypes - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CINTTYPES -#define _TR1_CINTTYPES 1 - -#include <bits/c++config.h> -#include <tr1/cstdint> - -#if _GLIBCXX_USE_C99_INTTYPES_TR1 - -// For 8.11.1/1 (see C99, Note 184) -#define __STDC_FORMAT_MACROS -#include <inttypes.h> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // types - using ::imaxdiv_t; - - // functions - using ::imaxabs; - - // May collide with _Longlong abs(_Longlong), and is not described - // anywhere outside the synopsis. Likely, a defect. - // - // intmax_t abs(intmax_t) - - using ::imaxdiv; - - // Likewise, with lldiv_t div(_Longlong, _Longlong). - // - // imaxdiv_t div(intmax_t, intmax_t) - - using ::strtoimax; - using ::strtoumax; - -#ifdef _GLIBCXX_USE_WCHAR_T - using ::wcstoimax; - using ::wcstoumax; -#endif - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/climits b/contrib/libstdc++/include/tr1/climits deleted file mode 100644 index dc047299d77a2..0000000000000 --- a/contrib/libstdc++/include/tr1/climits +++ /dev/null @@ -1,51 +0,0 @@ -// TR1 climits -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/climits - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CLIMITS -#define _TR1_CLIMITS 1 - -#include <climits> - -#ifndef LLONG_MIN -#define LLONG_MIN -__LONG_LONG_MAX__ - 1 -#endif - -#ifndef LLONG_MAX -#define LLONG_MAX __LONG_LONG_MAX__ -#endif - -#ifndef ULLONG_MAX -#define ULLONG_MAX __LONG_LONG_MAX__ * 2ULL + 1 -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cmath b/contrib/libstdc++/include/tr1/cmath deleted file mode 100644 index f08e86f73de05..0000000000000 --- a/contrib/libstdc++/include/tr1/cmath +++ /dev/null @@ -1,943 +0,0 @@ -// TR1 cmath -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cmath - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CMATH -#define _TR1_CMATH 1 - -#include <bits/c++config.h> -#include <cmath> -#include <tr1/common.h> - -#if _GLIBCXX_USE_C99_MATH_TR1 - -#undef acosh -#undef acoshf -#undef acoshl -#undef asinh -#undef asinhf -#undef asinhl -#undef atanh -#undef atanhf -#undef atanhl -#undef cbrt -#undef cbrtf -#undef cbrtl -#undef copysign -#undef copysignf -#undef copysignl -#undef erf -#undef erff -#undef erfl -#undef erfc -#undef erfcf -#undef erfcl -#undef exp2 -#undef exp2f -#undef exp2l -#undef expm1 -#undef expm1f -#undef expm1l -#undef fdim -#undef fdimf -#undef fdiml -#undef fma -#undef fmaf -#undef fmal -#undef fmax -#undef fmaxf -#undef fmaxl -#undef fmin -#undef fminf -#undef fminl -#undef hypot -#undef hypotf -#undef hypotl -#undef ilogb -#undef ilogbf -#undef ilogbl -#undef lgamma -#undef lgammaf -#undef lgammal -#undef llrint -#undef llrintf -#undef llrintl -#undef llround -#undef llroundf -#undef llroundl -#undef log1p -#undef log1pf -#undef log1pl -#undef log2 -#undef log2f -#undef log2l -#undef logb -#undef logbf -#undef logbl -#undef lrint -#undef lrintf -#undef lrintl -#undef lround -#undef lroundf -#undef lroundl -#undef nan -#undef nanf -#undef nanl -#undef nearbyint -#undef nearbyintf -#undef nearbyintl -#undef nextafter -#undef nextafterf -#undef nextafterl -#undef nexttoward -#undef nexttowardf -#undef nexttowardl -#undef remainder -#undef remainderf -#undef remainderl -#undef remquo -#undef remquo -#undef remquo -#undef rint -#undef rintf -#undef rintl -#undef round -#undef roundf -#undef roundl -#undef scalbln -#undef scalblnf -#undef scalblnl -#undef scalbn -#undef scalbnf -#undef scalbnl -#undef tgamma -#undef tgammaf -#undef tgammal -#undef trunc -#undef truncf -#undef truncl - -#endif - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -#if _GLIBCXX_USE_C99_MATH_TR1 - - // types - using ::double_t; - using ::float_t; - - // functions - using ::acosh; - using ::acoshf; - using ::acoshl; - - using ::asinh; - using ::asinhf; - using ::asinhl; - - using ::atanh; - using ::atanhf; - using ::atanhl; - - using ::cbrt; - using ::cbrtf; - using ::cbrtl; - - using ::copysign; - using ::copysignf; - using ::copysignl; - - using ::erf; - using ::erff; - using ::erfl; - - using ::erfc; - using ::erfcf; - using ::erfcl; - - using ::exp2; - using ::exp2f; - using ::exp2l; - - using ::expm1; - using ::expm1f; - using ::expm1l; - - using ::fdim; - using ::fdimf; - using ::fdiml; - - using ::fma; - using ::fmaf; - using ::fmal; - - using ::fmax; - using ::fmaxf; - using ::fmaxl; - - using ::fmin; - using ::fminf; - using ::fminl; - - using ::hypot; - using ::hypotf; - using ::hypotl; - - using ::ilogb; - using ::ilogbf; - using ::ilogbl; - - using ::lgamma; - using ::lgammaf; - using ::lgammal; - - using ::llrint; - using ::llrintf; - using ::llrintl; - - using ::llround; - using ::llroundf; - using ::llroundl; - - using ::log1p; - using ::log1pf; - using ::log1pl; - - using ::log2; - using ::log2f; - using ::log2l; - - using ::logb; - using ::logbf; - using ::logbl; - - using ::lrint; - using ::lrintf; - using ::lrintl; - - using ::lround; - using ::lroundf; - using ::lroundl; - - using ::nan; - using ::nanf; - using ::nanl; - - using ::nearbyint; - using ::nearbyintf; - using ::nearbyintl; - - using ::nextafter; - using ::nextafterf; - using ::nextafterl; - - using ::nexttoward; - using ::nexttowardf; - using ::nexttowardl; - - using ::remainder; - using ::remainderf; - using ::remainderl; - - using ::remquo; - using ::remquo; - using ::remquo; - - using ::rint; - using ::rintf; - using ::rintl; - - using ::round; - using ::roundf; - using ::roundl; - - using ::scalbln; - using ::scalblnf; - using ::scalblnl; - - using ::scalbn; - using ::scalbnf; - using ::scalbnl; - - using ::tgamma; - using ::tgammaf; - using ::tgammal; - - using ::trunc; - using ::truncf; - using ::truncl; - -#endif - -#if _GLIBCXX_USE_C99_MATH -#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC - - /// @brief Function template definitions [8.16.3]. - // - using std::signbit; - - using std::fpclassify; - - using std::isfinite; - using std::isinf; - using std::isnan; - using std::isnormal; - - using std::isgreater; - using std::isgreaterequal; - using std::isless; - using std::islessequal; - using std::islessgreater; - using std::isunordered; -#endif -#endif - -#if _GLIBCXX_USE_C99_MATH_TR1 - - /// @brief Additional overloads [8.16.4]. - // - using std::acos; - - inline float - acosh(float __x) - { return __builtin_acoshf(__x); } - - inline long double - acosh(long double __x) - { return __builtin_acoshl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - acosh(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return acosh(__type(__x)); - } - - using std::asin; - - inline float - asinh(float __x) - { return __builtin_asinhf(__x); } - - inline long double - asinh(long double __x) - { return __builtin_asinhl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - asinh(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return asinh(__type(__x)); - } - - using std::atan; - - // Workaround for c++/21682. - namespace __detail - { - template<typename _Tp, typename _Up> - inline typename - __gnu_cxx::__enable_if<std::__is_floating<_Tp>::__value - || std::__is_floating<_Up>::__value, - typename - std::tr1::__promote_2<_Tp, _Up>::__type>::__type - atan2(_Tp __y, _Up __x) - { - typedef typename std::tr1::__promote_2<_Tp, _Up>::__type __type; - return std::atan2(__type(__y), __type(__x)); - } - } // namespace __detail - - using std::atan2; - using __detail::atan2; - - inline float - atanh(float __x) - { return __builtin_atanhf(__x); } - - inline long double - atanh(long double __x) - { return __builtin_atanhl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - atanh(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return atanh(__type(__x)); - } - - inline float - cbrt(float __x) - { return __builtin_cbrtf(__x); } - - inline long double - cbrt(long double __x) - { return __builtin_cbrtl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - cbrt(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return cbrt(__type(__x)); - } - - using std::ceil; - - inline float - copysign(float __x, float __y) - { return __builtin_copysignf(__x, __y); } - - inline long double - copysign(long double __x, long double __y) - { return __builtin_copysignl(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - copysign(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return copysign(__type(__x), __type(__y)); - } - - using std::cos; - using std::cosh; - - inline float - erf(float __x) - { return __builtin_erff(__x); } - - inline long double - erf(long double __x) - { return __builtin_erfl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - erf(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return erf(__type(__x)); - } - - inline float - erfc(float __x) - { return __builtin_erfcf(__x); } - - inline long double - erfc(long double __x) - { return __builtin_erfcl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - erfc(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return erfc(__type(__x)); - } - - using std::exp; - - inline float - exp2(float __x) - { return __builtin_exp2f(__x); } - - inline long double - exp2(long double __x) - { return __builtin_exp2l(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - exp2(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return exp2(__type(__x)); - } - - inline float - expm1(float __x) - { return __builtin_expm1f(__x); } - - inline long double - expm1(long double __x) - { return __builtin_expm1l(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - expm1(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return expm1(__type(__x)); - } - - using std::fabs; - - inline float - fdim(float __x, float __y) - { return __builtin_fdimf(__x, __y); } - - inline long double - fdim(long double __x, long double __y) - { return __builtin_fdiml(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - fdim(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return fdim(__type(__x), __type(__y)); - } - - using std::floor; - - inline float - fma(float __x, float __y, float __z) - { return __builtin_fmaf(__x, __y, __z); } - - inline long double - fma(long double __x, long double __y, long double __z) - { return __builtin_fmal(__x, __y, __z); } - - template<typename _Tp, typename _Up, typename _Vp> - inline typename __promote_3<_Tp, _Up, _Vp>::__type - fma(_Tp __x, _Up __y, _Vp __z) - { - typedef typename __promote_3<_Tp, _Up, _Vp>::__type __type; - return fma(__type(__x), __type(__y), __type(__z)); - } - - inline float - fmax(float __x, float __y) - { return __builtin_fmaxf(__x, __y); } - - inline long double - fmax(long double __x, long double __y) - { return __builtin_fmaxl(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - fmax(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return fmax(__type(__x), __type(__y)); - } - - inline float - fmin(float __x, float __y) - { return __builtin_fminf(__x, __y); } - - inline long double - fmin(long double __x, long double __y) - { return __builtin_fminl(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - fmin(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return fmin(__type(__x), __type(__y)); - } - - using std::fmod; - using std::frexp; - - inline float - hypot(float __x, float __y) - { return __builtin_hypotf(__x, __y); } - - inline long double - hypot(long double __x, long double __y) - { return __builtin_hypotl(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - hypot(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return hypot(__type(__x), __type(__y)); - } - - inline int - ilogb(float __x) - { return __builtin_ilogbf(__x); } - - inline int - ilogb(long double __x) - { return __builtin_ilogbl(__x); } - - template<typename _Tp> - inline int - ilogb(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return ilogb(__type(__x)); - } - - using std::ldexp; - - inline float - lgamma(float __x) - { return __builtin_lgammaf(__x); } - - inline long double - lgamma(long double __x) - { return __builtin_lgammal(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - lgamma(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return lgamma(__type(__x)); - } - - inline long long - llrint(float __x) - { return __builtin_llrintf(__x); } - - inline long long - llrint(long double __x) - { return __builtin_llrintl(__x); } - - template<typename _Tp> - inline long long - llrint(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return llrint(__type(__x)); - } - - inline long long - llround(float __x) - { return __builtin_llroundf(__x); } - - inline long long - llround(long double __x) - { return __builtin_llroundl(__x); } - - template<typename _Tp> - inline long long - llround(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return llround(__type(__x)); - } - - using std::log; - using std::log10; - - inline float - log1p(float __x) - { return __builtin_log1pf(__x); } - - inline long double - log1p(long double __x) - { return __builtin_log1pl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - log1p(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return log1p(__type(__x)); - } - - // DR 568. - inline float - log2(float __x) - { return __builtin_log2f(__x); } - - inline long double - log2(long double __x) - { return __builtin_log2l(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - log2(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return log2(__type(__x)); - } - - inline float - logb(float __x) - { return __builtin_logbf(__x); } - - inline long double - logb(long double __x) - { return __builtin_logbl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - logb(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return logb(__type(__x)); - } - - inline long - lrint(float __x) - { return __builtin_lrintf(__x); } - - inline long - lrint(long double __x) - { return __builtin_lrintl(__x); } - - template<typename _Tp> - inline long - lrint(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return lrint(__type(__x)); - } - - inline long - lround(float __x) - { return __builtin_lroundf(__x); } - - inline long - lround(long double __x) - { return __builtin_lroundl(__x); } - - template<typename _Tp> - inline long - lround(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return lround(__type(__x)); - } - - inline float - nearbyint(float __x) - { return __builtin_nearbyintf(__x); } - - inline long double - nearbyint(long double __x) - { return __builtin_nearbyintl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - nearbyint(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return nearbyint(__type(__x)); - } - - inline float - nextafter(float __x, float __y) - { return __builtin_nextafterf(__x, __y); } - - inline long double - nextafter(long double __x, long double __y) - { return __builtin_nextafterl(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - nextafter(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return nextafter(__type(__x), __type(__y)); - } - - inline float - nexttoward(float __x, long double __y) - { return __builtin_nexttowardf(__x, __y); } - - inline long double - nexttoward(long double __x, long double __y) - { return __builtin_nexttowardl(__x, __y); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - nexttoward(_Tp __x, long double __y) - { - typedef typename __promote<_Tp>::__type __type; - return nexttoward(__type(__x), __y); - } - - using std::pow; - - // DR 550. - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - pow(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return pow(__type(__x), __type(__y)); - } - - inline float - remainder(float __x, float __y) - { return __builtin_remainderf(__x, __y); } - - inline long double - remainder(long double __x, long double __y) - { return __builtin_remainderl(__x, __y); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - remainder(_Tp __x, _Up __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return remainder(__type(__x), __type(__y)); - } - - inline float - remquo(float __x, float __y, int* __pquo) - { return __builtin_remquof(__x, __y, __pquo); } - - inline long double - remquo(long double __x, long double __y, int* __pquo) - { return __builtin_remquol(__x, __y, __pquo); } - - template<typename _Tp, typename _Up> - inline typename __promote_2<_Tp, _Up>::__type - remquo(_Tp __x, _Up __y, int* __pquo) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return remquo(__type(__x), __type(__y), __pquo); - } - - inline float - rint(float __x) - { return __builtin_rintf(__x); } - - inline long double - rint(long double __x) - { return __builtin_rintl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - rint(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return rint(__type(__x)); - } - - inline float - round(float __x) - { return __builtin_roundf(__x); } - - inline long double - round(long double __x) - { return __builtin_roundl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - round(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return round(__type(__x)); - } - - inline float - scalbln(float __x, long __ex) - { return __builtin_scalblnf(__x, __ex); } - - inline long double - scalbln(long double __x, long __ex) - { return __builtin_scalblnl(__x, __ex); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - scalbln(_Tp __x, long __ex) - { - typedef typename __promote<_Tp>::__type __type; - return scalbln(__type(__x), __ex); - } - - inline float - scalbn(float __x, int __ex) - { return __builtin_scalbnf(__x, __ex); } - - inline long double - scalbn(long double __x, int __ex) - { return __builtin_scalbnl(__x, __ex); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - scalbn(_Tp __x, int __ex) - { - typedef typename __promote<_Tp>::__type __type; - return scalbn(__type(__x), __ex); - } - - using std::sin; - using std::sinh; - using std::sqrt; - using std::tan; - using std::tanh; - - inline float - tgamma(float __x) - { return __builtin_tgammaf(__x); } - - inline long double - tgamma(long double __x) - { return __builtin_tgammal(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - tgamma(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return tgamma(__type(__x)); - } - - inline float - trunc(float __x) - { return __builtin_truncf(__x); } - - inline long double - trunc(long double __x) - { return __builtin_truncl(__x); } - - template<typename _Tp> - inline typename __promote<_Tp>::__type - trunc(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return trunc(__type(__x)); - } - -#endif - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/common.h b/contrib/libstdc++/include/tr1/common.h deleted file mode 100644 index 7d098f863dd96..0000000000000 --- a/contrib/libstdc++/include/tr1/common.h +++ /dev/null @@ -1,78 +0,0 @@ -// Internal header for TR1 complex -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/common.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_COMMON_H -#define _TR1_COMMON_H 1 - -#include <tr1/type_traits> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - template<typename _Tp, bool = is_integral<_Tp>::value> - struct __promote - { typedef double __type; }; - - template<typename _Tp> - struct __promote<_Tp, false> - { typedef _Tp __type; }; - - template<typename _Tp, typename _Up> - struct __promote_2 - { - private: - typedef typename __promote<_Tp>::__type __type1; - typedef typename __promote<_Up>::__type __type2; - - public: - typedef __typeof__(__type1() + __type2()) __type; - }; - - template<typename _Tp, typename _Up, typename _Vp> - struct __promote_3 - { - private: - typedef typename __promote<_Tp>::__type __type1; - typedef typename __promote<_Up>::__type __type2; - typedef typename __promote<_Vp>::__type __type3; - - public: - typedef __typeof__(__type1() + __type2() + __type3()) __type; - }; - -_GLIBCXX_END_NAMESPACE -} // namespace std - -#endif diff --git a/contrib/libstdc++/include/tr1/complex b/contrib/libstdc++/include/tr1/complex deleted file mode 100644 index 0817ef761e338..0000000000000 --- a/contrib/libstdc++/include/tr1/complex +++ /dev/null @@ -1,409 +0,0 @@ -// TR1 complex -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/complex - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_COMPLEX -#define _TR1_COMPLEX 1 - -#include "../complex" -#include <tr1/common.h> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // Forward declarations. - template<typename _Tp> std::complex<_Tp> acos(const std::complex<_Tp>&); - template<typename _Tp> std::complex<_Tp> asin(const std::complex<_Tp>&); - template<typename _Tp> std::complex<_Tp> atan(const std::complex<_Tp>&); - - template<typename _Tp> std::complex<_Tp> acosh(const std::complex<_Tp>&); - template<typename _Tp> std::complex<_Tp> asinh(const std::complex<_Tp>&); - template<typename _Tp> std::complex<_Tp> atanh(const std::complex<_Tp>&); - template<typename _Tp> std::complex<_Tp> fabs(const std::complex<_Tp>&); - - /// @brief acos(__z) [8.1.2]. - // Effects: Behaves the same as C99 function cacos, defined - // in subclause 7.3.5.1. - template<typename _Tp> - inline std::complex<_Tp> - __complex_acos(const std::complex<_Tp>& __z) - { - const std::complex<_Tp> __t = std::tr1::asin(__z); - const _Tp __pi_2 = 1.5707963267948966192313216916397514L; - return std::complex<_Tp>(__pi_2 - __t.real(), -__t.imag()); - } - -#if _GLIBCXX_USE_C99_COMPLEX_TR1 - inline __complex__ float - __complex_acos(__complex__ float __z) - { return __builtin_cacosf(__z); } - - inline __complex__ double - __complex_acos(__complex__ double __z) - { return __builtin_cacos(__z); } - - inline __complex__ long double - __complex_acos(const __complex__ long double& __z) - { return __builtin_cacosl(__z); } - - template<typename _Tp> - inline std::complex<_Tp> - acos(const std::complex<_Tp>& __z) - { return __complex_acos(__z.__rep()); } -#else - template<typename _Tp> - inline std::complex<_Tp> - acos(const std::complex<_Tp>& __z) - { return __complex_acos(__z); } -#endif - - /// @brief asin(__z) [8.1.3]. - // Effects: Behaves the same as C99 function casin, defined - // in subclause 7.3.5.2. - template<typename _Tp> - inline std::complex<_Tp> - __complex_asin(const std::complex<_Tp>& __z) - { - std::complex<_Tp> __t(-__z.imag(), __z.real()); - __t = std::tr1::asinh(__t); - return std::complex<_Tp>(__t.imag(), -__t.real()); - } - -#if _GLIBCXX_USE_C99_COMPLEX_TR1 - inline __complex__ float - __complex_asin(__complex__ float __z) - { return __builtin_casinf(__z); } - - inline __complex__ double - __complex_asin(__complex__ double __z) - { return __builtin_casin(__z); } - - inline __complex__ long double - __complex_asin(const __complex__ long double& __z) - { return __builtin_casinl(__z); } - - template<typename _Tp> - inline std::complex<_Tp> - asin(const std::complex<_Tp>& __z) - { return __complex_asin(__z.__rep()); } -#else - template<typename _Tp> - inline std::complex<_Tp> - asin(const std::complex<_Tp>& __z) - { return __complex_asin(__z); } -#endif - - /// @brief atan(__z) [8.1.4]. - // Effects: Behaves the same as C99 function catan, defined - // in subclause 7.3.5.3. - template<typename _Tp> - std::complex<_Tp> - __complex_atan(const std::complex<_Tp>& __z) - { - const _Tp __r2 = __z.real() * __z.real(); - const _Tp __x = _Tp(1.0) - __r2 - __z.imag() * __z.imag(); - - _Tp __num = __z.imag() + _Tp(1.0); - _Tp __den = __z.imag() - _Tp(1.0); - - __num = __r2 + __num * __num; - __den = __r2 + __den * __den; - - return std::complex<_Tp>(_Tp(0.5) * atan2(_Tp(2.0) * __z.real(), __x), - _Tp(0.25) * log(__num / __den)); - } - -#if _GLIBCXX_USE_C99_COMPLEX_TR1 - inline __complex__ float - __complex_atan(__complex__ float __z) - { return __builtin_catanf(__z); } - - inline __complex__ double - __complex_atan(__complex__ double __z) - { return __builtin_catan(__z); } - - inline __complex__ long double - __complex_atan(const __complex__ long double& __z) - { return __builtin_catanl(__z); } - - template<typename _Tp> - inline std::complex<_Tp> - atan(const std::complex<_Tp>& __z) - { return __complex_atan(__z.__rep()); } -#else - template<typename _Tp> - inline std::complex<_Tp> - atan(const std::complex<_Tp>& __z) - { return __complex_atan(__z); } -#endif - - /// @brief acosh(__z) [8.1.5]. - // Effects: Behaves the same as C99 function cacosh, defined - // in subclause 7.3.6.1. - template<typename _Tp> - std::complex<_Tp> - __complex_acosh(const std::complex<_Tp>& __z) - { - std::complex<_Tp> __t((__z.real() - __z.imag()) - * (__z.real() + __z.imag()) - _Tp(1.0), - _Tp(2.0) * __z.real() * __z.imag()); - __t = std::sqrt(__t); - - return std::log(__t + __z); - } - -#if _GLIBCXX_USE_C99_COMPLEX_TR1 - inline __complex__ float - __complex_acosh(__complex__ float __z) - { return __builtin_cacoshf(__z); } - - inline __complex__ double - __complex_acosh(__complex__ double __z) - { return __builtin_cacosh(__z); } - - inline __complex__ long double - __complex_acosh(const __complex__ long double& __z) - { return __builtin_cacoshl(__z); } - - template<typename _Tp> - inline std::complex<_Tp> - acosh(const std::complex<_Tp>& __z) - { return __complex_acosh(__z.__rep()); } -#else - template<typename _Tp> - inline std::complex<_Tp> - acosh(const std::complex<_Tp>& __z) - { return __complex_acosh(__z); } -#endif - - /// @brief asinh(__z) [8.1.6]. - // Effects: Behaves the same as C99 function casin, defined - // in subclause 7.3.6.2. - template<typename _Tp> - std::complex<_Tp> - __complex_asinh(const std::complex<_Tp>& __z) - { - std::complex<_Tp> __t((__z.real() - __z.imag()) - * (__z.real() + __z.imag()) + _Tp(1.0), - _Tp(2.0) * __z.real() * __z.imag()); - __t = std::sqrt(__t); - - return std::log(__t + __z); - } - -#if _GLIBCXX_USE_C99_COMPLEX_TR1 - inline __complex__ float - __complex_asinh(__complex__ float __z) - { return __builtin_casinhf(__z); } - - inline __complex__ double - __complex_asinh(__complex__ double __z) - { return __builtin_casinh(__z); } - - inline __complex__ long double - __complex_asinh(const __complex__ long double& __z) - { return __builtin_casinhl(__z); } - - template<typename _Tp> - inline std::complex<_Tp> - asinh(const std::complex<_Tp>& __z) - { return __complex_asinh(__z.__rep()); } -#else - template<typename _Tp> - inline std::complex<_Tp> - asinh(const std::complex<_Tp>& __z) - { return __complex_asinh(__z); } -#endif - - /// @brief atanh(__z) [8.1.7]. - // Effects: Behaves the same as C99 function catanh, defined - // in subclause 7.3.6.3. - template<typename _Tp> - std::complex<_Tp> - __complex_atanh(const std::complex<_Tp>& __z) - { - const _Tp __i2 = __z.imag() * __z.imag(); - const _Tp __x = _Tp(1.0) - __i2 - __z.real() * __z.real(); - - _Tp __num = _Tp(1.0) + __z.real(); - _Tp __den = _Tp(1.0) - __z.real(); - - __num = __i2 + __num * __num; - __den = __i2 + __den * __den; - - return std::complex<_Tp>(_Tp(0.25) * (log(__num) - log(__den)), - _Tp(0.5) * atan2(_Tp(2.0) * __z.imag(), __x)); - } - -#if _GLIBCXX_USE_C99_COMPLEX_TR1 - inline __complex__ float - __complex_atanh(__complex__ float __z) - { return __builtin_catanhf(__z); } - - inline __complex__ double - __complex_atanh(__complex__ double __z) - { return __builtin_catanh(__z); } - - inline __complex__ long double - __complex_atanh(const __complex__ long double& __z) - { return __builtin_catanhl(__z); } - - template<typename _Tp> - inline std::complex<_Tp> - atanh(const std::complex<_Tp>& __z) - { return __complex_atanh(__z.__rep()); } -#else - template<typename _Tp> - inline std::complex<_Tp> - atanh(const std::complex<_Tp>& __z) - { return __complex_atanh(__z); } -#endif - - /// @brief fabs(__z) [8.1.8]. - // Effects: Behaves the same as C99 function cabs, defined - // in subclause 7.3.8.1. - template<typename _Tp> - inline std::complex<_Tp> - fabs(const std::complex<_Tp>& __z) - { return std::abs(__z); } - - - /// @brief Additional overloads [8.1.9]. - // - - // See common.h for the primary template. - template<typename _Tp, typename _Up> - struct __promote_2<std::complex<_Tp>, _Up> - { - public: - typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type; - }; - - template<typename _Tp, typename _Up> - struct __promote_2<_Tp, std::complex<_Up> > - { - public: - typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type; - }; - - template<typename _Tp, typename _Up> - struct __promote_2<std::complex<_Tp>, std::complex<_Up> > - { - public: - typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type; - }; - - - using std::arg; - - template<typename _Tp> - inline typename __promote<_Tp>::__type - arg(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return std::arg(std::complex<__type>(__x)); - } - - using std::conj; - - template<typename _Tp> - inline std::complex<typename __promote<_Tp>::__type> - conj(_Tp __x) - { return __x; } - - using std::imag; - - template<typename _Tp> - inline typename __promote<_Tp>::__type - imag(_Tp) - { return _Tp(); } - - using std::norm; - - template<typename _Tp> - inline typename __promote<_Tp>::__type - norm(_Tp __x) - { - typedef typename __promote<_Tp>::__type __type; - return __type(__x) * __type(__x); - } - - using std::polar; - - template<typename _Tp, typename _Up> - inline std::complex<typename __promote_2<_Tp, _Up>::__type> - polar(const _Tp& __rho, const _Up& __theta) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return std::polar(__type(__rho), __type(__theta)); - } - - using std::pow; - - template<typename _Tp, typename _Up> - inline std::complex<typename __promote_2<_Tp, _Up>::__type> - pow(const std::complex<_Tp>& __x, const _Up& __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return std::pow(std::complex<__type>(__x), __type(__y)); - } - - template<typename _Tp, typename _Up> - inline std::complex<typename __promote_2<_Tp, _Up>::__type> - pow(const _Tp& __x, const std::complex<_Up>& __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return std::pow(__type(__x), std::complex<__type>(__y)); - } - - template<typename _Tp, typename _Up> - inline std::complex<typename __promote_2<_Tp, _Up>::__type> - pow(const std::complex<_Tp>& __x, const std::complex<_Up>& __y) - { - typedef typename __promote_2<_Tp, _Up>::__type __type; - return std::pow(std::complex<__type>(__x), - std::complex<__type>(__y)); - } - - using std::real; - - template<typename _Tp> - inline typename __promote<_Tp>::__type - real(_Tp __x) - { return __x; } - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/cstdarg b/contrib/libstdc++/include/tr1/cstdarg deleted file mode 100644 index e70130e45f9d3..0000000000000 --- a/contrib/libstdc++/include/tr1/cstdarg +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 cstdarg -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cstdarg - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CSTDARG -#define _TR1_CSTDARG 1 - -#include <cstdarg> - -#endif diff --git a/contrib/libstdc++/include/tr1/cstdbool b/contrib/libstdc++/include/tr1/cstdbool deleted file mode 100644 index 2406f9e28f069..0000000000000 --- a/contrib/libstdc++/include/tr1/cstdbool +++ /dev/null @@ -1,43 +0,0 @@ -// TR1 cstdbool -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cstdbool - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CSTDBOOL -#define _TR1_CSTDBOOL 1 - -#include <bits/c++config.h> - -#if _GLIBCXX_HAVE_STDBOOL_H -#include <stdbool.h> -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cstdint b/contrib/libstdc++/include/tr1/cstdint deleted file mode 100644 index af5a90f288c49..0000000000000 --- a/contrib/libstdc++/include/tr1/cstdint +++ /dev/null @@ -1,92 +0,0 @@ -// TR1 cstdint -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cstdint - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CSTDINT -#define _TR1_CSTDINT 1 - -#include <bits/c++config.h> - -#if _GLIBCXX_USE_C99_STDINT_TR1 - -// For 8.22.1/1 (see C99, Notes 219, 220, 222) -#define __STDC_LIMIT_MACROS -#define __STDC_CONSTANT_MACROS -#include <stdint.h> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - using ::int8_t; - using ::int16_t; - using ::int32_t; - using ::int64_t; - - using ::int_fast8_t; - using ::int_fast16_t; - using ::int_fast32_t; - using ::int_fast64_t; - - using ::int_least8_t; - using ::int_least16_t; - using ::int_least32_t; - using ::int_least64_t; - - using ::intmax_t; - using ::intptr_t; - - using ::uint8_t; - using ::uint16_t; - using ::uint32_t; - using ::uint64_t; - - using ::uint_fast8_t; - using ::uint_fast16_t; - using ::uint_fast32_t; - using ::uint_fast64_t; - - using ::uint_least8_t; - using ::uint_least16_t; - using ::uint_least32_t; - using ::uint_least64_t; - - using ::uintmax_t; - using ::uintptr_t; - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cstdio b/contrib/libstdc++/include/tr1/cstdio deleted file mode 100644 index 1cf41b5018aec..0000000000000 --- a/contrib/libstdc++/include/tr1/cstdio +++ /dev/null @@ -1,57 +0,0 @@ -// TR1 cstdio -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cstdio - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CSTDIO -#define _TR1_CSTDIO 1 - -#include <bits/c++config.h> -#include <cstdio> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -#if _GLIBCXX_USE_C99 - using std::snprintf; - using std::vsnprintf; - - using std::vfscanf; - using std::vscanf; - using std::vsscanf; -#endif - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/cstdlib b/contrib/libstdc++/include/tr1/cstdlib deleted file mode 100644 index f7f8d7d9c4487..0000000000000 --- a/contrib/libstdc++/include/tr1/cstdlib +++ /dev/null @@ -1,79 +0,0 @@ -// TR1 cstdlib -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cstdlib - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CSTDLIB -#define _TR1_CSTDLIB 1 - -#include <bits/c++config.h> - -#if _GLIBCXX_HOSTED - -#include <cstdlib> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -#if _GLIBCXX_USE_C99 - -#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC - // types - using std::lldiv_t; - - // functions - using std::llabs; - using std::lldiv; -#endif - - using std::atoll; - using std::strtoll; - using std::strtoull; - - using std::strtof; - using std::strtold; - - // overloads - using std::abs; -#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC - using std::div; -#endif - -#endif - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/ctgmath b/contrib/libstdc++/include/tr1/ctgmath deleted file mode 100644 index eb91185779609..0000000000000 --- a/contrib/libstdc++/include/tr1/ctgmath +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 ctgmath -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/ctgmath - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CTGMATH -#define _TR1_CTGMATH 1 - -#include <tr1/cmath> - -#endif diff --git a/contrib/libstdc++/include/tr1/ctime b/contrib/libstdc++/include/tr1/ctime deleted file mode 100644 index 45e083976bf33..0000000000000 --- a/contrib/libstdc++/include/tr1/ctime +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 ctime -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/ctime - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CTIME -#define _TR1_CTIME 1 - -#include <ctime> - -#endif diff --git a/contrib/libstdc++/include/tr1/ctype.h b/contrib/libstdc++/include/tr1/ctype.h deleted file mode 100644 index 945b13b126275..0000000000000 --- a/contrib/libstdc++/include/tr1/ctype.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 ctype.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/ctype.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CTYPE_H -#define _TR1_CTYPE_H 1 - -#include <tr1/cctype> - -#endif diff --git a/contrib/libstdc++/include/tr1/cwchar b/contrib/libstdc++/include/tr1/cwchar deleted file mode 100644 index b918b37dd9fc2..0000000000000 --- a/contrib/libstdc++/include/tr1/cwchar +++ /dev/null @@ -1,72 +0,0 @@ -// TR1 cwchar -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cwchar - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CWCHAR -#define _TR1_CWCHAR 1 - -#include <bits/c++config.h> - -#if _GLIBCXX_USE_WCHAR_T - -#include <cwchar> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -#if _GLIBCXX_HAVE_WCSTOF - using std::wcstof; -#endif -#if _GLIBCXX_HAVE_VFWSCANF - using std::vfwscanf; -#endif -#if _GLIBCXX_HAVE_VSWSCANF - using std::vswscanf; -#endif -#if _GLIBCXX_HAVE_VWSCANF - using std::vwscanf; -#endif - -#if _GLIBCXX_USE_C99 - using std::wcstold; - using std::wcstoll; - using std::wcstoull; -#endif - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/cwctype b/contrib/libstdc++/include/tr1/cwctype deleted file mode 100644 index 7cc7a36c68bc6..0000000000000 --- a/contrib/libstdc++/include/tr1/cwctype +++ /dev/null @@ -1,57 +0,0 @@ -// TR1 cwctype -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/cwctype - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_CWCTYPE -#define _TR1_CWCTYPE 1 - -#include <bits/c++config.h> - -#if _GLIBCXX_USE_WCHAR_T - -#include <cwctype> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -#if _GLIBCXX_HAVE_ISWBLANK - using std::iswblank; -#endif - -_GLIBCXX_END_NAMESPACE -} - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/fenv.h b/contrib/libstdc++/include/tr1/fenv.h deleted file mode 100644 index 91fa40fea5ea6..0000000000000 --- a/contrib/libstdc++/include/tr1/fenv.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 fenv.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/fenv.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_FENV_H -#define _TR1_FENV_H 1 - -#include <tr1/cfenv> - -#endif diff --git a/contrib/libstdc++/include/tr1/float.h b/contrib/libstdc++/include/tr1/float.h deleted file mode 100644 index 5e99fe5bfcd6d..0000000000000 --- a/contrib/libstdc++/include/tr1/float.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 float.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/float.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_FLOAT_H -#define _TR1_FLOAT_H 1 - -#include <tr1/cfloat> - -#endif diff --git a/contrib/libstdc++/include/tr1/functional b/contrib/libstdc++/include/tr1/functional deleted file mode 100644 index f3cc78de75167..0000000000000 --- a/contrib/libstdc++/include/tr1/functional +++ /dev/null @@ -1,1106 +0,0 @@ -// TR1 functional header -*- C++ -*- - -// Copyright (C) 2004, 2005, 2006, 2007 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. - -/** @file tr1/functional - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_FUNCTIONAL -#define _TR1_FUNCTIONAL 1 - -#pragma GCC system_header - -#include "../functional" -#include <typeinfo> -#include <tr1/type_traits> -#include <ext/type_traits.h> -#include <cstdlib> // for std::abort -#include <tr1/tuple> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - template<typename _MemberPointer> - class _Mem_fn; - - /** - * @if maint - * Actual implementation of _Has_result_type, which uses SFINAE to - * determine if the type _Tp has a publicly-accessible member type - * result_type. - * @endif - */ - template<typename _Tp> - class _Has_result_type_helper : __sfinae_types - { - template<typename _Up> - struct _Wrap_type - { }; - - template<typename _Up> - static __one __test(_Wrap_type<typename _Up::result_type>*); - - template<typename _Up> - static __two __test(...); - - public: - static const bool value = sizeof(__test<_Tp>(0)) == 1; - }; - - template<typename _Tp> - struct _Has_result_type - : integral_constant< - bool, - _Has_result_type_helper<typename remove_cv<_Tp>::type>::value> - { }; - - /** - * @if maint - * If we have found a result_type, extract it. - * @endif - */ - template<bool _Has_result_type, typename _Functor> - struct _Maybe_get_result_type - { }; - - template<typename _Functor> - struct _Maybe_get_result_type<true, _Functor> - { - typedef typename _Functor::result_type result_type; - }; - - /** - * @if maint - * Base class for any function object that has a weak result type, as - * defined in 3.3/3 of TR1. - * @endif - */ - template<typename _Functor> - struct _Weak_result_type_impl - : _Maybe_get_result_type<_Has_result_type<_Functor>::value, _Functor> - { - }; - - /** - * @if maint - * Strip top-level cv-qualifiers from the function object and let - * _Weak_result_type_impl perform the real work. - * @endif - */ - template<typename _Functor> - struct _Weak_result_type - : _Weak_result_type_impl<typename remove_cv<_Functor>::type> - { - }; - - template<typename _Signature> - class result_of; - - /** - * @if maint - * Actual implementation of result_of. When _Has_result_type is - * true, gets its result from _Weak_result_type. Otherwise, uses - * the function object's member template result to extract the - * result type. - * @endif - */ - template<bool _Has_result_type, typename _Signature> - struct _Result_of_impl; - - // Handle member data pointers using _Mem_fn's logic - template<typename _Res, typename _Class, typename _T1> - struct _Result_of_impl<false, _Res _Class::*(_T1)> - { - typedef typename _Mem_fn<_Res _Class::*> - ::template _Result_type<_T1>::type type; - }; - - /** - * @if maint - * Determines if the type _Tp derives from unary_function. - * @endif - */ - template<typename _Tp> - struct _Derives_from_unary_function : __sfinae_types - { - private: - template<typename _T1, typename _Res> - static __one __test(const volatile unary_function<_T1, _Res>*); - - // It's tempting to change "..." to const volatile void*, but - // that fails when _Tp is a function type. - static __two __test(...); - - public: - static const bool value = sizeof(__test((_Tp*)0)) == 1; - }; - - /** - * @if maint - * Determines if the type _Tp derives from binary_function. - * @endif - */ - template<typename _Tp> - struct _Derives_from_binary_function : __sfinae_types - { - private: - template<typename _T1, typename _T2, typename _Res> - static __one __test(const volatile binary_function<_T1, _T2, _Res>*); - - // It's tempting to change "..." to const volatile void*, but - // that fails when _Tp is a function type. - static __two __test(...); - - public: - static const bool value = sizeof(__test((_Tp*)0)) == 1; - }; - - /** - * @if maint - * Turns a function type into a function pointer type - * @endif - */ - template<typename _Tp, bool _IsFunctionType = is_function<_Tp>::value> - struct _Function_to_function_pointer - { - typedef _Tp type; - }; - - template<typename _Tp> - struct _Function_to_function_pointer<_Tp, true> - { - typedef _Tp* type; - }; - - /** - * @if maint - * Knowing which of unary_function and binary_function _Tp derives - * from, derives from the same and ensures that reference_wrapper - * will have a weak result type. See cases below. - * @endif - */ - template<bool _Unary, bool _Binary, typename _Tp> - struct _Reference_wrapper_base_impl; - - // Not a unary_function or binary_function, so try a weak result type - template<typename _Tp> - struct _Reference_wrapper_base_impl<false, false, _Tp> - : _Weak_result_type<_Tp> - { }; - - // unary_function but not binary_function - template<typename _Tp> - struct _Reference_wrapper_base_impl<true, false, _Tp> - : unary_function<typename _Tp::argument_type, - typename _Tp::result_type> - { }; - - // binary_function but not unary_function - template<typename _Tp> - struct _Reference_wrapper_base_impl<false, true, _Tp> - : binary_function<typename _Tp::first_argument_type, - typename _Tp::second_argument_type, - typename _Tp::result_type> - { }; - - // both unary_function and binary_function. import result_type to - // avoid conflicts. - template<typename _Tp> - struct _Reference_wrapper_base_impl<true, true, _Tp> - : unary_function<typename _Tp::argument_type, - typename _Tp::result_type>, - binary_function<typename _Tp::first_argument_type, - typename _Tp::second_argument_type, - typename _Tp::result_type> - { - typedef typename _Tp::result_type result_type; - }; - - /** - * @if maint - * Derives from unary_function or binary_function when it - * can. Specializations handle all of the easy cases. The primary - * template determines what to do with a class type, which may - * derive from both unary_function and binary_function. - * @endif - */ - template<typename _Tp> - struct _Reference_wrapper_base - : _Reference_wrapper_base_impl< - _Derives_from_unary_function<_Tp>::value, - _Derives_from_binary_function<_Tp>::value, - _Tp> - { }; - - // - a function type (unary) - template<typename _Res, typename _T1> - struct _Reference_wrapper_base<_Res(_T1)> - : unary_function<_T1, _Res> - { }; - - // - a function type (binary) - template<typename _Res, typename _T1, typename _T2> - struct _Reference_wrapper_base<_Res(_T1, _T2)> - : binary_function<_T1, _T2, _Res> - { }; - - // - a function pointer type (unary) - template<typename _Res, typename _T1> - struct _Reference_wrapper_base<_Res(*)(_T1)> - : unary_function<_T1, _Res> - { }; - - // - a function pointer type (binary) - template<typename _Res, typename _T1, typename _T2> - struct _Reference_wrapper_base<_Res(*)(_T1, _T2)> - : binary_function<_T1, _T2, _Res> - { }; - - // - a pointer to member function type (unary, no qualifiers) - template<typename _Res, typename _T1> - struct _Reference_wrapper_base<_Res (_T1::*)()> - : unary_function<_T1*, _Res> - { }; - - // - a pointer to member function type (binary, no qualifiers) - template<typename _Res, typename _T1, typename _T2> - struct _Reference_wrapper_base<_Res (_T1::*)(_T2)> - : binary_function<_T1*, _T2, _Res> - { }; - - // - a pointer to member function type (unary, const) - template<typename _Res, typename _T1> - struct _Reference_wrapper_base<_Res (_T1::*)() const> - : unary_function<const _T1*, _Res> - { }; - - // - a pointer to member function type (binary, const) - template<typename _Res, typename _T1, typename _T2> - struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const> - : binary_function<const _T1*, _T2, _Res> - { }; - - // - a pointer to member function type (unary, volatile) - template<typename _Res, typename _T1> - struct _Reference_wrapper_base<_Res (_T1::*)() volatile> - : unary_function<volatile _T1*, _Res> - { }; - - // - a pointer to member function type (binary, volatile) - template<typename _Res, typename _T1, typename _T2> - struct _Reference_wrapper_base<_Res (_T1::*)(_T2) volatile> - : binary_function<volatile _T1*, _T2, _Res> - { }; - - // - a pointer to member function type (unary, const volatile) - template<typename _Res, typename _T1> - struct _Reference_wrapper_base<_Res (_T1::*)() const volatile> - : unary_function<const volatile _T1*, _Res> - { }; - - // - a pointer to member function type (binary, const volatile) - template<typename _Res, typename _T1, typename _T2> - struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const volatile> - : binary_function<const volatile _T1*, _T2, _Res> - { }; - - template<typename _Tp> - class reference_wrapper - : public _Reference_wrapper_base<typename remove_cv<_Tp>::type> - { - // If _Tp is a function type, we can't form result_of<_Tp(...)>, - // so turn it into a function pointer type. - typedef typename _Function_to_function_pointer<_Tp>::type - _M_func_type; - - _Tp* _M_data; - public: - typedef _Tp type; - explicit reference_wrapper(_Tp& __indata): _M_data(&__indata) - { } - - reference_wrapper(const reference_wrapper<_Tp>& __inref): - _M_data(__inref._M_data) - { } - - reference_wrapper& - operator=(const reference_wrapper<_Tp>& __inref) - { - _M_data = __inref._M_data; - return *this; - } - - operator _Tp&() const - { return this->get(); } - - _Tp& - get() const - { return *_M_data; } - -#define _GLIBCXX_REPEAT_HEADER <tr1/ref_wrap_iterate.h> -#include <tr1/repeat.h> -#undef _GLIBCXX_REPEAT_HEADER - }; - - - // Denotes a reference should be taken to a variable. - template<typename _Tp> - inline reference_wrapper<_Tp> - ref(_Tp& __t) - { return reference_wrapper<_Tp>(__t); } - - // Denotes a const reference should be taken to a variable. - template<typename _Tp> - inline reference_wrapper<const _Tp> - cref(const _Tp& __t) - { return reference_wrapper<const _Tp>(__t); } - - template<typename _Tp> - inline reference_wrapper<_Tp> - ref(reference_wrapper<_Tp> __t) - { return ref(__t.get()); } - - template<typename _Tp> - inline reference_wrapper<const _Tp> - cref(reference_wrapper<_Tp> __t) - { return cref(__t.get()); } - - template<typename _Tp, bool> - struct _Mem_fn_const_or_non - { - typedef const _Tp& type; - }; - - template<typename _Tp> - struct _Mem_fn_const_or_non<_Tp, false> - { - typedef _Tp& type; - }; - - template<typename _Res, typename _Class> - class _Mem_fn<_Res _Class::*> - { - // This bit of genius is due to Peter Dimov, improved slightly by - // Douglas Gregor. - template<typename _Tp> - _Res& - _M_call(_Tp& __object, _Class *) const - { return __object.*__pm; } - - template<typename _Tp, typename _Up> - _Res& - _M_call(_Tp& __object, _Up * const *) const - { return (*__object).*__pm; } - - template<typename _Tp, typename _Up> - const _Res& - _M_call(_Tp& __object, const _Up * const *) const - { return (*__object).*__pm; } - - template<typename _Tp> - const _Res& - _M_call(_Tp& __object, const _Class *) const - { return __object.*__pm; } - - template<typename _Tp> - const _Res& - _M_call(_Tp& __ptr, const volatile void*) const - { return (*__ptr).*__pm; } - - template<typename _Tp> static _Tp& __get_ref(); - - template<typename _Tp> - static __sfinae_types::__one __check_const(_Tp&, _Class*); - template<typename _Tp, typename _Up> - static __sfinae_types::__one __check_const(_Tp&, _Up * const *); - template<typename _Tp, typename _Up> - static __sfinae_types::__two __check_const(_Tp&, const _Up * const *); - template<typename _Tp> - static __sfinae_types::__two __check_const(_Tp&, const _Class*); - template<typename _Tp> - static __sfinae_types::__two __check_const(_Tp&, const volatile void*); - - public: - template<typename _Tp> - struct _Result_type - : _Mem_fn_const_or_non< - _Res, - (sizeof(__sfinae_types::__two) - == sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))> - { }; - - template<typename _Signature> - struct result; - - template<typename _CVMem, typename _Tp> - struct result<_CVMem(_Tp)> - : public _Result_type<_Tp> { }; - - template<typename _CVMem, typename _Tp> - struct result<_CVMem(_Tp&)> - : public _Result_type<_Tp> { }; - - explicit _Mem_fn(_Res _Class::*__pm) : __pm(__pm) { } - - // Handle objects - _Res& operator()(_Class& __object) const - { return __object.*__pm; } - - const _Res& operator()(const _Class& __object) const - { return __object.*__pm; } - - // Handle pointers - _Res& operator()(_Class* __object) const - { return __object->*__pm; } - - const _Res& - operator()(const _Class* __object) const - { return __object->*__pm; } - - // Handle smart pointers and derived - template<typename _Tp> - typename _Result_type<_Tp>::type - operator()(_Tp& __unknown) const - { return _M_call(__unknown, &__unknown); } - - private: - _Res _Class::*__pm; - }; - - /** - * @brief Returns a function object that forwards to the member - * pointer @a pm. - */ - template<typename _Tp, typename _Class> - inline _Mem_fn<_Tp _Class::*> - mem_fn(_Tp _Class::* __pm) - { - return _Mem_fn<_Tp _Class::*>(__pm); - } - - /** - * @brief Determines if the given type _Tp is a function object - * should be treated as a subexpression when evaluating calls to - * function objects returned by bind(). [TR1 3.6.1] - */ - template<typename _Tp> - struct is_bind_expression - { static const bool value = false; }; - - template<typename _Tp> - const bool is_bind_expression<_Tp>::value; - - /** - * @brief Determines if the given type _Tp is a placeholder in a - * bind() expression and, if so, which placeholder it is. [TR1 3.6.2] - */ - template<typename _Tp> - struct is_placeholder - { static const int value = 0; }; - - template<typename _Tp> - const int is_placeholder<_Tp>::value; - - /** - * @if maint - * The type of placeholder objects defined by libstdc++. - * @endif - */ - template<int _Num> struct _Placeholder { }; - - /** - * @if maint - * Partial specialization of is_placeholder that provides the placeholder - * number for the placeholder objects defined by libstdc++. - * @endif - */ - template<int _Num> - struct is_placeholder<_Placeholder<_Num> > - { static const int value = _Num; }; - - template<int _Num> - const int is_placeholder<_Placeholder<_Num> >::value; - - /** - * @if maint - * Maps an argument to bind() into an actual argument to the bound - * function object [TR1 3.6.3/5]. Only the first parameter should - * be specified: the rest are used to determine among the various - * implementations. Note that, although this class is a function - * object, isn't not entirely normal because it takes only two - * parameters regardless of the number of parameters passed to the - * bind expression. The first parameter is the bound argument and - * the second parameter is a tuple containing references to the - * rest of the arguments. - * @endif - */ - template<typename _Arg, - bool _IsBindExp = is_bind_expression<_Arg>::value, - bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)> - class _Mu; - - /** - * @if maint - * If the argument is reference_wrapper<_Tp>, returns the - * underlying reference. [TR1 3.6.3/5 bullet 1] - * @endif - */ - template<typename _Tp> - class _Mu<reference_wrapper<_Tp>, false, false> - { - public: - typedef _Tp& result_type; - - /* Note: This won't actually work for const volatile - * reference_wrappers, because reference_wrapper::get() is const - * but not volatile-qualified. This might be a defect in the TR. - */ - template<typename _CVRef, typename _Tuple> - result_type - operator()(_CVRef& __arg, const _Tuple&) const volatile - { return __arg.get(); } - }; - - /** - * @if maint - * If the argument is a bind expression, we invoke the underlying - * function object with the same cv-qualifiers as we are given and - * pass along all of our arguments (unwrapped). [TR1 3.6.3/5 bullet 2] - * @endif - */ - template<typename _Arg> - class _Mu<_Arg, true, false> - { - public: - template<typename _Signature> class result; - -#define _GLIBCXX_REPEAT_HEADER <tr1/mu_iterate.h> -# include <tr1/repeat.h> -#undef _GLIBCXX_REPEAT_HEADER - }; - - /** - * @if maint - * If the argument is a placeholder for the Nth argument, returns - * a reference to the Nth argument to the bind function object. - * [TR1 3.6.3/5 bullet 3] - * @endif - */ - template<typename _Arg> - class _Mu<_Arg, false, true> - { - public: - template<typename _Signature> class result; - - template<typename _CVMu, typename _CVArg, typename _Tuple> - class result<_CVMu(_CVArg, _Tuple)> - { - // Add a reference, if it hasn't already been done for us. - // This allows us to be a little bit sloppy in constructing - // the tuple that we pass to result_of<...>. - typedef typename tuple_element<(is_placeholder<_Arg>::value - 1), - _Tuple>::type __base_type; - - public: - typedef typename add_reference<__base_type>::type type; - }; - - template<typename _Tuple> - typename result<_Mu(_Arg, _Tuple)>::type - operator()(const volatile _Arg&, const _Tuple& __tuple) const volatile - { - return ::std::tr1::get<(is_placeholder<_Arg>::value - 1)>(__tuple); - } - }; - - /** - * @if maint - * If the argument is just a value, returns a reference to that - * value. The cv-qualifiers on the reference are the same as the - * cv-qualifiers on the _Mu object. [TR1 3.6.3/5 bullet 4] - * @endif - */ - template<typename _Arg> - class _Mu<_Arg, false, false> - { - public: - template<typename _Signature> struct result; - - template<typename _CVMu, typename _CVArg, typename _Tuple> - struct result<_CVMu(_CVArg, _Tuple)> - { - typedef typename add_reference<_CVArg>::type type; - }; - - // Pick up the cv-qualifiers of the argument - template<typename _CVArg, typename _Tuple> - _CVArg& operator()(_CVArg& __arg, const _Tuple&) const volatile - { return __arg; } - }; - - /** - * @if maint - * Maps member pointers into instances of _Mem_fn but leaves all - * other function objects untouched. Used by tr1::bind(). The - * primary template handles the non--member-pointer case. - * @endif - */ - template<typename _Tp> - struct _Maybe_wrap_member_pointer - { - typedef _Tp type; - static const _Tp& __do_wrap(const _Tp& __x) { return __x; } - }; - - /** - * @if maint - * Maps member pointers into instances of _Mem_fn but leaves all - * other function objects untouched. Used by tr1::bind(). This - * partial specialization handles the member pointer case. - * @endif - */ - template<typename _Tp, typename _Class> - struct _Maybe_wrap_member_pointer<_Tp _Class::*> - { - typedef _Mem_fn<_Tp _Class::*> type; - static type __do_wrap(_Tp _Class::* __pm) { return type(__pm); } - }; - - /** - * @if maint - * Type of the function object returned from bind(). - * @endif - */ - template<typename _Signature> - struct _Bind; - - /** - * @if maint - * Type of the function object returned from bind<R>(). - * @endif - */ - template<typename _Result, typename _Signature> - struct _Bind_result; - - /** - * @if maint - * Class template _Bind is always a bind expression. - * @endif - */ - template<typename _Signature> - struct is_bind_expression<_Bind<_Signature> > - { static const bool value = true; }; - - template<typename _Signature> - const bool is_bind_expression<_Bind<_Signature> >::value; - - /** - * @if maint - * Class template _Bind_result is always a bind expression. - * @endif - */ - template<typename _Result, typename _Signature> - struct is_bind_expression<_Bind_result<_Result, _Signature> > - { static const bool value = true; }; - - template<typename _Result, typename _Signature> - const bool is_bind_expression<_Bind_result<_Result, _Signature> >::value; - - /** - * @brief Exception class thrown when class template function's - * operator() is called with an empty target. - * - */ - class bad_function_call : public std::exception { }; - - /** - * @if maint - * The integral constant expression 0 can be converted into a - * pointer to this type. It is used by the function template to - * accept NULL pointers. - * @endif - */ - struct _M_clear_type; - - /** - * @if maint - * Trait identifying "location-invariant" types, meaning that the - * address of the object (or any of its members) will not escape. - * Also implies a trivial copy constructor and assignment operator. - * @endif - */ - template<typename _Tp> - struct __is_location_invariant - : integral_constant<bool, - (is_pointer<_Tp>::value - || is_member_pointer<_Tp>::value)> - { - }; - - class _Undefined_class; - - union _Nocopy_types - { - void* _M_object; - const void* _M_const_object; - void (*_M_function_pointer)(); - void (_Undefined_class::*_M_member_pointer)(); - }; - - union _Any_data { - void* _M_access() { return &_M_pod_data[0]; } - const void* _M_access() const { return &_M_pod_data[0]; } - - template<typename _Tp> _Tp& _M_access() - { return *static_cast<_Tp*>(_M_access()); } - - template<typename _Tp> const _Tp& _M_access() const - { return *static_cast<const _Tp*>(_M_access()); } - - _Nocopy_types _M_unused; - char _M_pod_data[sizeof(_Nocopy_types)]; - }; - - enum _Manager_operation - { - __get_type_info, - __get_functor_ptr, - __clone_functor, - __destroy_functor - }; - - /* Simple type wrapper that helps avoid annoying const problems - when casting between void pointers and pointers-to-pointers. */ - template<typename _Tp> - struct _Simple_type_wrapper - { - _Simple_type_wrapper(_Tp __value) : __value(__value) { } - - _Tp __value; - }; - - template<typename _Tp> - struct __is_location_invariant<_Simple_type_wrapper<_Tp> > - : __is_location_invariant<_Tp> - { - }; - - // Converts a reference to a function object into a callable - // function object. - template<typename _Functor> - inline _Functor& __callable_functor(_Functor& __f) { return __f; } - - template<typename _Member, typename _Class> - inline _Mem_fn<_Member _Class::*> - __callable_functor(_Member _Class::* &__p) - { return mem_fn(__p); } - - template<typename _Member, typename _Class> - inline _Mem_fn<_Member _Class::*> - __callable_functor(_Member _Class::* const &__p) - { return mem_fn(__p); } - - template<typename _Signature, typename _Functor> - class _Function_handler; - - template<typename _Signature> - class function; - - - /** - * @if maint - * Base class of all polymorphic function object wrappers. - * @endif - */ - class _Function_base - { - public: - static const std::size_t _M_max_size = sizeof(_Nocopy_types); - static const std::size_t _M_max_align = __alignof__(_Nocopy_types); - - template<typename _Functor> - class _Base_manager - { - protected: - static const bool __stored_locally = - (__is_location_invariant<_Functor>::value - && sizeof(_Functor) <= _M_max_size - && __alignof__(_Functor) <= _M_max_align - && (_M_max_align % __alignof__(_Functor) == 0)); - typedef integral_constant<bool, __stored_locally> _Local_storage; - - // Retrieve a pointer to the function object - static _Functor* _M_get_pointer(const _Any_data& __source) - { - const _Functor* __ptr = - __stored_locally? &__source._M_access<_Functor>() - /* have stored a pointer */ : __source._M_access<_Functor*>(); - return const_cast<_Functor*>(__ptr); - } - - // Clone a location-invariant function object that fits within - // an _Any_data structure. - static void - _M_clone(_Any_data& __dest, const _Any_data& __source, true_type) - { - new (__dest._M_access()) _Functor(__source._M_access<_Functor>()); - } - - // Clone a function object that is not location-invariant or - // that cannot fit into an _Any_data structure. - static void - _M_clone(_Any_data& __dest, const _Any_data& __source, false_type) - { - __dest._M_access<_Functor*>() = - new _Functor(*__source._M_access<_Functor*>()); - } - - // Destroying a location-invariant object may still require - // destruction. - static void - _M_destroy(_Any_data& __victim, true_type) - { - __victim._M_access<_Functor>().~_Functor(); - } - - // Destroying an object located on the heap. - static void - _M_destroy(_Any_data& __victim, false_type) - { - delete __victim._M_access<_Functor*>(); - } - - public: - static bool - _M_manager(_Any_data& __dest, const _Any_data& __source, - _Manager_operation __op) - { - switch (__op) { - case __get_type_info: - __dest._M_access<const type_info*>() = &typeid(_Functor); - break; - - case __get_functor_ptr: - __dest._M_access<_Functor*>() = _M_get_pointer(__source); - break; - - case __clone_functor: - _M_clone(__dest, __source, _Local_storage()); - break; - - case __destroy_functor: - _M_destroy(__dest, _Local_storage()); - break; - } - return false; - } - - static void - _M_init_functor(_Any_data& __functor, const _Functor& __f) - { - _M_init_functor(__functor, __f, _Local_storage()); - } - - template<typename _Signature> - static bool - _M_not_empty_function(const function<_Signature>& __f) - { - return __f; - } - - template<typename _Tp> - static bool - _M_not_empty_function(const _Tp*& __fp) - { - return __fp; - } - - template<typename _Class, typename _Tp> - static bool - _M_not_empty_function(_Tp _Class::* const& __mp) - { - return __mp; - } - - template<typename _Tp> - static bool - _M_not_empty_function(const _Tp&) - { - return true; - } - - private: - static void - _M_init_functor(_Any_data& __functor, const _Functor& __f, true_type) - { - new (__functor._M_access()) _Functor(__f); - } - - static void - _M_init_functor(_Any_data& __functor, const _Functor& __f, false_type) - { - __functor._M_access<_Functor*>() = new _Functor(__f); - } - }; - - template<typename _Functor> - class _Ref_manager : public _Base_manager<_Functor*> - { - typedef _Function_base::_Base_manager<_Functor*> _Base; - - public: - static bool - _M_manager(_Any_data& __dest, const _Any_data& __source, - _Manager_operation __op) - { - switch (__op) { - case __get_type_info: - __dest._M_access<const type_info*>() = &typeid(_Functor); - break; - - case __get_functor_ptr: - __dest._M_access<_Functor*>() = *_Base::_M_get_pointer(__source); - return is_const<_Functor>::value; - break; - - default: - _Base::_M_manager(__dest, __source, __op); - } - return false; - } - - static void - _M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f) - { - // TBD: Use address_of function instead - _Base::_M_init_functor(__functor, &__f.get()); - } - }; - - _Function_base() : _M_manager(0) { } - - ~_Function_base() - { - if (_M_manager) - { - _M_manager(_M_functor, _M_functor, __destroy_functor); - } - } - - - bool _M_empty() const { return !_M_manager; } - - typedef bool (*_Manager_type)(_Any_data&, const _Any_data&, - _Manager_operation); - - _Any_data _M_functor; - _Manager_type _M_manager; - }; - - // [3.7.2.7] null pointer comparisons - - /** - * @brief Compares a polymorphic function object wrapper against 0 - * (the NULL pointer). - * @returns @c true if the wrapper has no target, @c false otherwise - * - * This function will not throw an exception. - */ - template<typename _Signature> - inline bool - operator==(const function<_Signature>& __f, _M_clear_type*) - { - return !__f; - } - - /** - * @overload - */ - template<typename _Signature> - inline bool - operator==(_M_clear_type*, const function<_Signature>& __f) - { - return !__f; - } - - /** - * @brief Compares a polymorphic function object wrapper against 0 - * (the NULL pointer). - * @returns @c false if the wrapper has no target, @c true otherwise - * - * This function will not throw an exception. - */ - template<typename _Signature> - inline bool - operator!=(const function<_Signature>& __f, _M_clear_type*) - { - return __f; - } - - /** - * @overload - */ - template<typename _Signature> - inline bool - operator!=(_M_clear_type*, const function<_Signature>& __f) - { - return __f; - } - - // [3.7.2.8] specialized algorithms - - /** - * @brief Swap the targets of two polymorphic function object wrappers. - * - * This function will not throw an exception. - */ - template<typename _Signature> - inline void - swap(function<_Signature>& __x, function<_Signature>& __y) - { - __x.swap(__y); - } - -_GLIBCXX_END_NAMESPACE -} - -#define _GLIBCXX_JOIN(X,Y) _GLIBCXX_JOIN2( X , Y ) -#define _GLIBCXX_JOIN2(X,Y) _GLIBCXX_JOIN3(X,Y) -#define _GLIBCXX_JOIN3(X,Y) X##Y -#define _GLIBCXX_REPEAT_HEADER <tr1/functional_iterate.h> -#include <tr1/repeat.h> -#undef _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_JOIN3 -#undef _GLIBCXX_JOIN2 -#undef _GLIBCXX_JOIN - -#include <tr1/functional_hash.h> - -#endif diff --git a/contrib/libstdc++/include/tr1/functional_hash.h b/contrib/libstdc++/include/tr1/functional_hash.h deleted file mode 100644 index 3e592b45ab7ba..0000000000000 --- a/contrib/libstdc++/include/tr1/functional_hash.h +++ /dev/null @@ -1,232 +0,0 @@ -// TR1 functional -*- C++ -*- - -// Copyright (C) 2007 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. - -/** @file tr1/functional_hash.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _TR1_FUNCTIONAL_HASH_H -#define _TR1_FUNCTIONAL_HASH_H 1 - -#include <string> -#include <cmath> // for std::frexp - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // Definition of default hash function std::tr1::hash<>. The types for - // which std::tr1::hash<T> is defined is in clause 6.3.3. of the PDTR. - template<typename T> - struct hash; - -#define _TR1_hashtable_define_trivial_hash(_Tp) \ - template<> \ - struct hash<_Tp> \ - : public std::unary_function<_Tp, std::size_t> \ - { \ - std::size_t \ - operator()(_Tp __val) const \ - { return static_cast<std::size_t>(__val); } \ - } - - _TR1_hashtable_define_trivial_hash(bool); - _TR1_hashtable_define_trivial_hash(char); - _TR1_hashtable_define_trivial_hash(signed char); - _TR1_hashtable_define_trivial_hash(unsigned char); - _TR1_hashtable_define_trivial_hash(wchar_t); - _TR1_hashtable_define_trivial_hash(short); - _TR1_hashtable_define_trivial_hash(int); - _TR1_hashtable_define_trivial_hash(long); - _TR1_hashtable_define_trivial_hash(long long); - _TR1_hashtable_define_trivial_hash(unsigned short); - _TR1_hashtable_define_trivial_hash(unsigned int); - _TR1_hashtable_define_trivial_hash(unsigned long); - _TR1_hashtable_define_trivial_hash(unsigned long long); - -#undef _TR1_hashtable_define_trivial_hash - - template<typename _Tp> - struct hash<_Tp*> - : public std::unary_function<_Tp*, std::size_t> - { - std::size_t - operator()(_Tp* __p) const - { return reinterpret_cast<std::size_t>(__p); } - }; - - // Fowler / Noll / Vo (FNV) Hash (type FNV-1a) - // (used by the next specializations of std::tr1::hash<>) - - // Dummy generic implementation (for sizeof(size_t) != 4, 8). - template<std::size_t = sizeof(std::size_t)> - struct _Fnv_hash - { - static std::size_t - hash(const char* __first, std::size_t __length) - { - std::size_t __result = 0; - for (; __length > 0; --__length) - __result = (__result * 131) + *__first++; - return __result; - } - }; - - template<> - struct _Fnv_hash<4> - { - static std::size_t - hash(const char* __first, std::size_t __length) - { - std::size_t __result = static_cast<std::size_t>(2166136261UL); - for (; __length > 0; --__length) - { - __result ^= static_cast<std::size_t>(*__first++); - __result *= static_cast<std::size_t>(16777619UL); - } - return __result; - } - }; - - template<> - struct _Fnv_hash<8> - { - static std::size_t - hash(const char* __first, std::size_t __length) - { - std::size_t __result = - static_cast<std::size_t>(14695981039346656037ULL); - for (; __length > 0; --__length) - { - __result ^= static_cast<std::size_t>(*__first++); - __result *= static_cast<std::size_t>(1099511628211ULL); - } - return __result; - } - }; - - // XXX String and floating point hashes probably shouldn't be inline - // member functions, since are nontrivial. Once we have the framework - // for TR1 .cc files, these should go in one. - template<> - struct hash<std::string> - : public std::unary_function<std::string, std::size_t> - { - std::size_t - operator()(const std::string& __s) const - { return _Fnv_hash<>::hash(__s.data(), __s.length()); } - }; - -#ifdef _GLIBCXX_USE_WCHAR_T - template<> - struct hash<std::wstring> - : public std::unary_function<std::wstring, std::size_t> - { - std::size_t - operator()(const std::wstring& __s) const - { - return _Fnv_hash<>::hash(reinterpret_cast<const char*>(__s.data()), - __s.length() * sizeof(wchar_t)); - } - }; -#endif - - template<> - struct hash<float> - : public std::unary_function<float, std::size_t> - { - std::size_t - operator()(float __fval) const - { - std::size_t __result = 0; - - // 0 and -0 both hash to zero. - if (__fval != 0.0f) - __result = _Fnv_hash<>::hash(reinterpret_cast<const char*>(&__fval), - sizeof(__fval)); - return __result; - } - }; - - template<> - struct hash<double> - : public std::unary_function<double, std::size_t> - { - std::size_t - operator()(double __dval) const - { - std::size_t __result = 0; - - // 0 and -0 both hash to zero. - if (__dval != 0.0) - __result = _Fnv_hash<>::hash(reinterpret_cast<const char*>(&__dval), - sizeof(__dval)); - return __result; - } - }; - - // For long double, careful with random padding bits (e.g., on x86, - // 10 bytes -> 12 bytes) and resort to frexp. - template<> - struct hash<long double> - : public std::unary_function<long double, std::size_t> - { - std::size_t - operator()(long double __ldval) const - { - std::size_t __result = 0; - - int __exponent; - __ldval = std::frexp(__ldval, &__exponent); - __ldval = __ldval < 0.0l ? -(__ldval + 0.5l) : __ldval; - - const long double __mult = - std::numeric_limits<std::size_t>::max() + 1.0l; - __ldval *= __mult; - - // Try to use all the bits of the mantissa (really necessary only - // on 32-bit targets, at least for 80-bit floating point formats). - const std::size_t __hibits = (std::size_t)__ldval; - __ldval = (__ldval - (long double)__hibits) * __mult; - - const std::size_t __coeff = - (std::numeric_limits<std::size_t>::max() - / std::numeric_limits<long double>::max_exponent); - - __result = __hibits + (std::size_t)__ldval + __coeff * __exponent; - - return __result; - } - }; - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/functional_iterate.h b/contrib/libstdc++/include/tr1/functional_iterate.h deleted file mode 100644 index c9c1e83346145..0000000000000 --- a/contrib/libstdc++/include/tr1/functional_iterate.h +++ /dev/null @@ -1,922 +0,0 @@ -// TR1 functional -*- C++ -*- - -// Copyright (C) 2005, 2006 Free Software Foundation, Inc. -// Written by Douglas Gregor <doug.gregor -at- gmail.com> -// -// 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. - -/** @file tr1/functional_iterate.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - struct _Weak_result_type_impl<_Res(_GLIBCXX_TEMPLATE_ARGS)> - { - typedef _Res result_type; - }; - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - struct _Weak_result_type_impl<_Res (&)(_GLIBCXX_TEMPLATE_ARGS)> - { - typedef _Res result_type; - }; - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - struct _Weak_result_type_impl<_Res (*)(_GLIBCXX_TEMPLATE_ARGS)> - { - typedef _Res result_type; - }; - -#if _GLIBCXX_NUM_ARGS > 0 -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - struct _Weak_result_type_impl< - _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED)> - { - typedef _Res result_type; - }; - -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - struct _Weak_result_type_impl< - _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const> - { - typedef _Res result_type; - }; - -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - struct _Weak_result_type_impl< - _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile> - { - typedef _Res result_type; - }; - -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - struct _Weak_result_type_impl< - _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile> - { - typedef _Res result_type; - }; -#endif - -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - class result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)> - : public _Result_of_impl< - _Has_result_type<_Weak_result_type<_Functor> >::value, - _Functor(_GLIBCXX_TEMPLATE_ARGS)> - { }; - -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - struct _Result_of_impl<true, _Functor(_GLIBCXX_TEMPLATE_ARGS)> - { - typedef typename _Weak_result_type<_Functor>::result_type type; - }; - -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - struct _Result_of_impl<false, _Functor(_GLIBCXX_TEMPLATE_ARGS)> - { -#if _GLIBCXX_NUM_ARGS > 0 - typedef typename _Functor - ::template result<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type type; -#else - typedef void type; -#endif - }; - -/** - * @if maint - * Invoke a function object, which may be either a member pointer or a - * function object. The first parameter will tell which. - * @endif - */ -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - inline - typename __gnu_cxx::__enable_if<(!is_member_pointer<_Functor>::value - && !is_function<_Functor>::value - && !is_function<typename remove_pointer<_Functor>::type>::value), - typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type>::__type - __invoke(_Functor& __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS) - { - return __f(_GLIBCXX_ARGS); - } - -#if _GLIBCXX_NUM_ARGS > 0 -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - inline - typename __gnu_cxx::__enable_if<(is_member_pointer<_Functor>::value - && !is_function<_Functor>::value - && !is_function<typename remove_pointer<_Functor>::type>::value), - typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type - >::__type - __invoke(_Functor& __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS) - { - return mem_fn(__f)(_GLIBCXX_ARGS); - } -#endif - -// To pick up function references (that will become function pointers) -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - inline - typename __gnu_cxx::__enable_if<(is_pointer<_Functor>::value - && is_function<typename remove_pointer<_Functor>::type>::value), - typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type - >::__type - __invoke(_Functor __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS) - { - return __f(_GLIBCXX_ARGS); - } - -/** - * @if maint - * Implementation of reference_wrapper::operator() - * @endif -*/ -#if _GLIBCXX_NUM_ARGS > 0 -template<typename _Tp> -template<_GLIBCXX_TEMPLATE_PARAMS> - typename result_of< - typename reference_wrapper<_Tp>::_M_func_type(_GLIBCXX_TEMPLATE_ARGS)>::type - reference_wrapper<_Tp>::operator()(_GLIBCXX_REF_PARAMS) const - { - return __invoke(get(), _GLIBCXX_ARGS); - } -#endif - -#if _GLIBCXX_NUM_ARGS > 0 -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED)> -#if _GLIBCXX_NUM_ARGS == 1 - : public unary_function<_Class*, _Res> -#elif _GLIBCXX_NUM_ARGS == 2 - : public binary_function<_Class*, _T1, _Res> -#endif - { - typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED); - - template<typename _Tp> - _Res - _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - template<typename _Tp> - _Res - _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - public: - typedef _Res result_type; - - explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { } - - // Handle objects - _Res - operator()(_Class& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle pointers - _Res - operator()(_Class* __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle smart pointers, references and pointers to derived - template<typename _Tp> - _Res - operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { - return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_ARGS_SHIFTED); - } - - private: - _Functor __pmf; - }; - -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const> -#if _GLIBCXX_NUM_ARGS == 1 - : public unary_function<const _Class*, _Res> -#elif _GLIBCXX_NUM_ARGS == 2 - : public binary_function<const _Class*, _T1, _Res> -#endif - { - typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const; - - template<typename _Tp> - _Res - _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - template<typename _Tp> - _Res - _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - public: - typedef _Res result_type; - - explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { } - - // Handle objects - _Res - operator()(const _Class& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle pointers - _Res - operator()(const _Class* __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle smart pointers, references and pointers to derived - template<typename _Tp> - _Res - operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { - return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_ARGS_SHIFTED); - } - - private: - _Functor __pmf; - }; - -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile> -#if _GLIBCXX_NUM_ARGS == 1 - : public unary_function<volatile _Class*, _Res> -#elif _GLIBCXX_NUM_ARGS == 2 - : public binary_function<volatile _Class*, _T1, _Res> -#endif - { - typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile; - - template<typename _Tp> - _Res - _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - template<typename _Tp> - _Res - _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - public: - typedef _Res result_type; - - explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { } - - // Handle objects - _Res - operator()(volatile _Class& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle pointers - _Res - operator()(volatile _Class* __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle smart pointers, references and pointers to derived - template<typename _Tp> - _Res - operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { - return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_ARGS_SHIFTED); - } - private: - _Functor __pmf; - }; - -template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - class _Mem_fn<_Res(_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile> -#if _GLIBCXX_NUM_ARGS == 1 - : public unary_function<const volatile _Class*, _Res> -#elif _GLIBCXX_NUM_ARGS == 2 - : public binary_function<const volatile _Class*, _T1, _Res> -#endif - { - typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) - const volatile; - - template<typename _Tp> - _Res - _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - template<typename _Tp> - _Res - _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - public: - typedef _Res result_type; - - explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { } - - // Handle objects - _Res - operator()(const volatile _Class& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle pointers - _Res - operator()(const volatile _Class* __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); } - - // Handle smart pointers, references and pointers to derived - template<typename _Tp> - _Res - operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_PARAMS_SHIFTED) const - { - return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED - _GLIBCXX_ARGS_SHIFTED); - } - - private: - _Functor __pmf; - }; -#endif - -#if _GLIBCXX_NUM_ARGS > 0 -namespace placeholders -{ -namespace -{ - _Placeholder<_GLIBCXX_NUM_ARGS> _GLIBCXX_JOIN(_,_GLIBCXX_NUM_ARGS); -} // anonymous namespace -} -#endif - -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class _Bind<_Functor(_GLIBCXX_TEMPLATE_ARGS)> - : public _Weak_result_type<_Functor> -{ - typedef _Bind __self_type; - - _Functor _M_f; - _GLIBCXX_BIND_MEMBERS - - public: -#if _GLIBCXX_NUM_ARGS == 0 - explicit -#endif - _Bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS) - : _M_f(__f) _GLIBCXX_COMMA _GLIBCXX_BIND_MEMBERS_INIT { } - -#define _GLIBCXX_BIND_REPEAT_HEADER <tr1/bind_iterate.h> -#include <tr1/bind_repeat.h> -#undef _GLIBCXX_BIND_REPEAT_HEADER -}; - -template<typename _Result, typename _Functor - _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class _Bind_result<_Result, _Functor(_GLIBCXX_TEMPLATE_ARGS)> -{ - _Functor _M_f; - _GLIBCXX_BIND_MEMBERS - - public: - typedef _Result result_type; - -#if _GLIBCXX_NUM_ARGS == 0 - explicit -#endif - _Bind_result(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS) - : _M_f(__f) _GLIBCXX_COMMA _GLIBCXX_BIND_MEMBERS_INIT { } - -#define _GLIBCXX_BIND_REPEAT_HEADER <tr1/bind_iterate.h> -#define _GLIBCXX_BIND_HAS_RESULT_TYPE -#include <tr1/bind_repeat.h> -#undef _GLIBCXX_BIND_HAS_RESULT_TYPE -#undef _GLIBCXX_BIND_REPEAT_HEADER -}; - -// Handle arbitrary function objects -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -inline -_Bind<typename _Maybe_wrap_member_pointer<_Functor>::type - (_GLIBCXX_TEMPLATE_ARGS)> -bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS) -{ - typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type; - typedef typename __maybe_type::type __functor_type; - typedef _Bind<__functor_type(_GLIBCXX_TEMPLATE_ARGS)> __result_type; - return __result_type(__maybe_type::__do_wrap(__f) - _GLIBCXX_COMMA _GLIBCXX_ARGS); -} - -template<typename _Result, typename _Functor - _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -inline -_Bind_result<_Result, - typename _Maybe_wrap_member_pointer<_Functor>::type - (_GLIBCXX_TEMPLATE_ARGS)> -bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS) -{ - typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type; - typedef typename __maybe_type::type __functor_type; - typedef _Bind_result<_Result, __functor_type(_GLIBCXX_TEMPLATE_ARGS)> - __result_type; - return __result_type(__maybe_type::__do_wrap(__f) - _GLIBCXX_COMMA _GLIBCXX_ARGS); -} - -template<typename _Res, typename _Functor _GLIBCXX_COMMA - _GLIBCXX_TEMPLATE_PARAMS> -class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), _Functor> - : public _Function_base::_Base_manager<_Functor> -{ - typedef _Function_base::_Base_manager<_Functor> _Base; - - public: - static _Res - _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS) - { - return (*_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS); - } -}; - -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Functor> - : public _Function_base::_Base_manager<_Functor> -{ - typedef _Function_base::_Base_manager<_Functor> _Base; - - public: - static void - _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS) - { - (*_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS); - } -}; - -template<typename _Res, typename _Functor _GLIBCXX_COMMA - _GLIBCXX_TEMPLATE_PARAMS> -class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), - reference_wrapper<_Functor> > - : public _Function_base::_Ref_manager<_Functor> -{ - typedef _Function_base::_Ref_manager<_Functor> _Base; - - public: - static _Res - _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS) - { - return __callable_functor(**_Base::_M_get_pointer(__functor)) - (_GLIBCXX_ARGS); - } -}; - -template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), - reference_wrapper<_Functor> > - : public _Function_base::_Ref_manager<_Functor> -{ - typedef _Function_base::_Ref_manager<_Functor> _Base; - - public: - static void - _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS) - { - __callable_functor(**_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS); - } -}; - -template<typename _Class, typename _Member, typename _Res - _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*> - : public _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*> -{ - typedef _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*> - _Base; - - public: - static _Res - _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS) - { - return std::tr1::mem_fn(_Base::_M_get_pointer(__functor)->__value) - (_GLIBCXX_ARGS); - } -}; - -template<typename _Class, typename _Member - _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*> - : public _Function_base::_Base_manager< - _Simple_type_wrapper< _Member _Class::* > > -{ - typedef _Member _Class::* _Functor; - typedef _Simple_type_wrapper< _Functor > _Wrapper; - typedef _Function_base::_Base_manager<_Wrapper> _Base; - - public: - static bool - _M_manager(_Any_data& __dest, const _Any_data& __source, - _Manager_operation __op) - { - switch (__op) { - case __get_type_info: - __dest._M_access<const type_info*>() = &typeid(_Functor); - break; - - case __get_functor_ptr: - __dest._M_access<_Functor*>() = - &_Base::_M_get_pointer(__source)->__value; - break; - - default: - _Base::_M_manager(__dest, __source, __op); - } - return false; - } - - static void - _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS) - { - std::tr1::mem_fn(_Base::_M_get_pointer(__functor)->__value) - (_GLIBCXX_ARGS); - } -}; - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class function<_Res(_GLIBCXX_TEMPLATE_ARGS)> -#if _GLIBCXX_NUM_ARGS == 1 - : public unary_function<_T1, _Res>, private _Function_base -#elif _GLIBCXX_NUM_ARGS == 2 - : public binary_function<_T1, _T2, _Res>, private _Function_base -#else - : private _Function_base -#endif -{ - /** - * @if maint - * This class is used to implement the safe_bool idiom. - * @endif - */ - struct _Hidden_type - { - _Hidden_type* _M_bool; - }; - - /** - * @if maint - * This typedef is used to implement the safe_bool idiom. - * @endif - */ - typedef _Hidden_type* _Hidden_type::* _Safe_bool; - - typedef _Res _Signature_type(_GLIBCXX_TEMPLATE_ARGS); - - struct _Useless {}; - - public: - typedef _Res result_type; - - // [3.7.2.1] construct/copy/destroy - - /** - * @brief Default construct creates an empty function call wrapper. - * @post @c !(bool)*this - */ - function() : _Function_base() { } - - /** - * @brief Default construct creates an empty function call wrapper. - * @post @c !(bool)*this - */ - function(_M_clear_type*) : _Function_base() { } - - /** - * @brief %Function copy constructor. - * @param x A %function object with identical call signature. - * @pre @c (bool)*this == (bool)x - * - * The newly-created %function contains a copy of the target of @a - * x (if it has one). - */ - function(const function& __x); - - /** - * @brief Builds a %function that targets a copy of the incoming - * function object. - * @param f A %function object that is callable with parameters of - * type @c T1, @c T2, ..., @c TN and returns a value convertible - * to @c Res. - * - * The newly-created %function object will target a copy of @a - * f. If @a f is @c reference_wrapper<F>, then this function - * object will contain a reference to the function object @c - * f.get(). If @a f is a NULL function pointer or NULL - * pointer-to-member, the newly-created object will be empty. - * - * If @a f is a non-NULL function pointer or an object of type @c - * reference_wrapper<F>, this function will not throw. - */ - template<typename _Functor> - function(_Functor __f, - typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value, _Useless>::__type = _Useless()); - - /** - * @brief %Function assignment operator. - * @param x A %function with identical call signature. - * @post @c (bool)*this == (bool)x - * @returns @c *this - * - * The target of @a x is copied to @c *this. If @a x has no - * target, then @c *this will be empty. - * - * If @a x targets a function pointer or a reference to a function - * object, then this operation will not throw an exception. - */ - function& operator=(const function& __x) - { - function(__x).swap(*this); - return *this; - } - - /** - * @brief %Function assignment to zero. - * @post @c !(bool)*this - * @returns @c *this - * - * The target of @a *this is deallocated, leaving it empty. - */ - function& operator=(_M_clear_type*) - { - if (_M_manager) { - _M_manager(_M_functor, _M_functor, __destroy_functor); - _M_manager = 0; - _M_invoker = 0; - } - return *this; - } - - /** - * @brief %Function assignment to a new target. - * @param f A %function object that is callable with parameters of - * type @c T1, @c T2, ..., @c TN and returns a value convertible - * to @c Res. - * @return @c *this - * - * This %function object wrapper will target a copy of @a - * f. If @a f is @c reference_wrapper<F>, then this function - * object will contain a reference to the function object @c - * f.get(). If @a f is a NULL function pointer or NULL - * pointer-to-member, @c this object will be empty. - * - * If @a f is a non-NULL function pointer or an object of type @c - * reference_wrapper<F>, this function will not throw. - */ - template<typename _Functor> - typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value, function&>::__type - operator=(_Functor __f) - { - function(__f).swap(*this); - return *this; - } - - // [3.7.2.2] function modifiers - - /** - * @brief Swap the targets of two %function objects. - * @param f A %function with identical call signature. - * - * Swap the targets of @c this function object and @a f. This - * function will not throw an exception. - */ - void swap(function& __x) - { - _Any_data __old_functor = _M_functor; - _M_functor = __x._M_functor; - __x._M_functor = __old_functor; - _Manager_type __old_manager = _M_manager; - _M_manager = __x._M_manager; - __x._M_manager = __old_manager; - _Invoker_type __old_invoker = _M_invoker; - _M_invoker = __x._M_invoker; - __x._M_invoker = __old_invoker; - } - - // [3.7.2.3] function capacity - - /** - * @brief Determine if the %function wrapper has a target. - * - * @return @c true when this %function object contains a target, - * or @c false when it is empty. - * - * This function will not throw an exception. - */ - operator _Safe_bool() const - { - if (_M_empty()) - { - return 0; - } - else - { - return &_Hidden_type::_M_bool; - } - } - - // [3.7.2.4] function invocation - - /** - * @brief Invokes the function targeted by @c *this. - * @returns the result of the target. - * @throws bad_function_call when @c !(bool)*this - * - * The function call operator invokes the target function object - * stored by @c this. - */ - _Res operator()(_GLIBCXX_PARAMS) const; - - // [3.7.2.5] function target access - /** - * @brief Determine the type of the target of this function object - * wrapper. - * - * @returns the type identifier of the target function object, or - * @c typeid(void) if @c !(bool)*this. - * - * This function will not throw an exception. - */ - const type_info& target_type() const; - - /** - * @brief Access the stored target function object. - * - * @return Returns a pointer to the stored target function object, - * if @c typeid(Functor).equals(target_type()); otherwise, a NULL - * pointer. - * - * This function will not throw an exception. - */ - template<typename _Functor> _Functor* target(); - - /** - * @overload - */ - template<typename _Functor> const _Functor* target() const; - - private: - // [3.7.2.6] undefined operators - template<typename _Function> - void operator==(const function<_Function>&) const; - template<typename _Function> - void operator!=(const function<_Function>&) const; - - typedef _Res (*_Invoker_type)(const _Any_data& _GLIBCXX_COMMA - _GLIBCXX_PARAMS); - _Invoker_type _M_invoker; -}; - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::function(const function& __x) - : _Function_base() - { - if (__x) { - _M_invoker = __x._M_invoker; - _M_manager = __x._M_manager; - __x._M_manager(_M_functor, __x._M_functor, __clone_functor); - } - } - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -template<typename _Functor> - function<_Res(_GLIBCXX_TEMPLATE_ARGS)> - ::function(_Functor __f, - typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value, _Useless>::__type) - : _Function_base() -{ - typedef _Function_handler<_Signature_type, _Functor> _My_handler; - if (_My_handler::_M_not_empty_function(__f)) { - _M_invoker = &_My_handler::_M_invoke; - _M_manager = &_My_handler::_M_manager; - _My_handler::_M_init_functor(_M_functor, __f); - } -} - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - _Res - function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::operator()(_GLIBCXX_PARAMS) const - { - if (_M_empty()) - { -#if __EXCEPTIONS - throw bad_function_call(); -#else - std::abort(); -#endif - } - return _M_invoker(_M_functor _GLIBCXX_COMMA _GLIBCXX_ARGS); - } - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - const type_info& - function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target_type() const - { - if (_M_manager) - { - _Any_data __typeinfo_result; - _M_manager(__typeinfo_result, _M_functor, __get_type_info); - return *__typeinfo_result._M_access<const type_info*>(); - } - else - { - return typeid(void); - } - } - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -template<typename _Functor> - _Functor* - function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target() - { - if (typeid(_Functor) == target_type() && _M_manager) - { - _Any_data __ptr; - if (_M_manager(__ptr, _M_functor, __get_functor_ptr) - && !is_const<_Functor>::value) - return 0; - else - return __ptr._M_access<_Functor*>(); - } - else - { - return 0; - } - } - -template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -template<typename _Functor> - const _Functor* - function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target() const - { - if (typeid(_Functor) == target_type() && _M_manager) - { - _Any_data __ptr; - _M_manager(__ptr, _M_functor, __get_functor_ptr); - return __ptr._M_access<const _Functor*>(); - } - else - { - return 0; - } - } - -_GLIBCXX_END_NAMESPACE -} diff --git a/contrib/libstdc++/include/tr1/hashtable b/contrib/libstdc++/include/tr1/hashtable deleted file mode 100644 index 0d760eed1d57d..0000000000000 --- a/contrib/libstdc++/include/tr1/hashtable +++ /dev/null @@ -1,1182 +0,0 @@ -// Internal header for TR1 unordered_set and unordered_map -*- C++ -*- - -// Copyright (C) 2005, 2006 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. - -/** @file tr1/hashtable - * This is a TR1 C++ Library header. - */ - -// This header file defines std::tr1::hashtable, which is used to -// implement std::tr1::unordered_set, std::tr1::unordered_map, -// std::tr1::unordered_multiset, and std::tr1::unordered_multimap. -// hashtable has many template parameters, partly to accommodate -// the differences between those four classes and partly to -// accommodate policy choices that go beyond what TR1 calls for. - -// Class template hashtable attempts to encapsulate all reasonable -// variation among hash tables that use chaining. It does not handle -// open addressing. - -// References: -// M. Austern, "A Proposal to Add Hash Tables to the Standard -// Library (revision 4)," WG21 Document N1456=03-0039, 2003. -// D. E. Knuth, The Art of Computer Programming, v. 3, Sorting and Searching. -// A. Tavori and V. Dreizin, "Policy-Based Data Structures", 2004. -// http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html - -#ifndef _TR1_HASHTABLE -#define _TR1_HASHTABLE 1 - -#include <utility> // For std::pair -#include <memory> -#include <iterator> -#include <cstddef> -#include <cstdlib> -#include <cmath> -#include <bits/functexcept.h> -#include <tr1/type_traits> // For true_type and false_type -#include <tr1/hashtable_policy.h> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // Class template _Hashtable, class definition. - - // Meaning of class template _Hashtable's template parameters - - // _Key and _Value: arbitrary CopyConstructible types. - - // _Allocator: an allocator type ([lib.allocator.requirements]) whose - // value type is Value. As a conforming extension, we allow for - // value type != Value. - - // _ExtractKey: function object that takes a object of type Value - // and returns a value of type _Key. - - // _Equal: function object that takes two objects of type k and returns - // a bool-like value that is true if the two objects are considered equal. - - // _H1: the hash function. A unary function object with argument type - // Key and result type size_t. Return values should be distributed - // over the entire range [0, numeric_limits<size_t>:::max()]. - - // _H2: the range-hashing function (in the terminology of Tavori and - // Dreizin). A binary function object whose argument types and result - // type are all size_t. Given arguments r and N, the return value is - // in the range [0, N). - - // _Hash: the ranged hash function (Tavori and Dreizin). A binary function - // whose argument types are _Key and size_t and whose result type is - // size_t. Given arguments k and N, the return value is in the range - // [0, N). Default: hash(k, N) = h2(h1(k), N). If _Hash is anything other - // than the default, _H1 and _H2 are ignored. - - // _RehashPolicy: Policy class with three members, all of which govern - // the bucket count. _M_next_bkt(n) returns a bucket count no smaller - // than n. _M_bkt_for_elements(n) returns a bucket count appropriate - // for an element count of n. _M_need_rehash(n_bkt, n_elt, n_ins) - // determines whether, if the current bucket count is n_bkt and the - // current element count is n_elt, we need to increase the bucket - // count. If so, returns make_pair(true, n), where n is the new - // bucket count. If not, returns make_pair(false, <anything>). - - // ??? Right now it is hard-wired that the number of buckets never - // shrinks. Should we allow _RehashPolicy to change that? - - // __cache_hash_code: bool. true if we store the value of the hash - // function along with the value. This is a time-space tradeoff. - // Storing it may improve lookup speed by reducing the number of times - // we need to call the Equal function. - - // __constant_iterators: bool. true if iterator and const_iterator are - // both constant iterator types. This is true for unordered_set and - // unordered_multiset, false for unordered_map and unordered_multimap. - - // __unique_keys: bool. true if the return value of _Hashtable::count(k) - // is always at most one, false if it may be an arbitrary number. This - // true for unordered_set and unordered_map, false for unordered_multiset - // and unordered_multimap. - - template<typename _Key, typename _Value, typename _Allocator, - typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, - typename _RehashPolicy, - bool __cache_hash_code, - bool __constant_iterators, - bool __unique_keys> - class _Hashtable - : public __detail::_Rehash_base<_RehashPolicy, - _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, - _Equal, _H1, _H2, _Hash, - _RehashPolicy, - __cache_hash_code, - __constant_iterators, - __unique_keys> >, - public __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal, - _H1, _H2, _Hash, __cache_hash_code>, - public __detail::_Map_base<_Key, _Value, _ExtractKey, __unique_keys, - _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, - _Equal, _H1, _H2, _Hash, - _RehashPolicy, - __cache_hash_code, - __constant_iterators, - __unique_keys> > - { - public: - typedef _Allocator allocator_type; - typedef _Value value_type; - typedef _Key key_type; - typedef _Equal key_equal; - // mapped_type, if present, comes from _Map_base. - // hasher, if present, comes from _Hash_code_base. - typedef typename _Allocator::difference_type difference_type; - typedef typename _Allocator::size_type size_type; - typedef typename _Allocator::reference reference; - typedef typename _Allocator::const_reference const_reference; - - typedef __detail::_Node_iterator<value_type, __constant_iterators, - __cache_hash_code> - local_iterator; - typedef __detail::_Node_const_iterator<value_type, - __constant_iterators, - __cache_hash_code> - const_local_iterator; - - typedef __detail::_Hashtable_iterator<value_type, __constant_iterators, - __cache_hash_code> - iterator; - typedef __detail::_Hashtable_const_iterator<value_type, - __constant_iterators, - __cache_hash_code> - const_iterator; - - template<typename _Key2, typename _Pair, typename _Hashtable> - friend struct __detail::_Map_base; - - private: - typedef __detail::_Hash_node<_Value, __cache_hash_code> _Node; - typedef typename _Allocator::template rebind<_Node>::other - _Node_allocator_type; - typedef typename _Allocator::template rebind<_Node*>::other - _Bucket_allocator_type; - - typedef typename _Allocator::template rebind<_Value>::other - _Value_allocator_type; - - _Node_allocator_type _M_node_allocator; - _Node** _M_buckets; - size_type _M_bucket_count; - size_type _M_element_count; - _RehashPolicy _M_rehash_policy; - - _Node* - _M_allocate_node(const value_type& __v); - - void - _M_deallocate_node(_Node* __n); - - void - _M_deallocate_nodes(_Node**, size_type); - - _Node** - _M_allocate_buckets(size_type __n); - - void - _M_deallocate_buckets(_Node**, size_type __n); - - public: - // Constructor, destructor, assignment, swap - _Hashtable(size_type __bucket_hint, - const _H1&, const _H2&, const _Hash&, - const _Equal&, const _ExtractKey&, - const allocator_type&); - - template<typename _InputIterator> - _Hashtable(_InputIterator __first, _InputIterator __last, - size_type __bucket_hint, - const _H1&, const _H2&, const _Hash&, - const _Equal&, const _ExtractKey&, - const allocator_type&); - - _Hashtable(const _Hashtable&); - - _Hashtable& - operator=(const _Hashtable&); - - ~_Hashtable(); - - void swap(_Hashtable&); - - // Basic container operations - iterator - begin() - { - iterator __i(_M_buckets); - if (!__i._M_cur_node) - __i._M_incr_bucket(); - return __i; - } - - const_iterator - begin() const - { - const_iterator __i(_M_buckets); - if (!__i._M_cur_node) - __i._M_incr_bucket(); - return __i; - } - - iterator - end() - { return iterator(_M_buckets + _M_bucket_count); } - - const_iterator - end() const - { return const_iterator(_M_buckets + _M_bucket_count); } - - size_type - size() const - { return _M_element_count; } - - bool - empty() const - { return size() == 0; } - - allocator_type - get_allocator() const - { return allocator_type(_M_node_allocator); } - - _Value_allocator_type - _M_get_Value_allocator() const - { return _Value_allocator_type(_M_node_allocator); } - - size_type - max_size() const - { return _M_get_Value_allocator().max_size(); } - - // Observers - key_equal - key_eq() const - { return this->_M_eq; } - - // hash_function, if present, comes from _Hash_code_base. - - // Bucket operations - size_type - bucket_count() const - { return _M_bucket_count; } - - size_type - max_bucket_count() const - { return max_size(); } - - size_type - bucket_size(size_type __n) const - { return std::distance(begin(__n), end(__n)); } - - size_type - bucket(const key_type& __k) const - { - return this->_M_bucket_index(__k, this->_M_hash_code(__k), - bucket_count()); - } - - local_iterator - begin(size_type __n) - { return local_iterator(_M_buckets[__n]); } - - local_iterator - end(size_type) - { return local_iterator(0); } - - const_local_iterator - begin(size_type __n) const - { return const_local_iterator(_M_buckets[__n]); } - - const_local_iterator - end(size_type) const - { return const_local_iterator(0); } - - float - load_factor() const - { - return static_cast<float>(size()) / static_cast<float>(bucket_count()); - } - - // max_load_factor, if present, comes from _Rehash_base. - - // Generalization of max_load_factor. Extension, not found in TR1. Only - // useful if _RehashPolicy is something other than the default. - const _RehashPolicy& - __rehash_policy() const - { return _M_rehash_policy; } - - void - __rehash_policy(const _RehashPolicy&); - - // Lookup. - iterator - find(const key_type& __k); - - const_iterator - find(const key_type& __k) const; - - size_type - count(const key_type& __k) const; - - std::pair<iterator, iterator> - equal_range(const key_type& __k); - - std::pair<const_iterator, const_iterator> - equal_range(const key_type& __k) const; - - private: // Find, insert and erase helper functions - // ??? This dispatching is a workaround for the fact that we don't - // have partial specialization of member templates; it would be - // better to just specialize insert on __unique_keys. There may be a - // cleaner workaround. - typedef typename __gnu_cxx::__conditional_type<__unique_keys, - std::pair<iterator, bool>, iterator>::__type - _Insert_Return_Type; - - typedef typename __gnu_cxx::__conditional_type<__unique_keys, - std::_Select1st<_Insert_Return_Type>, - std::_Identity<_Insert_Return_Type> - >::__type - _Insert_Conv_Type; - - _Node* - _M_find_node(_Node*, const key_type&, - typename _Hashtable::_Hash_code_type) const; - - iterator - _M_insert_bucket(const value_type&, size_type, - typename _Hashtable::_Hash_code_type); - - std::pair<iterator, bool> - _M_insert(const value_type&, std::tr1::true_type); - - iterator - _M_insert(const value_type&, std::tr1::false_type); - - void - _M_erase_node(_Node*, _Node**); - - public: - // Insert and erase - _Insert_Return_Type - insert(const value_type& __v) - { return _M_insert(__v, std::tr1::integral_constant<bool, - __unique_keys>()); } - - iterator - insert(iterator, const value_type& __v) - { return iterator(_Insert_Conv_Type()(this->insert(__v))); } - - const_iterator - insert(const_iterator, const value_type& __v) - { return const_iterator(_Insert_Conv_Type()(this->insert(__v))); } - - template<typename _InputIterator> - void - insert(_InputIterator __first, _InputIterator __last); - - iterator - erase(iterator); - - const_iterator - erase(const_iterator); - - size_type - erase(const key_type&); - - iterator - erase(iterator, iterator); - - const_iterator - erase(const_iterator, const_iterator); - - void - clear(); - - // Set number of buckets to be appropriate for container of n element. - void rehash(size_type __n); - - private: - // Unconditionally change size of bucket array to n. - void _M_rehash(size_type __n); - }; - - - // Definitions of class template _Hashtable's out-of-line member functions. - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::_Node* - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_allocate_node(const value_type& __v) - { - _Node* __n = _M_node_allocator.allocate(1); - try - { - _M_get_Value_allocator().construct(&__n->_M_v, __v); - __n->_M_next = 0; - return __n; - } - catch(...) - { - _M_node_allocator.deallocate(__n, 1); - __throw_exception_again; - } - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_deallocate_node(_Node* __n) - { - _M_get_Value_allocator().destroy(&__n->_M_v); - _M_node_allocator.deallocate(__n, 1); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_deallocate_nodes(_Node** __array, size_type __n) - { - for (size_type __i = 0; __i < __n; ++__i) - { - _Node* __p = __array[__i]; - while (__p) - { - _Node* __tmp = __p; - __p = __p->_M_next; - _M_deallocate_node(__tmp); - } - __array[__i] = 0; - } - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::_Node** - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_allocate_buckets(size_type __n) - { - _Bucket_allocator_type __alloc(_M_node_allocator); - - // We allocate one extra bucket to hold a sentinel, an arbitrary - // non-null pointer. Iterator increment relies on this. - _Node** __p = __alloc.allocate(__n + 1); - std::fill(__p, __p + __n, (_Node*) 0); - __p[__n] = reinterpret_cast<_Node*>(0x1000); - return __p; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_deallocate_buckets(_Node** __p, size_type __n) - { - _Bucket_allocator_type __alloc(_M_node_allocator); - __alloc.deallocate(__p, __n + 1); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _Hashtable(size_type __bucket_hint, - const _H1& __h1, const _H2& __h2, const _Hash& __h, - const _Equal& __eq, const _ExtractKey& __exk, - const allocator_type& __a) - : __detail::_Rehash_base<_RehashPolicy, _Hashtable>(), - __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal, - _H1, _H2, _Hash, __chc>(__exk, __eq, - __h1, __h2, __h), - __detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(), - _M_node_allocator(__a), - _M_bucket_count(0), - _M_element_count(0), - _M_rehash_policy() - { - _M_bucket_count = _M_rehash_policy._M_next_bkt(__bucket_hint); - _M_buckets = _M_allocate_buckets(_M_bucket_count); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - template<typename _InputIterator> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _Hashtable(_InputIterator __f, _InputIterator __l, - size_type __bucket_hint, - const _H1& __h1, const _H2& __h2, const _Hash& __h, - const _Equal& __eq, const _ExtractKey& __exk, - const allocator_type& __a) - : __detail::_Rehash_base<_RehashPolicy, _Hashtable>(), - __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal, - _H1, _H2, _Hash, __chc>(__exk, __eq, - __h1, __h2, __h), - __detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(), - _M_node_allocator(__a), - _M_bucket_count(0), - _M_element_count(0), - _M_rehash_policy() - { - _M_bucket_count = std::max(_M_rehash_policy._M_next_bkt(__bucket_hint), - _M_rehash_policy. - _M_bkt_for_elements(__detail:: - __distance_fw(__f, - __l))); - _M_buckets = _M_allocate_buckets(_M_bucket_count); - try - { - for (; __f != __l; ++__f) - this->insert(*__f); - } - catch(...) - { - clear(); - _M_deallocate_buckets(_M_buckets, _M_bucket_count); - __throw_exception_again; - } - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _Hashtable(const _Hashtable& __ht) - : __detail::_Rehash_base<_RehashPolicy, _Hashtable>(__ht), - __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal, - _H1, _H2, _Hash, __chc>(__ht), - __detail::_Map_base<_Key, _Value, _ExtractKey, __uk, _Hashtable>(__ht), - _M_node_allocator(__ht._M_node_allocator), - _M_bucket_count(__ht._M_bucket_count), - _M_element_count(__ht._M_element_count), - _M_rehash_policy(__ht._M_rehash_policy) - { - _M_buckets = _M_allocate_buckets(_M_bucket_count); - try - { - for (size_type __i = 0; __i < __ht._M_bucket_count; ++__i) - { - _Node* __n = __ht._M_buckets[__i]; - _Node** __tail = _M_buckets + __i; - while (__n) - { - *__tail = _M_allocate_node(__n->_M_v); - this->_M_copy_code(*__tail, __n); - __tail = &((*__tail)->_M_next); - __n = __n->_M_next; - } - } - } - catch(...) - { - clear(); - _M_deallocate_buckets(_M_buckets, _M_bucket_count); - __throw_exception_again; - } - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>& - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - operator=(const _Hashtable& __ht) - { - _Hashtable __tmp(__ht); - this->swap(__tmp); - return *this; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - ~_Hashtable() - { - clear(); - _M_deallocate_buckets(_M_buckets, _M_bucket_count); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - swap(_Hashtable& __x) - { - // The only base class with member variables is hash_code_base. We - // define _Hash_code_base::_M_swap because different specializations - // have different members. - __detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Equal, - _H1, _H2, _Hash, __chc>::_M_swap(__x); - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 431. Swapping containers with unequal allocators. - std::__alloc_swap<_Node_allocator_type>::_S_do_it(_M_node_allocator, - __x._M_node_allocator); - - std::swap(_M_rehash_policy, __x._M_rehash_policy); - std::swap(_M_buckets, __x._M_buckets); - std::swap(_M_bucket_count, __x._M_bucket_count); - std::swap(_M_element_count, __x._M_element_count); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - __rehash_policy(const _RehashPolicy& __pol) - { - _M_rehash_policy = __pol; - size_type __n_bkt = __pol._M_bkt_for_elements(_M_element_count); - if (__n_bkt > _M_bucket_count) - _M_rehash(__n_bkt); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - find(const key_type& __k) - { - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - _Node* __p = _M_find_node(_M_buckets[__n], __k, __code); - return __p ? iterator(__p, _M_buckets + __n) : this->end(); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::const_iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - find(const key_type& __k) const - { - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - _Node* __p = _M_find_node(_M_buckets[__n], __k, __code); - return __p ? const_iterator(__p, _M_buckets + __n) : this->end(); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::size_type - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - count(const key_type& __k) const - { - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - std::size_t __result = 0; - for (_Node* __p = _M_buckets[__n]; __p; __p = __p->_M_next) - if (this->_M_compare(__k, __code, __p)) - ++__result; - return __result; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - std::pair<typename _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, _Equal, _H1, - _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator, - typename _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, _Equal, _H1, - _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - equal_range(const key_type& __k) - { - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - _Node** __head = _M_buckets + __n; - _Node* __p = _M_find_node(*__head, __k, __code); - - if (__p) - { - _Node* __p1 = __p->_M_next; - for (; __p1; __p1 = __p1->_M_next) - if (!this->_M_compare(__k, __code, __p1)) - break; - - iterator __first(__p, __head); - iterator __last(__p1, __head); - if (!__p1) - __last._M_incr_bucket(); - return std::make_pair(__first, __last); - } - else - return std::make_pair(this->end(), this->end()); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - std::pair<typename _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, _Equal, _H1, - _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::const_iterator, - typename _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, _Equal, _H1, - _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::const_iterator> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - equal_range(const key_type& __k) const - { - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - _Node** __head = _M_buckets + __n; - _Node* __p = _M_find_node(*__head, __k, __code); - - if (__p) - { - _Node* __p1 = __p->_M_next; - for (; __p1; __p1 = __p1->_M_next) - if (!this->_M_compare(__k, __code, __p1)) - break; - - const_iterator __first(__p, __head); - const_iterator __last(__p1, __head); - if (!__p1) - __last._M_incr_bucket(); - return std::make_pair(__first, __last); - } - else - return std::make_pair(this->end(), this->end()); - } - - // Find the node whose key compares equal to k, beginning the search - // at p (usually the head of a bucket). Return nil if no node is found. - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, - _Equal, _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::_Node* - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_find_node(_Node* __p, const key_type& __k, - typename _Hashtable::_Hash_code_type __code) const - { - for (; __p; __p = __p->_M_next) - if (this->_M_compare(__k, __code, __p)) - return __p; - return false; - } - - // Insert v in bucket n (assumes no element with its key already present). - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_insert_bucket(const value_type& __v, size_type __n, - typename _Hashtable::_Hash_code_type __code) - { - std::pair<bool, std::size_t> __do_rehash - = _M_rehash_policy._M_need_rehash(_M_bucket_count, - _M_element_count, 1); - - // Allocate the new node before doing the rehash so that we don't - // do a rehash if the allocation throws. - _Node* __new_node = _M_allocate_node(__v); - - try - { - if (__do_rehash.first) - { - const key_type& __k = this->_M_extract(__v); - __n = this->_M_bucket_index(__k, __code, __do_rehash.second); - _M_rehash(__do_rehash.second); - } - - __new_node->_M_next = _M_buckets[__n]; - this->_M_store_code(__new_node, __code); - _M_buckets[__n] = __new_node; - ++_M_element_count; - return iterator(__new_node, _M_buckets + __n); - } - catch(...) - { - _M_deallocate_node(__new_node); - __throw_exception_again; - } - } - - // Insert v if no element with its key is already present. - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - std::pair<typename _Hashtable<_Key, _Value, _Allocator, - _ExtractKey, _Equal, _H1, - _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator, bool> - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_insert(const value_type& __v, std::tr1::true_type) - { - const key_type& __k = this->_M_extract(__v); - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - size_type __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - - if (_Node* __p = _M_find_node(_M_buckets[__n], __k, __code)) - return std::make_pair(iterator(__p, _M_buckets + __n), false); - return std::make_pair(_M_insert_bucket(__v, __n, __code), true); - } - - // Insert v unconditionally. - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_insert(const value_type& __v, std::tr1::false_type) - { - std::pair<bool, std::size_t> __do_rehash - = _M_rehash_policy._M_need_rehash(_M_bucket_count, - _M_element_count, 1); - if (__do_rehash.first) - _M_rehash(__do_rehash.second); - - const key_type& __k = this->_M_extract(__v); - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - size_type __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - - // First find the node, avoid leaking new_node if compare throws. - _Node* __prev = _M_find_node(_M_buckets[__n], __k, __code); - _Node* __new_node = _M_allocate_node(__v); - - if (__prev) - { - __new_node->_M_next = __prev->_M_next; - __prev->_M_next = __new_node; - } - else - { - __new_node->_M_next = _M_buckets[__n]; - _M_buckets[__n] = __new_node; - } - this->_M_store_code(__new_node, __code); - - ++_M_element_count; - return iterator(__new_node, _M_buckets + __n); - } - - // For erase(iterator) and erase(const_iterator). - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_erase_node(_Node* __p, _Node** __b) - { - _Node* __cur = *__b; - if (__cur == __p) - *__b = __cur->_M_next; - else - { - _Node* __next = __cur->_M_next; - while (__next != __p) - { - __cur = __next; - __next = __cur->_M_next; - } - __cur->_M_next = __next->_M_next; - } - - _M_deallocate_node(__p); - --_M_element_count; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - template<typename _InputIterator> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - insert(_InputIterator __first, _InputIterator __last) - { - size_type __n_elt = __detail::__distance_fw(__first, __last); - std::pair<bool, std::size_t> __do_rehash - = _M_rehash_policy._M_need_rehash(_M_bucket_count, - _M_element_count, __n_elt); - if (__do_rehash.first) - _M_rehash(__do_rehash.second); - - for (; __first != __last; ++__first) - this->insert(*__first); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - erase(iterator __it) - { - iterator __result = __it; - ++__result; - _M_erase_node(__it._M_cur_node, __it._M_cur_bucket); - return __result; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::const_iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - erase(const_iterator __it) - { - const_iterator __result = __it; - ++__result; - _M_erase_node(__it._M_cur_node, __it._M_cur_bucket); - return __result; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::size_type - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - erase(const key_type& __k) - { - typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k); - std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count); - size_type __result = 0; - - _Node** __slot = _M_buckets + __n; - while (*__slot && !this->_M_compare(__k, __code, *__slot)) - __slot = &((*__slot)->_M_next); - - while (*__slot && this->_M_compare(__k, __code, *__slot)) - { - _Node* __p = *__slot; - *__slot = __p->_M_next; - _M_deallocate_node(__p); - --_M_element_count; - ++__result; - } - - return __result; - } - - // ??? This could be optimized by taking advantage of the bucket - // structure, but it's not clear that it's worth doing. It probably - // wouldn't even be an optimization unless the load factor is large. - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - erase(iterator __first, iterator __last) - { - while (__first != __last) - __first = this->erase(__first); - return __last; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, - __chc, __cit, __uk>::const_iterator - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - erase(const_iterator __first, const_iterator __last) - { - while (__first != __last) - __first = this->erase(__first); - return __last; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - clear() - { - _M_deallocate_nodes(_M_buckets, _M_bucket_count); - _M_element_count = 0; - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - rehash(size_type __n) - { - _M_rehash(std::max(_M_rehash_policy._M_next_bkt(__n), - _M_rehash_policy._M_bkt_for_elements(_M_element_count - + 1))); - } - - template<typename _Key, typename _Value, - typename _Allocator, typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, - bool __chc, bool __cit, bool __uk> - void - _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, - _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: - _M_rehash(size_type __n) - { - _Node** __new_array = _M_allocate_buckets(__n); - try - { - for (size_type __i = 0; __i < _M_bucket_count; ++__i) - while (_Node* __p = _M_buckets[__i]) - { - std::size_t __new_index = this->_M_bucket_index(__p, __n); - _M_buckets[__i] = __p->_M_next; - __p->_M_next = __new_array[__new_index]; - __new_array[__new_index] = __p; - } - _M_deallocate_buckets(_M_buckets, _M_bucket_count); - _M_bucket_count = __n; - _M_buckets = __new_array; - } - catch(...) - { - // A failure here means that a hash function threw an exception. - // We can't restore the previous state without calling the hash - // function again, so the only sensible recovery is to delete - // everything. - _M_deallocate_nodes(__new_array, __n); - _M_deallocate_buckets(__new_array, __n); - _M_deallocate_nodes(_M_buckets, _M_bucket_count); - _M_element_count = 0; - __throw_exception_again; - } - } - -_GLIBCXX_END_NAMESPACE -} // namespace std::tr1 - -#endif // _TR1_HASHTABLE - diff --git a/contrib/libstdc++/include/tr1/hashtable_policy.h b/contrib/libstdc++/include/tr1/hashtable_policy.h deleted file mode 100644 index 2d3830d544c87..0000000000000 --- a/contrib/libstdc++/include/tr1/hashtable_policy.h +++ /dev/null @@ -1,903 +0,0 @@ -// Internal policy header for TR1 unordered_set and unordered_map -*- C++ -*- - -// Copyright (C) 2005, 2006 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. - -/** @file tr1/hashtable_policy.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_HASHTABLE_POLICY_H -#define _TR1_HASHTABLE_POLICY_H 1 - -#include <functional> // _Identity, _Select1st -#include <tr1/utility> -#include <ext/type_traits.h> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) -namespace __detail -{ - // Helper function: return distance(first, last) for forward - // iterators, or 0 for input iterators. - template<class _Iterator> - inline typename std::iterator_traits<_Iterator>::difference_type - __distance_fw(_Iterator __first, _Iterator __last, - std::input_iterator_tag) - { return 0; } - - template<class _Iterator> - inline typename std::iterator_traits<_Iterator>::difference_type - __distance_fw(_Iterator __first, _Iterator __last, - std::forward_iterator_tag) - { return std::distance(__first, __last); } - - template<class _Iterator> - inline typename std::iterator_traits<_Iterator>::difference_type - __distance_fw(_Iterator __first, _Iterator __last) - { - typedef typename std::iterator_traits<_Iterator>::iterator_category _Tag; - return __distance_fw(__first, __last, _Tag()); - } - - // XXX This is a hack. _Prime_rehash_policy's member functions, and - // certainly the list of primes, should be defined in a .cc file. - // We're temporarily putting them in a header because we don't have a - // place to put TR1 .cc files yet. There's no good reason for any of - // _Prime_rehash_policy's member functions to be inline, and there's - // certainly no good reason for _Primes<> to exist at all. - struct _LessThan - { - template<typename _Tp, typename _Up> - bool - operator()(_Tp __x, _Up __y) - { return __x < __y; } - }; - - template<int __ulongsize = sizeof(unsigned long)> - struct _Primes - { - static const int __n_primes = __ulongsize != 8 ? 256 : 256 + 48; - static const unsigned long __primes[256 + 48 + 1]; - }; - - template<int __ulongsize> - const int _Primes<__ulongsize>::__n_primes; - - template<int __ulongsize> - const unsigned long _Primes<__ulongsize>::__primes[256 + 48 + 1] = - { - 2ul, 3ul, 5ul, 7ul, 11ul, 13ul, 17ul, 19ul, 23ul, 29ul, 31ul, - 37ul, 41ul, 43ul, 47ul, 53ul, 59ul, 61ul, 67ul, 71ul, 73ul, 79ul, - 83ul, 89ul, 97ul, 103ul, 109ul, 113ul, 127ul, 137ul, 139ul, 149ul, - 157ul, 167ul, 179ul, 193ul, 199ul, 211ul, 227ul, 241ul, 257ul, - 277ul, 293ul, 313ul, 337ul, 359ul, 383ul, 409ul, 439ul, 467ul, - 503ul, 541ul, 577ul, 619ul, 661ul, 709ul, 761ul, 823ul, 887ul, - 953ul, 1031ul, 1109ul, 1193ul, 1289ul, 1381ul, 1493ul, 1613ul, - 1741ul, 1879ul, 2029ul, 2179ul, 2357ul, 2549ul, 2753ul, 2971ul, - 3209ul, 3469ul, 3739ul, 4027ul, 4349ul, 4703ul, 5087ul, 5503ul, - 5953ul, 6427ul, 6949ul, 7517ul, 8123ul, 8783ul, 9497ul, 10273ul, - 11113ul, 12011ul, 12983ul, 14033ul, 15173ul, 16411ul, 17749ul, - 19183ul, 20753ul, 22447ul, 24281ul, 26267ul, 28411ul, 30727ul, - 33223ul, 35933ul, 38873ul, 42043ul, 45481ul, 49201ul, 53201ul, - 57557ul, 62233ul, 67307ul, 72817ul, 78779ul, 85229ul, 92203ul, - 99733ul, 107897ul, 116731ul, 126271ul, 136607ul, 147793ul, - 159871ul, 172933ul, 187091ul, 202409ul, 218971ul, 236897ul, - 256279ul, 277261ul, 299951ul, 324503ul, 351061ul, 379787ul, - 410857ul, 444487ul, 480881ul, 520241ul, 562841ul, 608903ul, - 658753ul, 712697ul, 771049ul, 834181ul, 902483ul, 976369ul, - 1056323ul, 1142821ul, 1236397ul, 1337629ul, 1447153ul, 1565659ul, - 1693859ul, 1832561ul, 1982627ul, 2144977ul, 2320627ul, 2510653ul, - 2716249ul, 2938679ul, 3179303ul, 3439651ul, 3721303ul, 4026031ul, - 4355707ul, 4712381ul, 5098259ul, 5515729ul, 5967347ul, 6456007ul, - 6984629ul, 7556579ul, 8175383ul, 8844859ul, 9569143ul, 10352717ul, - 11200489ul, 12117689ul, 13109983ul, 14183539ul, 15345007ul, - 16601593ul, 17961079ul, 19431899ul, 21023161ul, 22744717ul, - 24607243ul, 26622317ul, 28802401ul, 31160981ul, 33712729ul, - 36473443ul, 39460231ul, 42691603ul, 46187573ul, 49969847ul, - 54061849ul, 58488943ul, 63278561ul, 68460391ul, 74066549ul, - 80131819ul, 86693767ul, 93793069ul, 101473717ul, 109783337ul, - 118773397ul, 128499677ul, 139022417ul, 150406843ul, 162723577ul, - 176048909ul, 190465427ul, 206062531ul, 222936881ul, 241193053ul, - 260944219ul, 282312799ul, 305431229ul, 330442829ul, 357502601ul, - 386778277ul, 418451333ul, 452718089ul, 489790921ul, 529899637ul, - 573292817ul, 620239453ul, 671030513ul, 725980837ul, 785430967ul, - 849749479ul, 919334987ul, 994618837ul, 1076067617ul, 1164186217ul, - 1259520799ul, 1362662261ul, 1474249943ul, 1594975441ul, - 1725587117ul, 1866894511ul, 2019773507ul, 2185171673ul, - 2364114217ul, 2557710269ul, 2767159799ul, 2993761039ul, - 3238918481ul, 3504151727ul, 3791104843ul, 4101556399ul, - 4294967291ul, - // Sentinel, so we don't have to test the result of lower_bound, - // or, on 64-bit machines, rest of the table. - __ulongsize != 8 ? 4294967291ul : (unsigned long)6442450933ull, - (unsigned long)8589934583ull, - (unsigned long)12884901857ull, (unsigned long)17179869143ull, - (unsigned long)25769803693ull, (unsigned long)34359738337ull, - (unsigned long)51539607367ull, (unsigned long)68719476731ull, - (unsigned long)103079215087ull, (unsigned long)137438953447ull, - (unsigned long)206158430123ull, (unsigned long)274877906899ull, - (unsigned long)412316860387ull, (unsigned long)549755813881ull, - (unsigned long)824633720731ull, (unsigned long)1099511627689ull, - (unsigned long)1649267441579ull, (unsigned long)2199023255531ull, - (unsigned long)3298534883309ull, (unsigned long)4398046511093ull, - (unsigned long)6597069766607ull, (unsigned long)8796093022151ull, - (unsigned long)13194139533241ull, (unsigned long)17592186044399ull, - (unsigned long)26388279066581ull, (unsigned long)35184372088777ull, - (unsigned long)52776558133177ull, (unsigned long)70368744177643ull, - (unsigned long)105553116266399ull, (unsigned long)140737488355213ull, - (unsigned long)211106232532861ull, (unsigned long)281474976710597ull, - (unsigned long)562949953421231ull, (unsigned long)1125899906842597ull, - (unsigned long)2251799813685119ull, (unsigned long)4503599627370449ull, - (unsigned long)9007199254740881ull, (unsigned long)18014398509481951ull, - (unsigned long)36028797018963913ull, (unsigned long)72057594037927931ull, - (unsigned long)144115188075855859ull, - (unsigned long)288230376151711717ull, - (unsigned long)576460752303423433ull, - (unsigned long)1152921504606846883ull, - (unsigned long)2305843009213693951ull, - (unsigned long)4611686018427387847ull, - (unsigned long)9223372036854775783ull, - (unsigned long)18446744073709551557ull, - (unsigned long)18446744073709551557ull - }; - - // Auxiliary types used for all instantiations of _Hashtable: nodes - // and iterators. - - // Nodes, used to wrap elements stored in the hash table. A policy - // template parameter of class template _Hashtable controls whether - // nodes also store a hash code. In some cases (e.g. strings) this - // may be a performance win. - template<typename _Value, bool __cache_hash_code> - struct _Hash_node; - - template<typename _Value> - struct _Hash_node<_Value, true> - { - _Value _M_v; - std::size_t _M_hash_code; - _Hash_node* _M_next; - }; - - template<typename _Value> - struct _Hash_node<_Value, false> - { - _Value _M_v; - _Hash_node* _M_next; - }; - - // Local iterators, used to iterate within a bucket but not between - // buckets. - template<typename _Value, bool __cache> - struct _Node_iterator_base - { - _Node_iterator_base(_Hash_node<_Value, __cache>* __p) - : _M_cur(__p) { } - - void - _M_incr() - { _M_cur = _M_cur->_M_next; } - - _Hash_node<_Value, __cache>* _M_cur; - }; - - template<typename _Value, bool __cache> - inline bool - operator==(const _Node_iterator_base<_Value, __cache>& __x, - const _Node_iterator_base<_Value, __cache>& __y) - { return __x._M_cur == __y._M_cur; } - - template<typename _Value, bool __cache> - inline bool - operator!=(const _Node_iterator_base<_Value, __cache>& __x, - const _Node_iterator_base<_Value, __cache>& __y) - { return __x._M_cur != __y._M_cur; } - - template<typename _Value, bool __constant_iterators, bool __cache> - struct _Node_iterator - : public _Node_iterator_base<_Value, __cache> - { - typedef _Value value_type; - typedef typename - __gnu_cxx::__conditional_type<__constant_iterators, - const _Value*, _Value*>::__type - pointer; - typedef typename - __gnu_cxx::__conditional_type<__constant_iterators, - const _Value&, _Value&>::__type - reference; - typedef std::ptrdiff_t difference_type; - typedef std::forward_iterator_tag iterator_category; - - _Node_iterator() - : _Node_iterator_base<_Value, __cache>(0) { } - - explicit - _Node_iterator(_Hash_node<_Value, __cache>* __p) - : _Node_iterator_base<_Value, __cache>(__p) { } - - reference - operator*() const - { return this->_M_cur->_M_v; } - - pointer - operator->() const - { return &this->_M_cur->_M_v; } - - _Node_iterator& - operator++() - { - this->_M_incr(); - return *this; - } - - _Node_iterator - operator++(int) - { - _Node_iterator __tmp(*this); - this->_M_incr(); - return __tmp; - } - }; - - template<typename _Value, bool __constant_iterators, bool __cache> - struct _Node_const_iterator - : public _Node_iterator_base<_Value, __cache> - { - typedef _Value value_type; - typedef const _Value* pointer; - typedef const _Value& reference; - typedef std::ptrdiff_t difference_type; - typedef std::forward_iterator_tag iterator_category; - - _Node_const_iterator() - : _Node_iterator_base<_Value, __cache>(0) { } - - explicit - _Node_const_iterator(_Hash_node<_Value, __cache>* __p) - : _Node_iterator_base<_Value, __cache>(__p) { } - - _Node_const_iterator(const _Node_iterator<_Value, __constant_iterators, - __cache>& __x) - : _Node_iterator_base<_Value, __cache>(__x._M_cur) { } - - reference - operator*() const - { return this->_M_cur->_M_v; } - - pointer - operator->() const - { return &this->_M_cur->_M_v; } - - _Node_const_iterator& - operator++() - { - this->_M_incr(); - return *this; - } - - _Node_const_iterator - operator++(int) - { - _Node_const_iterator __tmp(*this); - this->_M_incr(); - return __tmp; - } - }; - - template<typename _Value, bool __cache> - struct _Hashtable_iterator_base - { - _Hashtable_iterator_base(_Hash_node<_Value, __cache>* __node, - _Hash_node<_Value, __cache>** __bucket) - : _M_cur_node(__node), _M_cur_bucket(__bucket) { } - - void - _M_incr() - { - _M_cur_node = _M_cur_node->_M_next; - if (!_M_cur_node) - _M_incr_bucket(); - } - - void - _M_incr_bucket(); - - _Hash_node<_Value, __cache>* _M_cur_node; - _Hash_node<_Value, __cache>** _M_cur_bucket; - }; - - // Global iterators, used for arbitrary iteration within a hash - // table. Larger and more expensive than local iterators. - template<typename _Value, bool __cache> - void - _Hashtable_iterator_base<_Value, __cache>:: - _M_incr_bucket() - { - ++_M_cur_bucket; - - // This loop requires the bucket array to have a non-null sentinel. - while (!*_M_cur_bucket) - ++_M_cur_bucket; - _M_cur_node = *_M_cur_bucket; - } - - template<typename _Value, bool __cache> - inline bool - operator==(const _Hashtable_iterator_base<_Value, __cache>& __x, - const _Hashtable_iterator_base<_Value, __cache>& __y) - { return __x._M_cur_node == __y._M_cur_node; } - - template<typename _Value, bool __cache> - inline bool - operator!=(const _Hashtable_iterator_base<_Value, __cache>& __x, - const _Hashtable_iterator_base<_Value, __cache>& __y) - { return __x._M_cur_node != __y._M_cur_node; } - - template<typename _Value, bool __constant_iterators, bool __cache> - struct _Hashtable_iterator - : public _Hashtable_iterator_base<_Value, __cache> - { - typedef _Value value_type; - typedef typename - __gnu_cxx::__conditional_type<__constant_iterators, - const _Value*, _Value*>::__type - pointer; - typedef typename - __gnu_cxx::__conditional_type<__constant_iterators, - const _Value&, _Value&>::__type - reference; - typedef std::ptrdiff_t difference_type; - typedef std::forward_iterator_tag iterator_category; - - _Hashtable_iterator() - : _Hashtable_iterator_base<_Value, __cache>(0, 0) { } - - _Hashtable_iterator(_Hash_node<_Value, __cache>* __p, - _Hash_node<_Value, __cache>** __b) - : _Hashtable_iterator_base<_Value, __cache>(__p, __b) { } - - explicit - _Hashtable_iterator(_Hash_node<_Value, __cache>** __b) - : _Hashtable_iterator_base<_Value, __cache>(*__b, __b) { } - - reference - operator*() const - { return this->_M_cur_node->_M_v; } - - pointer - operator->() const - { return &this->_M_cur_node->_M_v; } - - _Hashtable_iterator& - operator++() - { - this->_M_incr(); - return *this; - } - - _Hashtable_iterator - operator++(int) - { - _Hashtable_iterator __tmp(*this); - this->_M_incr(); - return __tmp; - } - }; - - template<typename _Value, bool __constant_iterators, bool __cache> - struct _Hashtable_const_iterator - : public _Hashtable_iterator_base<_Value, __cache> - { - typedef _Value value_type; - typedef const _Value* pointer; - typedef const _Value& reference; - typedef std::ptrdiff_t difference_type; - typedef std::forward_iterator_tag iterator_category; - - _Hashtable_const_iterator() - : _Hashtable_iterator_base<_Value, __cache>(0, 0) { } - - _Hashtable_const_iterator(_Hash_node<_Value, __cache>* __p, - _Hash_node<_Value, __cache>** __b) - : _Hashtable_iterator_base<_Value, __cache>(__p, __b) { } - - explicit - _Hashtable_const_iterator(_Hash_node<_Value, __cache>** __b) - : _Hashtable_iterator_base<_Value, __cache>(*__b, __b) { } - - _Hashtable_const_iterator(const _Hashtable_iterator<_Value, - __constant_iterators, __cache>& __x) - : _Hashtable_iterator_base<_Value, __cache>(__x._M_cur_node, - __x._M_cur_bucket) { } - - reference - operator*() const - { return this->_M_cur_node->_M_v; } - - pointer - operator->() const - { return &this->_M_cur_node->_M_v; } - - _Hashtable_const_iterator& - operator++() - { - this->_M_incr(); - return *this; - } - - _Hashtable_const_iterator - operator++(int) - { - _Hashtable_const_iterator __tmp(*this); - this->_M_incr(); - return __tmp; - } - }; - - - // Many of class template _Hashtable's template parameters are policy - // classes. These are defaults for the policies. - - // Default range hashing function: use division to fold a large number - // into the range [0, N). - struct _Mod_range_hashing - { - typedef std::size_t first_argument_type; - typedef std::size_t second_argument_type; - typedef std::size_t result_type; - - result_type - operator()(first_argument_type __num, second_argument_type __den) const - { return __num % __den; } - }; - - // Default ranged hash function H. In principle it should be a - // function object composed from objects of type H1 and H2 such that - // h(k, N) = h2(h1(k), N), but that would mean making extra copies of - // h1 and h2. So instead we'll just use a tag to tell class template - // hashtable to do that composition. - struct _Default_ranged_hash { }; - - // Default value for rehash policy. Bucket size is (usually) the - // smallest prime that keeps the load factor small enough. - struct _Prime_rehash_policy - { - _Prime_rehash_policy(float __z = 1.0); - - float - max_load_factor() const; - - // Return a bucket size no smaller than n. - std::size_t - _M_next_bkt(std::size_t __n) const; - - // Return a bucket count appropriate for n elements - std::size_t - _M_bkt_for_elements(std::size_t __n) const; - - // __n_bkt is current bucket count, __n_elt is current element count, - // and __n_ins is number of elements to be inserted. Do we need to - // increase bucket count? If so, return make_pair(true, n), where n - // is the new bucket count. If not, return make_pair(false, 0). - std::pair<bool, std::size_t> - _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, - std::size_t __n_ins) const; - - float _M_max_load_factor; - float _M_growth_factor; - mutable std::size_t _M_next_resize; - }; - - inline - _Prime_rehash_policy:: - _Prime_rehash_policy(float __z) - : _M_max_load_factor(__z), _M_growth_factor(2.f), _M_next_resize(0) - { } - - inline float - _Prime_rehash_policy:: - max_load_factor() const - { return _M_max_load_factor; } - - // Return a prime no smaller than n. - inline std::size_t - _Prime_rehash_policy:: - _M_next_bkt(std::size_t __n) const - { - const unsigned long* const __last = (_Primes<>::__primes - + _Primes<>::__n_primes); - const unsigned long* __p = std::lower_bound(_Primes<>::__primes, __last, - __n); - _M_next_resize = static_cast<std::size_t>(std::ceil(*__p - * _M_max_load_factor)); - return *__p; - } - - // Return the smallest prime p such that alpha p >= n, where alpha - // is the load factor. - inline std::size_t - _Prime_rehash_policy:: - _M_bkt_for_elements(std::size_t __n) const - { - const unsigned long* const __last = (_Primes<>::__primes - + _Primes<>::__n_primes); - const float __min_bkts = __n / _M_max_load_factor; - const unsigned long* __p = std::lower_bound(_Primes<>::__primes, __last, - __min_bkts, _LessThan()); - _M_next_resize = static_cast<std::size_t>(std::ceil(*__p - * _M_max_load_factor)); - return *__p; - } - - // Finds the smallest prime p such that alpha p > __n_elt + __n_ins. - // If p > __n_bkt, return make_pair(true, p); otherwise return - // make_pair(false, 0). In principle this isn't very different from - // _M_bkt_for_elements. - - // The only tricky part is that we're caching the element count at - // which we need to rehash, so we don't have to do a floating-point - // multiply for every insertion. - - inline std::pair<bool, std::size_t> - _Prime_rehash_policy:: - _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt, - std::size_t __n_ins) const - { - if (__n_elt + __n_ins > _M_next_resize) - { - float __min_bkts = ((float(__n_ins) + float(__n_elt)) - / _M_max_load_factor); - if (__min_bkts > __n_bkt) - { - __min_bkts = std::max(__min_bkts, _M_growth_factor * __n_bkt); - const unsigned long* const __last = (_Primes<>::__primes - + _Primes<>::__n_primes); - const unsigned long* __p = std::lower_bound(_Primes<>::__primes, - __last, __min_bkts, - _LessThan()); - _M_next_resize = - static_cast<std::size_t>(std::ceil(*__p * _M_max_load_factor)); - return std::make_pair(true, *__p); - } - else - { - _M_next_resize = - static_cast<std::size_t>(std::ceil(__n_bkt - * _M_max_load_factor)); - return std::make_pair(false, 0); - } - } - else - return std::make_pair(false, 0); - } - - // Base classes for std::tr1::_Hashtable. We define these base - // classes because in some cases we want to do different things - // depending on the value of a policy class. In some cases the - // policy class affects which member functions and nested typedefs - // are defined; we handle that by specializing base class templates. - // Several of the base class templates need to access other members - // of class template _Hashtable, so we use the "curiously recurring - // template pattern" for them. - - // class template _Map_base. If the hashtable has a value type of the - // form pair<T1, T2> and a key extraction policy that returns the - // first part of the pair, the hashtable gets a mapped_type typedef. - // If it satisfies those criteria and also has unique keys, then it - // also gets an operator[]. - template<typename _Key, typename _Value, typename _Ex, bool __unique, - typename _Hashtable> - struct _Map_base { }; - - template<typename _Key, typename _Pair, typename _Hashtable> - struct _Map_base<_Key, _Pair, std::_Select1st<_Pair>, false, _Hashtable> - { - typedef typename _Pair::second_type mapped_type; - }; - - template<typename _Key, typename _Pair, typename _Hashtable> - struct _Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable> - { - typedef typename _Pair::second_type mapped_type; - - mapped_type& - operator[](const _Key& __k); - }; - - template<typename _Key, typename _Pair, typename _Hashtable> - typename _Map_base<_Key, _Pair, std::_Select1st<_Pair>, - true, _Hashtable>::mapped_type& - _Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>:: - operator[](const _Key& __k) - { - _Hashtable* __h = static_cast<_Hashtable*>(this); - typename _Hashtable::_Hash_code_type __code = __h->_M_hash_code(__k); - std::size_t __n = __h->_M_bucket_index(__k, __code, - __h->_M_bucket_count); - - typename _Hashtable::_Node* __p = - __h->_M_find_node(__h->_M_buckets[__n], __k, __code); - if (!__p) - return __h->_M_insert_bucket(std::make_pair(__k, mapped_type()), - __n, __code)->second; - return (__p->_M_v).second; - } - - // class template _Rehash_base. Give hashtable the max_load_factor - // functions iff the rehash policy is _Prime_rehash_policy. - template<typename _RehashPolicy, typename _Hashtable> - struct _Rehash_base { }; - - template<typename _Hashtable> - struct _Rehash_base<_Prime_rehash_policy, _Hashtable> - { - float - max_load_factor() const - { - const _Hashtable* __this = static_cast<const _Hashtable*>(this); - return __this->__rehash_policy().max_load_factor(); - } - - void - max_load_factor(float __z) - { - _Hashtable* __this = static_cast<_Hashtable*>(this); - __this->__rehash_policy(_Prime_rehash_policy(__z)); - } - }; - - // Class template _Hash_code_base. Encapsulates two policy issues that - // aren't quite orthogonal. - // (1) the difference between using a ranged hash function and using - // the combination of a hash function and a range-hashing function. - // In the former case we don't have such things as hash codes, so - // we have a dummy type as placeholder. - // (2) Whether or not we cache hash codes. Caching hash codes is - // meaningless if we have a ranged hash function. - // We also put the key extraction and equality comparison function - // objects here, for convenience. - - // Primary template: unused except as a hook for specializations. - template<typename _Key, typename _Value, - typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash, - bool __cache_hash_code> - struct _Hash_code_base; - - // Specialization: ranged hash function, no caching hash codes. H1 - // and H2 are provided but ignored. We define a dummy hash code type. - template<typename _Key, typename _Value, - typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash> - struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2, - _Hash, false> - { - protected: - _Hash_code_base(const _ExtractKey& __ex, const _Equal& __eq, - const _H1&, const _H2&, const _Hash& __h) - : _M_extract(__ex), _M_eq(__eq), _M_ranged_hash(__h) { } - - typedef void* _Hash_code_type; - - _Hash_code_type - _M_hash_code(const _Key& __key) const - { return 0; } - - std::size_t - _M_bucket_index(const _Key& __k, _Hash_code_type, - std::size_t __n) const - { return _M_ranged_hash(__k, __n); } - - std::size_t - _M_bucket_index(const _Hash_node<_Value, false>* __p, - std::size_t __n) const - { return _M_ranged_hash(_M_extract(__p->_M_v), __n); } - - bool - _M_compare(const _Key& __k, _Hash_code_type, - _Hash_node<_Value, false>* __n) const - { return _M_eq(__k, _M_extract(__n->_M_v)); } - - void - _M_store_code(_Hash_node<_Value, false>*, _Hash_code_type) const - { } - - void - _M_copy_code(_Hash_node<_Value, false>*, - const _Hash_node<_Value, false>*) const - { } - - void - _M_swap(_Hash_code_base& __x) - { - std::swap(_M_extract, __x._M_extract); - std::swap(_M_eq, __x._M_eq); - std::swap(_M_ranged_hash, __x._M_ranged_hash); - } - - protected: - _ExtractKey _M_extract; - _Equal _M_eq; - _Hash _M_ranged_hash; - }; - - - // No specialization for ranged hash function while caching hash codes. - // That combination is meaningless, and trying to do it is an error. - - - // Specialization: ranged hash function, cache hash codes. This - // combination is meaningless, so we provide only a declaration - // and no definition. - template<typename _Key, typename _Value, - typename _ExtractKey, typename _Equal, - typename _H1, typename _H2, typename _Hash> - struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2, - _Hash, true>; - - // Specialization: hash function and range-hashing function, no - // caching of hash codes. H is provided but ignored. Provides - // typedef and accessor required by TR1. - template<typename _Key, typename _Value, - typename _ExtractKey, typename _Equal, - typename _H1, typename _H2> - struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2, - _Default_ranged_hash, false> - { - typedef _H1 hasher; - - hasher - hash_function() const - { return _M_h1; } - - protected: - _Hash_code_base(const _ExtractKey& __ex, const _Equal& __eq, - const _H1& __h1, const _H2& __h2, - const _Default_ranged_hash&) - : _M_extract(__ex), _M_eq(__eq), _M_h1(__h1), _M_h2(__h2) { } - - typedef std::size_t _Hash_code_type; - - _Hash_code_type - _M_hash_code(const _Key& __k) const - { return _M_h1(__k); } - - std::size_t - _M_bucket_index(const _Key&, _Hash_code_type __c, - std::size_t __n) const - { return _M_h2(__c, __n); } - - std::size_t - _M_bucket_index(const _Hash_node<_Value, false>* __p, - std::size_t __n) const - { return _M_h2(_M_h1(_M_extract(__p->_M_v)), __n); } - - bool - _M_compare(const _Key& __k, _Hash_code_type, - _Hash_node<_Value, false>* __n) const - { return _M_eq(__k, _M_extract(__n->_M_v)); } - - void - _M_store_code(_Hash_node<_Value, false>*, _Hash_code_type) const - { } - - void - _M_copy_code(_Hash_node<_Value, false>*, - const _Hash_node<_Value, false>*) const - { } - - void - _M_swap(_Hash_code_base& __x) - { - std::swap(_M_extract, __x._M_extract); - std::swap(_M_eq, __x._M_eq); - std::swap(_M_h1, __x._M_h1); - std::swap(_M_h2, __x._M_h2); - } - - protected: - _ExtractKey _M_extract; - _Equal _M_eq; - _H1 _M_h1; - _H2 _M_h2; - }; - - // Specialization: hash function and range-hashing function, - // caching hash codes. H is provided but ignored. Provides - // typedef and accessor required by TR1. - template<typename _Key, typename _Value, - typename _ExtractKey, typename _Equal, - typename _H1, typename _H2> - struct _Hash_code_base<_Key, _Value, _ExtractKey, _Equal, _H1, _H2, - _Default_ranged_hash, true> - { - typedef _H1 hasher; - - hasher - hash_function() const - { return _M_h1; } - - protected: - _Hash_code_base(const _ExtractKey& __ex, const _Equal& __eq, - const _H1& __h1, const _H2& __h2, - const _Default_ranged_hash&) - : _M_extract(__ex), _M_eq(__eq), _M_h1(__h1), _M_h2(__h2) { } - - typedef std::size_t _Hash_code_type; - - _Hash_code_type - _M_hash_code(const _Key& __k) const - { return _M_h1(__k); } - - std::size_t - _M_bucket_index(const _Key&, _Hash_code_type __c, - std::size_t __n) const - { return _M_h2(__c, __n); } - - std::size_t - _M_bucket_index(const _Hash_node<_Value, true>* __p, - std::size_t __n) const - { return _M_h2(__p->_M_hash_code, __n); } - - bool - _M_compare(const _Key& __k, _Hash_code_type __c, - _Hash_node<_Value, true>* __n) const - { return __c == __n->_M_hash_code && _M_eq(__k, _M_extract(__n->_M_v)); } - - void - _M_store_code(_Hash_node<_Value, true>* __n, _Hash_code_type __c) const - { __n->_M_hash_code = __c; } - - void - _M_copy_code(_Hash_node<_Value, true>* __to, - const _Hash_node<_Value, true>* __from) const - { __to->_M_hash_code = __from->_M_hash_code; } - - void - _M_swap(_Hash_code_base& __x) - { - std::swap(_M_extract, __x._M_extract); - std::swap(_M_eq, __x._M_eq); - std::swap(_M_h1, __x._M_h1); - std::swap(_M_h2, __x._M_h2); - } - - protected: - _ExtractKey _M_extract; - _Equal _M_eq; - _H1 _M_h1; - _H2 _M_h2; - }; -} // namespace __detail -_GLIBCXX_END_NAMESPACE -} // namespace std::tr1 - -#endif // _TR1_HASHTABLE_POLICY_H - diff --git a/contrib/libstdc++/include/tr1/inttypes.h b/contrib/libstdc++/include/tr1/inttypes.h deleted file mode 100644 index 720089c2459ea..0000000000000 --- a/contrib/libstdc++/include/tr1/inttypes.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 inttypes.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/inttypes.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_INTTYPES_H -#define _TR1_INTTYPES_H 1 - -#include <tr1/cinttypes> - -#endif diff --git a/contrib/libstdc++/include/tr1/limits.h b/contrib/libstdc++/include/tr1/limits.h deleted file mode 100644 index 437d1512ede8d..0000000000000 --- a/contrib/libstdc++/include/tr1/limits.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 limits.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/limits.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_LIMITS_H -#define _TR1_LIMITS_H 1 - -#include <tr1/climits> - -#endif diff --git a/contrib/libstdc++/include/tr1/math.h b/contrib/libstdc++/include/tr1/math.h deleted file mode 100644 index 36fb2fdae506a..0000000000000 --- a/contrib/libstdc++/include/tr1/math.h +++ /dev/null @@ -1,99 +0,0 @@ -// TR1 math.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/math.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_MATH_H -#define _TR1_MATH_H 1 - -#include <tr1/cmath> - -#if _GLIBCXX_USE_C99_MATH_TR1 - -using std::tr1::acos; -using std::tr1::acosh; -using std::tr1::asin; -using std::tr1::asinh; -using std::tr1::atan; -using std::tr1::atan2; -using std::tr1::atanh; -using std::tr1::cbrt; -using std::tr1::ceil; -using std::tr1::copysign; -using std::tr1::cos; -using std::tr1::cosh; -using std::tr1::erf; -using std::tr1::erfc; -using std::tr1::exp; -using std::tr1::exp2; -using std::tr1::expm1; -using std::tr1::fabs; -using std::tr1::fdim; -using std::tr1::floor; -using std::tr1::fma; -using std::tr1::fmax; -using std::tr1::fmin; -using std::tr1::fmod; -using std::tr1::frexp; -using std::tr1::hypot; -using std::tr1::ilogb; -using std::tr1::ldexp; -using std::tr1::lgamma; -using std::tr1::llrint; -using std::tr1::llround; -using std::tr1::log; -using std::tr1::log10; -using std::tr1::log1p; -using std::tr1::log2; -using std::tr1::logb; -using std::tr1::lrint; -using std::tr1::lround; -using std::tr1::nearbyint; -using std::tr1::nextafter; -using std::tr1::nexttoward; -using std::tr1::pow; -using std::tr1::remainder; -using std::tr1::remquo; -using std::tr1::rint; -using std::tr1::round; -using std::tr1::scalbln; -using std::tr1::scalbn; -using std::tr1::sin; -using std::tr1::sinh; -using std::tr1::sqrt; -using std::tr1::tan; -using std::tr1::tanh; -using std::tr1::tgamma; -using std::tr1::trunc; - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/memory b/contrib/libstdc++/include/tr1/memory deleted file mode 100644 index 9de80dadfa942..0000000000000 --- a/contrib/libstdc++/include/tr1/memory +++ /dev/null @@ -1,56 +0,0 @@ -// <tr1/memory> -*- C++ -*- - -// Copyright (C) 2005, 2006 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. - -/** - * @file tr1/memory - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_MEMORY -#define _TR1_MEMORY 1 - -#include "../memory" -#include <functional> // std::less -#include <exception> // std::exception -#include <new> // std::bad_alloc -#include <typeinfo> // std::type_info in get_deleter -#include <cstddef> // std::size_t -#include <algorithm> // std::swap -#include <iosfwd> // std::basic_ostream -#include <cstdlib> // std::abort - -#include <ext/atomicity.h> -#include <ext/concurrence.h> -#include <bits/functexcept.h> -#include <debug/debug.h> -#include <tr1/type_traits> // tr1::add_reference - -#include <tr1/boost_shared_ptr.h> - -#endif diff --git a/contrib/libstdc++/include/tr1/mu_iterate.h b/contrib/libstdc++/include/tr1/mu_iterate.h deleted file mode 100644 index abdc724a7d47a..0000000000000 --- a/contrib/libstdc++/include/tr1/mu_iterate.h +++ /dev/null @@ -1,52 +0,0 @@ -// TR1 functional -*- C++ -*- - -// Copyright (C) 2005 Free Software Foundation, Inc. -// Written by Douglas Gregor <doug.gregor -at- gmail.com> -// -// 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. - -/** @file tr1/mu_iterate.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -// Determine the result type when we pass the arguments along. This -// involves passing along the cv-qualifiers placed on _Mu and -// unwrapping the argument bundle. -// @namespace std::tr1 -// @class std::tr1::_Mu::result -template<typename _CVMu, typename _CVArg - _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -class result<_CVMu(_CVArg, tuple<_GLIBCXX_TEMPLATE_ARGS>)> - : public result_of<_CVArg(_GLIBCXX_TEMPLATE_ARGS)> { }; - -template<typename _CVArg _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> -typename result_of<_CVArg(_GLIBCXX_TEMPLATE_ARGS)>::type -operator()(_CVArg& __arg, const tuple<_GLIBCXX_TEMPLATE_ARGS>& __tuple) - const volatile -{ - return __arg(_GLIBCXX_MU_GET_TUPLE_ARGS); -} diff --git a/contrib/libstdc++/include/tr1/random b/contrib/libstdc++/include/tr1/random deleted file mode 100644 index 492adfd5e74c2..0000000000000 --- a/contrib/libstdc++/include/tr1/random +++ /dev/null @@ -1,2374 +0,0 @@ -// random number generation -*- C++ -*- - -// Copyright (C) 2006 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. - -/** - * @file tr1/random - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_RANDOM -#define _TR1_RANDOM 1 - -#include <cmath> -#include <cstdio> -#include <string> -#include <iosfwd> -#include <limits> -#include <tr1/type_traits> -#include <tr1/cmath> -#include <ext/type_traits.h> -#include <ext/numeric_traits.h> -#include <bits/concept_check.h> -#include <debug/debug.h> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // [5.1] Random number generation - - /** - * @addtogroup tr1_random Random Number Generation - * A facility for generating random numbers on selected distributions. - * @{ - */ - - /* - * Implementation-space details. - */ - namespace __detail - { - template<typename _UIntType, int __w, - bool = __w < std::numeric_limits<_UIntType>::digits> - struct _Shift - { static const _UIntType __value = 0; }; - - template<typename _UIntType, int __w> - struct _Shift<_UIntType, __w, true> - { static const _UIntType __value = _UIntType(1) << __w; }; - - template<typename _Tp, _Tp __a, _Tp __c, _Tp __m, bool> - struct _Mod; - - // Dispatch based on modulus value to prevent divide-by-zero compile-time - // errors when m == 0. - template<typename _Tp, _Tp __a, _Tp __c, _Tp __m> - inline _Tp - __mod(_Tp __x) - { return _Mod<_Tp, __a, __c, __m, __m == 0>::__calc(__x); } - - typedef __gnu_cxx::__conditional_type<(sizeof(unsigned) == 4), - unsigned, unsigned long>::__type _UInt32Type; - - /* - * An adaptor class for converting the output of any Generator into - * the input for a specific Distribution. - */ - template<typename _Engine, typename _Distribution> - struct _Adaptor - { - typedef typename _Engine::result_type _Engine_result_type; - typedef typename _Distribution::input_type result_type; - - public: - _Adaptor(const _Engine& __g) - : _M_g(__g) { } - - result_type - min() const - { - result_type __return_value = 0; - if (is_integral<_Engine_result_type>::value - && is_integral<result_type>::value) - __return_value = _M_g.min(); - else if (!is_integral<result_type>::value) - __return_value = result_type(0); - return __return_value; - } - - result_type - max() const - { - result_type __return_value = 0; - if (is_integral<_Engine_result_type>::value - && is_integral<result_type>::value) - __return_value = _M_g.max(); - else if (!is_integral<result_type>::value) - __return_value = result_type(1); - return __return_value; - } - - result_type - operator()(); - - private: - _Engine _M_g; - }; - - /* - * Converts a value generated by the adapted random number generator into a - * value in the input domain for the dependent random number distribution. - * - * Because the type traits are compile time constants only the appropriate - * clause of the if statements will actually be emitted by the compiler. - */ - template<typename _Engine, typename _Distribution> - typename _Adaptor<_Engine, _Distribution>::result_type - _Adaptor<_Engine, _Distribution>:: - operator()() - { - result_type __return_value = 0; - if (is_integral<_Engine_result_type>::value - && is_integral<result_type>::value) - __return_value = _M_g(); - else if (is_integral<_Engine_result_type>::value - && !is_integral<result_type>::value) - __return_value = result_type(_M_g() - _M_g.min()) - / result_type(_M_g.max() - _M_g.min() + result_type(1)); - else if (!is_integral<_Engine_result_type>::value - && !is_integral<result_type>::value) - __return_value = result_type(_M_g() - _M_g.min()) - / result_type(_M_g.max() - _M_g.min()); - return __return_value; - } - } // namespace __detail - - /** - * Produces random numbers on a given disribution function using a un uniform - * random number generation engine. - * - * @todo the engine_value_type needs to be studied more carefully. - */ - template<typename _Engine, typename _Dist> - class variate_generator - { - // Concept requirements. - __glibcxx_class_requires(_Engine, _CopyConstructibleConcept) - // __glibcxx_class_requires(_Engine, _EngineConcept) - // __glibcxx_class_requires(_Dist, _EngineConcept) - - public: - typedef _Engine engine_type; - typedef __detail::_Adaptor<_Engine, _Dist> engine_value_type; - typedef _Dist distribution_type; - typedef typename _Dist::result_type result_type; - - // tr1:5.1.1 table 5.1 requirement - typedef typename __gnu_cxx::__enable_if< - is_arithmetic<result_type>::value, result_type>::__type _IsValidType; - - /** - * Constructs a variate generator with the uniform random number - * generator @p __eng for the random distribution @p __dist. - * - * @throws Any exceptions which may thrown by the copy constructors of - * the @p _Engine or @p _Dist objects. - */ - variate_generator(engine_type __eng, distribution_type __dist) - : _M_engine(__eng), _M_dist(__dist) { } - - /** - * Gets the next generated value on the distribution. - */ - result_type - operator()() - { return _M_dist(_M_engine); } - - /** - * WTF? - */ - template<typename _Tp> - result_type - operator()(_Tp __value) - { return _M_dist(_M_engine, __value); } - - /** - * Gets a reference to the underlying uniform random number generator - * object. - */ - engine_value_type& - engine() - { return _M_engine; } - - /** - * Gets a const reference to the underlying uniform random number - * generator object. - */ - const engine_value_type& - engine() const - { return _M_engine; } - - /** - * Gets a reference to the underlying random distribution. - */ - distribution_type& - distribution() - { return _M_dist; } - - /** - * Gets a const reference to the underlying random distribution. - */ - const distribution_type& - distribution() const - { return _M_dist; } - - /** - * Gets the closed lower bound of the distribution interval. - */ - result_type - min() const - { return this->distribution().min(); } - - /** - * Gets the closed upper bound of the distribution interval. - */ - result_type - max() const - { return this->distribution().max(); } - - private: - engine_value_type _M_engine; - distribution_type _M_dist; - }; - - - /** - * @addtogroup tr1_random_generators Random Number Generators - * @ingroup tr1_random - * - * These classes define objects which provide random or pseudorandom - * numbers, either from a discrete or a continuous interval. The - * random number generator supplied as a part of this library are - * all uniform random number generators which provide a sequence of - * random number uniformly distributed over their range. - * - * A number generator is a function object with an operator() that - * takes zero arguments and returns a number. - * - * A compliant random number generator must satisy the following - * requirements. <table border=1 cellpadding=10 cellspacing=0> - * <caption align=top>Random Number Generator Requirements</caption> - * <tr><td>To be documented.</td></tr> </table> - * - * @{ - */ - - /** - * @brief A model of a linear congruential random number generator. - * - * A random number generator that produces pseudorandom numbers using the - * linear function @f$x_{i+1}\leftarrow(ax_{i} + c) \bmod m @f$. - * - * The template parameter @p _UIntType must be an unsigned integral type - * large enough to store values up to (__m-1). If the template parameter - * @p __m is 0, the modulus @p __m used is - * std::numeric_limits<_UIntType>::max() plus 1. Otherwise, the template - * parameters @p __a and @p __c must be less than @p __m. - * - * The size of the state is @f$ 1 @f$. - */ - template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m> - class linear_congruential - { - __glibcxx_class_requires(_UIntType, _UnsignedIntegerConcept) - // __glibcpp_class_requires(__a < __m && __c < __m) - - public: - /** The type of the generated random value. */ - typedef _UIntType result_type; - - /** The multiplier. */ - static const _UIntType multiplier = __a; - /** An increment. */ - static const _UIntType increment = __c; - /** The modulus. */ - static const _UIntType modulus = __m; - - /** - * Constructs a %linear_congruential random number generator engine with - * seed @p __s. The default seed value is 1. - * - * @param __s The initial seed value. - */ - explicit - linear_congruential(unsigned long __x0 = 1) - { this->seed(__x0); } - - /** - * Constructs a %linear_congruential random number generator engine - * seeded from the generator function @p __g. - * - * @param __g The seed generator function. - */ - template<class _Gen> - linear_congruential(_Gen& __g) - { this->seed(__g); } - - /** - * Reseeds the %linear_congruential random number generator engine - * sequence to the seed @g __s. - * - * @param __s The new seed. - */ - void - seed(unsigned long __s = 1); - - /** - * Reseeds the %linear_congruential random number generator engine - * sequence using values from the generator function @p __g. - * - * @param __g the seed generator function. - */ - template<class _Gen> - void - seed(_Gen& __g) - { seed(__g, typename is_fundamental<_Gen>::type()); } - - /** - * Gets the smallest possible value in the output range. - * - * The minumum depends on the @p __c parameter: if it is zero, the - * minimum generated must be > 0, otherwise 0 is allowed. - */ - result_type - min() const - { return (__detail::__mod<_UIntType, 1, 0, __m>(__c) == 0) ? 1 : 0; } - - /** - * Gets the largest possible value in the output range. - */ - result_type - max() const - { return __m - 1; } - - /** - * Gets the next random number in the sequence. - */ - result_type - operator()(); - - /** - * Compares two linear congruential random number generator - * objects of the same type for equality. - * - * @param __lhs A linear congruential random number generator object. - * @param __rhs Another linear congruential random number generator obj. - * - * @returns true if the two objects are equal, false otherwise. - */ - friend bool - operator==(const linear_congruential& __lhs, - const linear_congruential& __rhs) - { return __lhs._M_x == __rhs._M_x; } - - /** - * Compares two linear congruential random number generator - * objects of the same type for inequality. - * - * @param __lhs A linear congruential random number generator object. - * @param __rhs Another linear congruential random number generator obj. - * - * @returns true if the two objects are not equal, false otherwise. - */ - friend bool - operator!=(const linear_congruential& __lhs, - const linear_congruential& __rhs) - { return !(__lhs == __rhs); } - - /** - * Writes the textual representation of the state x(i) of x to @p __os. - * - * @param __os The output stream. - * @param __lcr A % linear_congruential random number generator. - * @returns __os. - */ - template<class _UIntType1, _UIntType1 __a1, _UIntType1 __c1, - _UIntType1 __m1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const linear_congruential<_UIntType1, __a1, __c1, - __m1>& __lcr); - - /** - * Sets the state of the engine by reading its textual - * representation from @p __is. - * - * The textual representation must have been previously written using an - * output stream whose imbued locale and whose type's template - * specialization arguments _CharT and _Traits were the same as those of - * @p __is. - * - * @param __is The input stream. - * @param __lcr A % linear_congruential random number generator. - * @returns __is. - */ - template<class _UIntType1, _UIntType1 __a1, _UIntType1 __c1, - _UIntType1 __m1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - linear_congruential<_UIntType1, __a1, __c1, __m1>& __lcr); - - private: - template<class _Gen> - void - seed(_Gen& __g, true_type) - { return seed(static_cast<unsigned long>(__g)); } - - template<class _Gen> - void - seed(_Gen& __g, false_type); - - _UIntType _M_x; - }; - - /** - * The classic Minimum Standard rand0 of Lewis, Goodman, and Miller. - */ - typedef linear_congruential<unsigned long, 16807, 0, 2147483647> minstd_rand0; - - /** - * An alternative LCR (Lehmer Generator function) . - */ - typedef linear_congruential<unsigned long, 48271, 0, 2147483647> minstd_rand; - - - /** - * A generalized feedback shift register discrete random number generator. - * - * This algorithm avoind multiplication and division and is designed to be - * friendly to a pipelined architecture. If the parameters are chosen - * correctly, this generator will produce numbers with a very long period and - * fairly good apparent entropy, although still not cryptographically strong. - * - * The best way to use this generator is with the predefined mt19937 class. - * - * This algorithm was originally invented by Makoto Matsumoto and - * Takuji Nishimura. - * - * @var word_size The number of bits in each element of the state vector. - * @var state_size The degree of recursion. - * @var shift_size The period parameter. - * @var mask_bits The separation point bit index. - * @var parameter_a The last row of the twist matrix. - * @var output_u The first right-shift tempering matrix parameter. - * @var output_s The first left-shift tempering matrix parameter. - * @var output_b The first left-shift tempering matrix mask. - * @var output_t The second left-shift tempering matrix parameter. - * @var output_c The second left-shift tempering matrix mask. - * @var output_l The second right-shift tempering matrix parameter. - */ - template<class _UIntType, int __w, int __n, int __m, int __r, - _UIntType __a, int __u, int __s, _UIntType __b, int __t, - _UIntType __c, int __l> - class mersenne_twister - { - __glibcxx_class_requires(_UIntType, _UnsignedIntegerConcept) - - public: - // types - typedef _UIntType result_type; - - // parameter values - static const int word_size = __w; - static const int state_size = __n; - static const int shift_size = __m; - static const int mask_bits = __r; - static const _UIntType parameter_a = __a; - static const int output_u = __u; - static const int output_s = __s; - static const _UIntType output_b = __b; - static const int output_t = __t; - static const _UIntType output_c = __c; - static const int output_l = __l; - - // constructors and member function - mersenne_twister() - { seed(); } - - explicit - mersenne_twister(unsigned long __value) - { seed(__value); } - - template<class _Gen> - mersenne_twister(_Gen& __g) - { seed(__g); } - - void - seed() - { seed(5489UL); } - - void - seed(unsigned long __value); - - template<class _Gen> - void - seed(_Gen& __g) - { seed(__g, typename is_fundamental<_Gen>::type()); } - - result_type - min() const - { return 0; }; - - result_type - max() const - { return __detail::_Shift<_UIntType, __w>::__value - 1; } - - result_type - operator()(); - - /** - * Compares two % mersenne_twister random number generator objects of - * the same type for equality. - * - * @param __lhs A % mersenne_twister random number generator object. - * @param __rhs Another % mersenne_twister random number generator - * object. - * - * @returns true if the two objects are equal, false otherwise. - */ - friend bool - operator==(const mersenne_twister& __lhs, - const mersenne_twister& __rhs) - { return std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x); } - - /** - * Compares two % mersenne_twister random number generator objects of - * the same type for inequality. - * - * @param __lhs A % mersenne_twister random number generator object. - * @param __rhs Another % mersenne_twister random number generator - * object. - * - * @returns true if the two objects are not equal, false otherwise. - */ - friend bool - operator!=(const mersenne_twister& __lhs, - const mersenne_twister& __rhs) - { return !(__lhs == __rhs); } - - /** - * Inserts the current state of a % mersenne_twister random number - * generator engine @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A % mersenne_twister random number generator engine. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<class _UIntType1, int __w1, int __n1, int __m1, int __r1, - _UIntType1 __a1, int __u1, int __s1, _UIntType1 __b1, int __t1, - _UIntType1 __c1, int __l1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const mersenne_twister<_UIntType1, __w1, __n1, __m1, __r1, - __a1, __u1, __s1, __b1, __t1, __c1, __l1>& __x); - - /** - * Extracts the current state of a % mersenne_twister random number - * generator engine @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A % mersenne_twister random number generator engine. - * - * @returns The input stream with the state of @p __x extracted or in - * an error state. - */ - template<class _UIntType1, int __w1, int __n1, int __m1, int __r1, - _UIntType1 __a1, int __u1, int __s1, _UIntType1 __b1, int __t1, - _UIntType1 __c1, int __l1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - mersenne_twister<_UIntType1, __w1, __n1, __m1, __r1, - __a1, __u1, __s1, __b1, __t1, __c1, __l1>& __x); - - private: - template<class _Gen> - void - seed(_Gen& __g, true_type) - { return seed(static_cast<unsigned long>(__g)); } - - template<class _Gen> - void - seed(_Gen& __g, false_type); - - _UIntType _M_x[state_size]; - int _M_p; - }; - - /** - * The classic Mersenne Twister. - * - * Reference: - * M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-Dimensionally - * Equidistributed Uniform Pseudo-Random Number Generator", ACM Transactions - * on Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30. - */ - typedef mersenne_twister< - unsigned long, 32, 624, 397, 31, - 0x9908b0dful, 11, 7, - 0x9d2c5680ul, 15, - 0xefc60000ul, 18 - > mt19937; - - - /** - * @brief The Marsaglia-Zaman generator. - * - * This is a model of a Generalized Fibonacci discrete random number - * generator, sometimes referred to as the SWC generator. - * - * A discrete random number generator that produces pseudorandom - * numbers using @f$x_{i}\leftarrow(x_{i - s} - x_{i - r} - - * carry_{i-1}) \bmod m @f$. - * - * The size of the state is @f$ r @f$ - * and the maximum period of the generator is @f$ m^r - m^s -1 @f$. - * - * N1688[4.13] says "the template parameter _IntType shall denote an integral - * type large enough to store values up to m." - * - * @if maint - * @var _M_x The state of the generator. This is a ring buffer. - * @var _M_carry The carry. - * @var _M_p Current index of x(i - r). - * @endif - */ - template<typename _IntType, _IntType __m, int __s, int __r> - class subtract_with_carry - { - __glibcxx_class_requires(_IntType, _IntegerConcept) - - public: - /** The type of the generated random value. */ - typedef _IntType result_type; - - // parameter values - static const _IntType modulus = __m; - static const int long_lag = __r; - static const int short_lag = __s; - - /** - * Constructs a default-initialized % subtract_with_carry random number - * generator. - */ - subtract_with_carry() - { this->seed(); } - - /** - * Constructs an explicitly seeded % subtract_with_carry random number - * generator. - */ - explicit - subtract_with_carry(unsigned long __value) - { this->seed(__value); } - - /** - * Constructs a %subtract_with_carry random number generator engine - * seeded from the generator function @p __g. - * - * @param __g The seed generator function. - */ - template<class _Gen> - subtract_with_carry(_Gen& __g) - { this->seed(__g); } - - /** - * Seeds the initial state @f$ x_0 @f$ of the random number generator. - * - * N1688[4.19] modifies this as follows. If @p __value == 0, - * sets value to 19780503. In any case, with a linear - * congruential generator lcg(i) having parameters @f$ m_{lcg} = - * 2147483563, a_{lcg} = 40014, c_{lcg} = 0, and lcg(0) = value - * @f$, sets @f$ x_{-r} \dots x_{-1} @f$ to @f$ lcg(1) \bmod m - * \dots lcg(r) \bmod m @f$ respectively. If @f$ x_{-1} = 0 @f$ - * set carry to 1, otherwise sets carry to 0. - */ - void - seed(unsigned long __value = 19780503); - - /** - * Seeds the initial state @f$ x_0 @f$ of the % subtract_with_carry - * random number generator. - */ - template<class _Gen> - void - seed(_Gen& __g) - { seed(__g, typename is_fundamental<_Gen>::type()); } - - /** - * Gets the inclusive minimum value of the range of random integers - * returned by this generator. - */ - result_type - min() const - { return 0; } - - /** - * Gets the inclusive maximum value of the range of random integers - * returned by this generator. - */ - result_type - max() const - { return this->modulus - 1; } - - /** - * Gets the next random number in the sequence. - */ - result_type - operator()(); - - /** - * Compares two % subtract_with_carry random number generator objects of - * the same type for equality. - * - * @param __lhs A % subtract_with_carry random number generator object. - * @param __rhs Another % subtract_with_carry random number generator - * object. - * - * @returns true if the two objects are equal, false otherwise. - */ - friend bool - operator==(const subtract_with_carry& __lhs, - const subtract_with_carry& __rhs) - { return std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x); } - - /** - * Compares two % subtract_with_carry random number generator objects of - * the same type for inequality. - * - * @param __lhs A % subtract_with_carry random number generator object. - * @param __rhs Another % subtract_with_carry random number generator - * object. - * - * @returns true if the two objects are not equal, false otherwise. - */ - friend bool - operator!=(const subtract_with_carry& __lhs, - const subtract_with_carry& __rhs) - { return !(__lhs == __rhs); } - - /** - * Inserts the current state of a % subtract_with_carry random number - * generator engine @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A % subtract_with_carry random number generator engine. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _IntType1, _IntType1 __m1, int __s1, int __r1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const subtract_with_carry<_IntType1, __m1, __s1, - __r1>& __x); - - /** - * Extracts the current state of a % subtract_with_carry random number - * generator engine @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A % subtract_with_carry random number generator engine. - * - * @returns The input stream with the state of @p __x extracted or in - * an error state. - */ - template<typename _IntType1, _IntType1 __m1, int __s1, int __r1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - subtract_with_carry<_IntType1, __m1, __s1, __r1>& __x); - - private: - template<class _Gen> - void - seed(_Gen& __g, true_type) - { return seed(static_cast<unsigned long>(__g)); } - - template<class _Gen> - void - seed(_Gen& __g, false_type); - - typedef typename __gnu_cxx::__add_unsigned<_IntType>::__type _UIntType; - - _UIntType _M_x[long_lag]; - _UIntType _M_carry; - int _M_p; - }; - - - /** - * @brief The Marsaglia-Zaman generator (floats version). - * - * @if maint - * @var _M_x The state of the generator. This is a ring buffer. - * @var _M_carry The carry. - * @var _M_p Current index of x(i - r). - * @var _M_npows Precomputed negative powers of 2. - * @endif - */ - template<typename _RealType, int __w, int __s, int __r> - class subtract_with_carry_01 - { - public: - /** The type of the generated random value. */ - typedef _RealType result_type; - - // parameter values - static const int word_size = __w; - static const int long_lag = __r; - static const int short_lag = __s; - - /** - * Constructs a default-initialized % subtract_with_carry_01 random - * number generator. - */ - subtract_with_carry_01() - { - this->seed(); - _M_initialize_npows(); - } - - /** - * Constructs an explicitly seeded % subtract_with_carry_01 random number - * generator. - */ - explicit - subtract_with_carry_01(unsigned long __value) - { - this->seed(__value); - _M_initialize_npows(); - } - - /** - * Constructs a % subtract_with_carry_01 random number generator engine - * seeded from the generator function @p __g. - * - * @param __g The seed generator function. - */ - template<class _Gen> - subtract_with_carry_01(_Gen& __g) - { - this->seed(__g); - _M_initialize_npows(); - } - - /** - * Seeds the initial state @f$ x_0 @f$ of the random number generator. - */ - void - seed(unsigned long __value = 19780503); - - /** - * Seeds the initial state @f$ x_0 @f$ of the % subtract_with_carry_01 - * random number generator. - */ - template<class _Gen> - void - seed(_Gen& __g) - { seed(__g, typename is_fundamental<_Gen>::type()); } - - /** - * Gets the minimum value of the range of random floats - * returned by this generator. - */ - result_type - min() const - { return 0.0; } - - /** - * Gets the maximum value of the range of random floats - * returned by this generator. - */ - result_type - max() const - { return 1.0; } - - /** - * Gets the next random number in the sequence. - */ - result_type - operator()(); - - /** - * Compares two % subtract_with_carry_01 random number generator objects - * of the same type for equality. - * - * @param __lhs A % subtract_with_carry_01 random number - * generator object. - * @param __rhs Another % subtract_with_carry_01 random number generator - * object. - * - * @returns true if the two objects are equal, false otherwise. - */ - friend bool - operator==(const subtract_with_carry_01& __lhs, - const subtract_with_carry_01& __rhs) - { - for (int __i = 0; __i < long_lag; ++__i) - if (!std::equal(__lhs._M_x[__i], __lhs._M_x[__i] + __n, - __rhs._M_x[__i])) - return false; - return true; - } - - /** - * Compares two % subtract_with_carry_01 random number generator objects - * of the same type for inequality. - * - * @param __lhs A % subtract_with_carry_01 random number - * generator object. - * - * @param __rhs Another % subtract_with_carry_01 random number generator - * object. - * - * @returns true if the two objects are not equal, false otherwise. - */ - friend bool - operator!=(const subtract_with_carry_01& __lhs, - const subtract_with_carry_01& __rhs) - { return !(__lhs == __rhs); } - - /** - * Inserts the current state of a % subtract_with_carry_01 random number - * generator engine @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A % subtract_with_carry_01 random number generator engine. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _RealType1, int __w1, int __s1, int __r1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const subtract_with_carry_01<_RealType1, __w1, __s1, - __r1>& __x); - - /** - * Extracts the current state of a % subtract_with_carry_01 random number - * generator engine @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A % subtract_with_carry_01 random number generator engine. - * - * @returns The input stream with the state of @p __x extracted or in - * an error state. - */ - template<typename _RealType1, int __w1, int __s1, int __r1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - subtract_with_carry_01<_RealType1, __w1, __s1, __r1>& __x); - - private: - template<class _Gen> - void - seed(_Gen& __g, true_type) - { return seed(static_cast<unsigned long>(__g)); } - - template<class _Gen> - void - seed(_Gen& __g, false_type); - - void - _M_initialize_npows(); - - static const int __n = (__w + 31) / 32; - - typedef __detail::_UInt32Type _UInt32Type; - _UInt32Type _M_x[long_lag][__n]; - _RealType _M_npows[__n]; - _UInt32Type _M_carry; - int _M_p; - }; - - typedef subtract_with_carry_01<float, 24, 10, 24> ranlux_base_01; - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 508. Bad parameters for ranlux64_base_01. - typedef subtract_with_carry_01<double, 48, 5, 12> ranlux64_base_01; - - - /** - * Produces random numbers from some base engine by discarding blocks of - * data. - * - * 0 <= @p __r <= @p __p - */ - template<class _UniformRandomNumberGenerator, int __p, int __r> - class discard_block - { - // __glibcxx_class_requires(typename base_type::result_type, - // ArithmeticTypeConcept) - - public: - /** The type of the underlying generator engine. */ - typedef _UniformRandomNumberGenerator base_type; - /** The type of the generated random value. */ - typedef typename base_type::result_type result_type; - - // parameter values - static const int block_size = __p; - static const int used_block = __r; - - /** - * Constructs a default %discard_block engine. - * - * The underlying engine is default constructed as well. - */ - discard_block() - : _M_n(0) { } - - /** - * Copy constructs a %discard_block engine. - * - * Copies an existing base class random number geenerator. - * @param rng An existing (base class) engine object. - */ - explicit - discard_block(const base_type& __rng) - : _M_b(__rng), _M_n(0) { } - - /** - * Seed constructs a %discard_block engine. - * - * Constructs the underlying generator engine seeded with @p __s. - * @param __s A seed value for the base class engine. - */ - explicit - discard_block(unsigned long __s) - : _M_b(__s), _M_n(0) { } - - /** - * Generator construct a %discard_block engine. - * - * @param __g A seed generator function. - */ - template<class _Gen> - discard_block(_Gen& __g) - : _M_b(__g), _M_n(0) { } - - /** - * Reseeds the %discard_block object with the default seed for the - * underlying base class generator engine. - */ - void seed() - { - _M_b.seed(); - _M_n = 0; - } - - /** - * Reseeds the %discard_block object with the given seed generator - * function. - * @param __g A seed generator function. - */ - template<class _Gen> - void seed(_Gen& __g) - { - _M_b.seed(__g); - _M_n = 0; - } - - /** - * Gets a const reference to the underlying generator engine object. - */ - const base_type& - base() const - { return _M_b; } - - /** - * Gets the minimum value in the generated random number range. - */ - result_type - min() const - { return _M_b.min(); } - - /** - * Gets the maximum value in the generated random number range. - */ - result_type - max() const - { return _M_b.max(); } - - /** - * Gets the next value in the generated random number sequence. - */ - result_type - operator()(); - - /** - * Compares two %discard_block random number generator objects of - * the same type for equality. - * - * @param __lhs A %discard_block random number generator object. - * @param __rhs Another %discard_block random number generator - * object. - * - * @returns true if the two objects are equal, false otherwise. - */ - friend bool - operator==(const discard_block& __lhs, const discard_block& __rhs) - { return (__lhs._M_b == __rhs._M_b) && (__lhs._M_n == __rhs._M_n); } - - /** - * Compares two %discard_block random number generator objects of - * the same type for inequality. - * - * @param __lhs A %discard_block random number generator object. - * @param __rhs Another %discard_block random number generator - * object. - * - * @returns true if the two objects are not equal, false otherwise. - */ - friend bool - operator!=(const discard_block& __lhs, const discard_block& __rhs) - { return !(__lhs == __rhs); } - - /** - * Inserts the current state of a %discard_block random number - * generator engine @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %discard_block random number generator engine. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<class _UniformRandomNumberGenerator1, int __p1, int __r1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const discard_block<_UniformRandomNumberGenerator1, - __p1, __r1>& __x); - - /** - * Extracts the current state of a % subtract_with_carry random number - * generator engine @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %discard_block random number generator engine. - * - * @returns The input stream with the state of @p __x extracted or in - * an error state. - */ - template<class _UniformRandomNumberGenerator1, int __p1, int __r1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - discard_block<_UniformRandomNumberGenerator1, - __p1, __r1>& __x); - - private: - base_type _M_b; - int _M_n; - }; - - - /** - * James's luxury-level-3 integer adaptation of Luescher's generator. - */ - typedef discard_block< - subtract_with_carry<unsigned long, (1UL << 24), 10, 24>, - 223, - 24 - > ranlux3; - - /** - * James's luxury-level-4 integer adaptation of Luescher's generator. - */ - typedef discard_block< - subtract_with_carry<unsigned long, (1UL << 24), 10, 24>, - 389, - 24 - > ranlux4; - - typedef discard_block< - subtract_with_carry_01<float, 24, 10, 24>, - 223, - 24 - > ranlux3_01; - - typedef discard_block< - subtract_with_carry_01<float, 24, 10, 24>, - 389, - 24 - > ranlux4_01; - - - /** - * A random number generator adaptor class that combines two random number - * generator engines into a single output sequence. - */ - template<class _UniformRandomNumberGenerator1, int __s1, - class _UniformRandomNumberGenerator2, int __s2> - class xor_combine - { - // __glibcxx_class_requires(typename _UniformRandomNumberGenerator1:: - // result_type, ArithmeticTypeConcept) - // __glibcxx_class_requires(typename _UniformRandomNumberGenerator2:: - // result_type, ArithmeticTypeConcept) - - public: - /** The type of the the first underlying generator engine. */ - typedef _UniformRandomNumberGenerator1 base1_type; - /** The type of the the second underlying generator engine. */ - typedef _UniformRandomNumberGenerator2 base2_type; - - private: - typedef typename base1_type::result_type _Result_type1; - typedef typename base2_type::result_type _Result_type2; - - public: - /** The type of the generated random value. */ - typedef typename __gnu_cxx::__conditional_type<(sizeof(_Result_type1) - > sizeof(_Result_type2)), - _Result_type1, _Result_type2>::__type result_type; - - // parameter values - static const int shift1 = __s1; - static const int shift2 = __s2; - - // constructors and member function - xor_combine() - : _M_b1(), _M_b2() - { _M_initialize_max(); } - - xor_combine(const base1_type& __rng1, const base2_type& __rng2) - : _M_b1(__rng1), _M_b2(__rng2) - { _M_initialize_max(); } - - xor_combine(unsigned long __s) - : _M_b1(__s), _M_b2(__s + 1) - { _M_initialize_max(); } - - template<class _Gen> - xor_combine(_Gen& __g) - : _M_b1(__g), _M_b2(__g) - { _M_initialize_max(); } - - void - seed() - { - _M_b1.seed(); - _M_b2.seed(); - } - - template<class _Gen> - void - seed(_Gen& __g) - { - _M_b1.seed(__g); - _M_b2.seed(__g); - } - - const base1_type& - base1() const - { return _M_b1; } - - const base2_type& - base2() const - { return _M_b2; } - - result_type - min() const - { return 0; } - - result_type - max() const - { return _M_max; } - - /** - * Gets the next random number in the sequence. - */ - // NB: Not exactly the TR1 formula, per N2079 instead. - result_type - operator()() - { - return ((result_type(_M_b1() - _M_b1.min()) << shift1) - ^ (result_type(_M_b2() - _M_b2.min()) << shift2)); - } - - /** - * Compares two %xor_combine random number generator objects of - * the same type for equality. - * - * @param __lhs A %xor_combine random number generator object. - * @param __rhs Another %xor_combine random number generator - * object. - * - * @returns true if the two objects are equal, false otherwise. - */ - friend bool - operator==(const xor_combine& __lhs, const xor_combine& __rhs) - { - return (__lhs.base1() == __rhs.base1()) - && (__lhs.base2() == __rhs.base2()); - } - - /** - * Compares two %xor_combine random number generator objects of - * the same type for inequality. - * - * @param __lhs A %xor_combine random number generator object. - * @param __rhs Another %xor_combine random number generator - * object. - * - * @returns true if the two objects are not equal, false otherwise. - */ - friend bool - operator!=(const xor_combine& __lhs, const xor_combine& __rhs) - { return !(__lhs == __rhs); } - - /** - * Inserts the current state of a %xor_combine random number - * generator engine @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %xor_combine random number generator engine. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<class _UniformRandomNumberGenerator11, int __s11, - class _UniformRandomNumberGenerator21, int __s21, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const xor_combine<_UniformRandomNumberGenerator11, __s11, - _UniformRandomNumberGenerator21, __s21>& __x); - - /** - * Extracts the current state of a %xor_combine random number - * generator engine @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %xor_combine random number generator engine. - * - * @returns The input stream with the state of @p __x extracted or in - * an error state. - */ - template<class _UniformRandomNumberGenerator11, int __s11, - class _UniformRandomNumberGenerator21, int __s21, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - xor_combine<_UniformRandomNumberGenerator11, __s11, - _UniformRandomNumberGenerator21, __s21>& __x); - - private: - void - _M_initialize_max(); - - result_type - _M_initialize_max_aux(result_type, result_type, int); - - base1_type _M_b1; - base2_type _M_b2; - result_type _M_max; - }; - - - /** - * A standard interface to a platform-specific non-deterministic - * random number generator (if any are available). - */ - class random_device - { - public: - // types - typedef unsigned int result_type; - - // constructors, destructors and member functions - -#ifdef _GLIBCXX_USE_RANDOM_TR1 - - explicit - random_device(const std::string& __token = "/dev/urandom") - { - if ((__token != "/dev/urandom" && __token != "/dev/random") - || !(_M_file = std::fopen(__token.c_str(), "rb"))) - std::__throw_runtime_error(__N("random_device::" - "random_device(const std::string&)")); - } - - ~random_device() - { std::fclose(_M_file); } - -#else - - explicit - random_device(const std::string& __token = "mt19937") - : _M_mt(_M_strtoul(__token)) { } - - private: - static unsigned long - _M_strtoul(const std::string& __str) - { - unsigned long __ret = 5489UL; - if (__str != "mt19937") - { - const char* __nptr = __str.c_str(); - char* __endptr; - __ret = std::strtoul(__nptr, &__endptr, 0); - if (*__nptr == '\0' || *__endptr != '\0') - std::__throw_runtime_error(__N("random_device::_M_strtoul" - "(const std::string&)")); - } - return __ret; - } - - public: - -#endif - - result_type - min() const - { return std::numeric_limits<result_type>::min(); } - - result_type - max() const - { return std::numeric_limits<result_type>::max(); } - - double - entropy() const - { return 0.0; } - - result_type - operator()() - { -#ifdef _GLIBCXX_USE_RANDOM_TR1 - result_type __ret; - std::fread(reinterpret_cast<void*>(&__ret), sizeof(result_type), - 1, _M_file); - return __ret; -#else - return _M_mt(); -#endif - } - - private: - random_device(const random_device&); - void operator=(const random_device&); - -#ifdef _GLIBCXX_USE_RANDOM_TR1 - FILE* _M_file; -#else - mt19937 _M_mt; -#endif - }; - - /* @} */ // group tr1_random_generators - - /** - * @addtogroup tr1_random_distributions Random Number Distributions - * @ingroup tr1_random - * @{ - */ - - /** - * @addtogroup tr1_random_distributions_discrete Discrete Distributions - * @ingroup tr1_random_distributions - * @{ - */ - - /** - * @brief Uniform discrete distribution for random numbers. - * A discrete random distribution on the range @f$[min, max]@f$ with equal - * probability throughout the range. - */ - template<typename _IntType = int> - class uniform_int - { - __glibcxx_class_requires(_IntType, _IntegerConcept) - - public: - /** The type of the parameters of the distribution. */ - typedef _IntType input_type; - /** The type of the range of the distribution. */ - typedef _IntType result_type; - - public: - /** - * Constructs a uniform distribution object. - */ - explicit - uniform_int(_IntType __min = 0, _IntType __max = 9) - : _M_min(__min), _M_max(__max) - { - _GLIBCXX_DEBUG_ASSERT(_M_min <= _M_max); - } - - /** - * Gets the inclusive lower bound of the distribution range. - */ - result_type - min() const - { return _M_min; } - - /** - * Gets the inclusive upper bound of the distribution range. - */ - result_type - max() const - { return _M_max; } - - /** - * Resets the distribution state. - * - * Does nothing for the uniform integer distribution. - */ - void - reset() { } - - /** - * Gets a uniformly distributed random number in the range - * @f$(min, max)@f$. - */ - template<typename _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng) - { - typedef typename _UniformRandomNumberGenerator::result_type - _UResult_type; - return _M_call(__urng, _M_min, _M_max, - typename is_integral<_UResult_type>::type()); - } - - /** - * Gets a uniform random number in the range @f$[0, n)@f$. - * - * This function is aimed at use with std::random_shuffle. - */ - template<typename _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng, result_type __n) - { - typedef typename _UniformRandomNumberGenerator::result_type - _UResult_type; - return _M_call(__urng, 0, __n - 1, - typename is_integral<_UResult_type>::type()); - } - - /** - * Inserts a %uniform_int random number distribution @p __x into the - * output stream @p os. - * - * @param __os An output stream. - * @param __x A %uniform_int random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _IntType1, typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const uniform_int<_IntType1>& __x); - - /** - * Extracts a %unform_int random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %uniform_int random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _IntType1, typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - uniform_int<_IntType1>& __x); - - private: - template<typename _UniformRandomNumberGenerator> - result_type - _M_call(_UniformRandomNumberGenerator& __urng, - result_type __min, result_type __max, true_type) - { - // XXX Must be fixed to also work when __urng.max() - __urng.min() - // is smaller than __max - __min. - typedef typename __gnu_cxx::__add_unsigned<typename - _UniformRandomNumberGenerator::result_type>::__type __utype; - return result_type((__max - __min + 1.0L) - * (__utype(__urng()) - __utype(__urng.min())) - / (__utype(__urng.max()) - - __utype(__urng.min()) + 1.0L)) + __min; - } - - template<typename _UniformRandomNumberGenerator> - result_type - _M_call(_UniformRandomNumberGenerator& __urng, - result_type __min, result_type __max, false_type) - { - return result_type((__urng() - __urng.min()) - / (__urng.max() - __urng.min()) - * (__max - __min + 1)) + __min; - } - - _IntType _M_min; - _IntType _M_max; - }; - - - /** - * @brief A Bernoulli random number distribution. - * - * Generates a sequence of true and false values with likelihood @f$ p @f$ - * that true will come up and @f$ (1 - p) @f$ that false will appear. - */ - class bernoulli_distribution - { - public: - typedef int input_type; - typedef bool result_type; - - public: - /** - * Constructs a Bernoulli distribution with likelihood @p p. - * - * @param __p [IN] The likelihood of a true result being returned. Must - * be in the interval @f$ [0, 1] @f$. - */ - explicit - bernoulli_distribution(double __p = 0.5) - : _M_p(__p) - { - _GLIBCXX_DEBUG_ASSERT((_M_p >= 0.0) && (_M_p <= 1.0)); - } - - /** - * Gets the @p p parameter of the distribution. - */ - double - p() const - { return _M_p; } - - /** - * Resets the distribution state. - * - * Does nothing for a bernoulli distribution. - */ - void - reset() { } - - /** - * Gets the next value in the Bernoullian sequence. - */ - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng) - { - if ((__urng() - __urng.min()) < _M_p * (__urng.max() - __urng.min())) - return true; - return false; - } - - /** - * Inserts a %bernoulli_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %bernoulli_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const bernoulli_distribution& __x); - - /** - * Extracts a %bernoulli_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %bernoulli_distribution random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - bernoulli_distribution& __x) - { return __is >> __x._M_p; } - - private: - double _M_p; - }; - - - /** - * @brief A discrete geometric random number distribution. - * - * The formula for the geometric probability mass function is - * @f$ p(i) = (1 - p)p^{i-1} @f$ where @f$ p @f$ is the parameter of the - * distribution. - */ - template<typename _IntType = int, typename _RealType = double> - class geometric_distribution - { - public: - // types - typedef _RealType input_type; - typedef _IntType result_type; - - // constructors and member function - explicit - geometric_distribution(const _RealType& __p = _RealType(0.5)) - : _M_p(__p) - { - _GLIBCXX_DEBUG_ASSERT((_M_p > 0.0) && (_M_p < 1.0)); - _M_initialize(); - } - - /** - * Gets the distribution parameter @p p. - */ - _RealType - p() const - { return _M_p; } - - void - reset() { } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng); - - /** - * Inserts a %geometric_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %geometric_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _IntType1, typename _RealType1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const geometric_distribution<_IntType1, _RealType1>& __x); - - /** - * Extracts a %geometric_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %geometric_distribution random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - geometric_distribution& __x) - { - __is >> __x._M_p; - __x._M_initialize(); - return __is; - } - - private: - void - _M_initialize() - { _M_log_p = std::log(_M_p); } - - _RealType _M_p; - _RealType _M_log_p; - }; - - - template<typename _RealType> - class normal_distribution; - - /** - * @brief A discrete Poisson random number distribution. - * - * The formula for the poisson probability mass function is - * @f$ p(i) = \frac{mean^i}{i!} e^{-mean} @f$ where @f$ mean @f$ is the - * parameter of the distribution. - */ - template<typename _IntType = int, typename _RealType = double> - class poisson_distribution - { - public: - // types - typedef _RealType input_type; - typedef _IntType result_type; - - // constructors and member function - explicit - poisson_distribution(const _RealType& __mean = _RealType(1)) - : _M_mean(__mean), _M_nd() - { - _GLIBCXX_DEBUG_ASSERT(_M_mean > 0.0); - _M_initialize(); - } - - /** - * Gets the distribution parameter @p mean. - */ - _RealType - mean() const - { return _M_mean; } - - void - reset() - { _M_nd.reset(); } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng); - - /** - * Inserts a %poisson_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %poisson_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _IntType1, typename _RealType1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const poisson_distribution<_IntType1, _RealType1>& __x); - - /** - * Extracts a %poisson_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %poisson_distribution random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _IntType1, typename _RealType1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - poisson_distribution<_IntType1, _RealType1>& __x); - - private: - void - _M_initialize(); - - // NB: Unused when _GLIBCXX_USE_C99_MATH_TR1 is undefined. - normal_distribution<_RealType> _M_nd; - - _RealType _M_mean; - - // Hosts either log(mean) or the threshold of the simple method. - _RealType _M_lm_thr; -#if _GLIBCXX_USE_C99_MATH_TR1 - _RealType _M_lfm, _M_sm, _M_d, _M_scx, _M_1cx, _M_c2b, _M_cb; -#endif - }; - - - /** - * @brief A discrete binomial random number distribution. - * - * The formula for the binomial probability mass function is - * @f$ p(i) = \binom{n}{i} p^i (1 - p)^{t - i} @f$ where @f$ t @f$ - * and @f$ p @f$ are the parameters of the distribution. - */ - template<typename _IntType = int, typename _RealType = double> - class binomial_distribution - { - public: - // types - typedef _RealType input_type; - typedef _IntType result_type; - - // constructors and member function - explicit - binomial_distribution(_IntType __t = 1, - const _RealType& __p = _RealType(0.5)) - : _M_t(__t), _M_p(__p), _M_nd() - { - _GLIBCXX_DEBUG_ASSERT((_M_t >= 0) && (_M_p >= 0.0) && (_M_p <= 1.0)); - _M_initialize(); - } - - /** - * Gets the distribution @p t parameter. - */ - _IntType - t() const - { return _M_t; } - - /** - * Gets the distribution @p p parameter. - */ - _RealType - p() const - { return _M_p; } - - void - reset() - { _M_nd.reset(); } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng); - - /** - * Inserts a %binomial_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %binomial_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _IntType1, typename _RealType1, - typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const binomial_distribution<_IntType1, _RealType1>& __x); - - /** - * Extracts a %binomial_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %binomial_distribution random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _IntType1, typename _RealType1, - typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - binomial_distribution<_IntType1, _RealType1>& __x); - - private: - void - _M_initialize(); - - template<class _UniformRandomNumberGenerator> - result_type - _M_waiting(_UniformRandomNumberGenerator& __urng, _IntType __t); - - // NB: Unused when _GLIBCXX_USE_C99_MATH_TR1 is undefined. - normal_distribution<_RealType> _M_nd; - - _RealType _M_q; -#if _GLIBCXX_USE_C99_MATH_TR1 - _RealType _M_d1, _M_d2, _M_s1, _M_s2, _M_c, - _M_a1, _M_a123, _M_s, _M_lf, _M_lp1p; -#endif - _RealType _M_p; - _IntType _M_t; - - bool _M_easy; - }; - - /* @} */ // group tr1_random_distributions_discrete - - /** - * @addtogroup tr1_random_distributions_continuous Continuous Distributions - * @ingroup tr1_random_distributions - * @{ - */ - - /** - * @brief Uniform continuous distribution for random numbers. - * - * A continuous random distribution on the range [min, max) with equal - * probability throughout the range. The URNG should be real-valued and - * deliver number in the range [0, 1). - */ - template<typename _RealType = double> - class uniform_real - { - public: - // types - typedef _RealType input_type; - typedef _RealType result_type; - - public: - /** - * Constructs a uniform_real object. - * - * @param __min [IN] The lower bound of the distribution. - * @param __max [IN] The upper bound of the distribution. - */ - explicit - uniform_real(_RealType __min = _RealType(0), - _RealType __max = _RealType(1)) - : _M_min(__min), _M_max(__max) - { - _GLIBCXX_DEBUG_ASSERT(_M_min <= _M_max); - } - - result_type - min() const - { return _M_min; } - - result_type - max() const - { return _M_max; } - - void - reset() { } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng) - { return (__urng() * (_M_max - _M_min)) + _M_min; } - - /** - * Inserts a %uniform_real random number distribution @p __x into the - * output stream @p __os. - * - * @param __os An output stream. - * @param __x A %uniform_real random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _RealType1, typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const uniform_real<_RealType1>& __x); - - /** - * Extracts a %unform_real random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %uniform_real random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _RealType1, typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - uniform_real<_RealType1>& __x); - - private: - _RealType _M_min; - _RealType _M_max; - }; - - - /** - * @brief An exponential continuous distribution for random numbers. - * - * The formula for the exponential probability mass function is - * @f$ p(x) = \lambda e^{-\lambda x} @f$. - * - * <table border=1 cellpadding=10 cellspacing=0> - * <caption align=top>Distribution Statistics</caption> - * <tr><td>Mean</td><td>@f$ \frac{1}{\lambda} @f$</td></tr> - * <tr><td>Median</td><td>@f$ \frac{\ln 2}{\lambda} @f$</td></tr> - * <tr><td>Mode</td><td>@f$ zero @f$</td></tr> - * <tr><td>Range</td><td>@f$[0, \infty]@f$</td></tr> - * <tr><td>Standard Deviation</td><td>@f$ \frac{1}{\lambda} @f$</td></tr> - * </table> - */ - template<typename _RealType = double> - class exponential_distribution - { - public: - // types - typedef _RealType input_type; - typedef _RealType result_type; - - public: - /** - * Constructs an exponential distribution with inverse scale parameter - * @f$ \lambda @f$. - */ - explicit - exponential_distribution(const result_type& __lambda = result_type(1)) - : _M_lambda(__lambda) - { - _GLIBCXX_DEBUG_ASSERT(_M_lambda > 0); - } - - /** - * Gets the inverse scale parameter of the distribution. - */ - _RealType - lambda() const - { return _M_lambda; } - - /** - * Resets the distribution. - * - * Has no effect on exponential distributions. - */ - void - reset() { } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng) - { return -std::log(__urng()) / _M_lambda; } - - /** - * Inserts a %exponential_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %exponential_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _RealType1, typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const exponential_distribution<_RealType1>& __x); - - /** - * Extracts a %exponential_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %exponential_distribution random number - * generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - exponential_distribution& __x) - { return __is >> __x._M_lambda; } - - private: - result_type _M_lambda; - }; - - - /** - * @brief A normal continuous distribution for random numbers. - * - * The formula for the normal probability mass function is - * @f$ p(x) = \frac{1}{\sigma \sqrt{2 \pi}} - * e^{- \frac{{x - mean}^ {2}}{2 \sigma ^ {2}} } @f$. - */ - template<typename _RealType = double> - class normal_distribution - { - public: - // types - typedef _RealType input_type; - typedef _RealType result_type; - - public: - /** - * Constructs a normal distribution with parameters @f$ mean @f$ and - * @f$ \sigma @f$. - */ - explicit - normal_distribution(const result_type& __mean = result_type(0), - const result_type& __sigma = result_type(1)) - : _M_mean(__mean), _M_sigma(__sigma), _M_saved_available(false) - { - _GLIBCXX_DEBUG_ASSERT(_M_sigma > 0); - } - - /** - * Gets the mean of the distribution. - */ - _RealType - mean() const - { return _M_mean; } - - /** - * Gets the @f$ \sigma @f$ of the distribution. - */ - _RealType - sigma() const - { return _M_sigma; } - - /** - * Resets the distribution. - */ - void - reset() - { _M_saved_available = false; } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng); - - /** - * Inserts a %normal_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %normal_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _RealType1, typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const normal_distribution<_RealType1>& __x); - - /** - * Extracts a %normal_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %normal_distribution random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _RealType1, typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - normal_distribution<_RealType1>& __x); - - private: - result_type _M_mean; - result_type _M_sigma; - result_type _M_saved; - bool _M_saved_available; - }; - - - /** - * @brief A gamma continuous distribution for random numbers. - * - * The formula for the gamma probability mass function is - * @f$ p(x) = \frac{1}{\Gamma(\alpha)} x^{\alpha - 1} e^{-x} @f$. - */ - template<typename _RealType = double> - class gamma_distribution - { - public: - // types - typedef _RealType input_type; - typedef _RealType result_type; - - public: - /** - * Constructs a gamma distribution with parameters @f$ \alpha @f$. - */ - explicit - gamma_distribution(const result_type& __alpha_val = result_type(1)) - : _M_alpha(__alpha_val) - { - _GLIBCXX_DEBUG_ASSERT(_M_alpha > 0); - _M_initialize(); - } - - /** - * Gets the @f$ \alpha @f$ of the distribution. - */ - _RealType - alpha() const - { return _M_alpha; } - - /** - * Resets the distribution. - */ - void - reset() { } - - template<class _UniformRandomNumberGenerator> - result_type - operator()(_UniformRandomNumberGenerator& __urng); - - /** - * Inserts a %gamma_distribution random number distribution - * @p __x into the output stream @p __os. - * - * @param __os An output stream. - * @param __x A %gamma_distribution random number distribution. - * - * @returns The output stream with the state of @p __x inserted or in - * an error state. - */ - template<typename _RealType1, typename _CharT, typename _Traits> - friend std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const gamma_distribution<_RealType1>& __x); - - /** - * Extracts a %gamma_distribution random number distribution - * @p __x from the input stream @p __is. - * - * @param __is An input stream. - * @param __x A %gamma_distribution random number generator engine. - * - * @returns The input stream with @p __x extracted or in an error state. - */ - template<typename _CharT, typename _Traits> - friend std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - gamma_distribution& __x) - { - __is >> __x._M_alpha; - __x._M_initialize(); - return __is; - } - - private: - void - _M_initialize(); - - result_type _M_alpha; - - // Hosts either lambda of GB or d of modified Vaduva's. - result_type _M_l_d; - }; - - /* @} */ // group tr1_random_distributions_continuous - /* @} */ // group tr1_random_distributions - /* @} */ // group tr1_random - -_GLIBCXX_END_NAMESPACE -} - -#include <tr1/random.tcc> - -#endif // _TR1_RANDOM diff --git a/contrib/libstdc++/include/tr1/random.tcc b/contrib/libstdc++/include/tr1/random.tcc deleted file mode 100644 index 3962816c8cef9..0000000000000 --- a/contrib/libstdc++/include/tr1/random.tcc +++ /dev/null @@ -1,1547 +0,0 @@ -// random number generation (out of line) -*- C++ -*- - -// Copyright (C) 2006, 2007 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. - -/** @file tr1/random.tcc - * This is a TR1 C++ Library header. - */ - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - /* - * (Further) implementation-space details. - */ - namespace __detail - { - // General case for x = (ax + c) mod m -- use Schrage's algorithm to avoid - // integer overflow. - // - // Because a and c are compile-time integral constants the compiler kindly - // elides any unreachable paths. - // - // Preconditions: a > 0, m > 0. - // - template<typename _Tp, _Tp __a, _Tp __c, _Tp __m, bool> - struct _Mod - { - static _Tp - __calc(_Tp __x) - { - if (__a == 1) - __x %= __m; - else - { - static const _Tp __q = __m / __a; - static const _Tp __r = __m % __a; - - _Tp __t1 = __a * (__x % __q); - _Tp __t2 = __r * (__x / __q); - if (__t1 >= __t2) - __x = __t1 - __t2; - else - __x = __m - __t2 + __t1; - } - - if (__c != 0) - { - const _Tp __d = __m - __x; - if (__d > __c) - __x += __c; - else - __x = __c - __d; - } - return __x; - } - }; - - // Special case for m == 0 -- use unsigned integer overflow as modulo - // operator. - template<typename _Tp, _Tp __a, _Tp __c, _Tp __m> - struct _Mod<_Tp, __a, __c, __m, true> - { - static _Tp - __calc(_Tp __x) - { return __a * __x + __c; } - }; - } // namespace __detail - - /** - * Seeds the LCR with integral value @p __x0, adjusted so that the - * ring identity is never a member of the convergence set. - */ - template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m> - void - linear_congruential<_UIntType, __a, __c, __m>:: - seed(unsigned long __x0) - { - if ((__detail::__mod<_UIntType, 1, 0, __m>(__c) == 0) - && (__detail::__mod<_UIntType, 1, 0, __m>(__x0) == 0)) - _M_x = __detail::__mod<_UIntType, 1, 0, __m>(1); - else - _M_x = __detail::__mod<_UIntType, 1, 0, __m>(__x0); - } - - /** - * Seeds the LCR engine with a value generated by @p __g. - */ - template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m> - template<class _Gen> - void - linear_congruential<_UIntType, __a, __c, __m>:: - seed(_Gen& __g, false_type) - { - _UIntType __x0 = __g(); - if ((__detail::__mod<_UIntType, 1, 0, __m>(__c) == 0) - && (__detail::__mod<_UIntType, 1, 0, __m>(__x0) == 0)) - _M_x = __detail::__mod<_UIntType, 1, 0, __m>(1); - else - _M_x = __detail::__mod<_UIntType, 1, 0, __m>(__x0); - } - - /** - * Gets the next generated value in sequence. - */ - template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m> - typename linear_congruential<_UIntType, __a, __c, __m>::result_type - linear_congruential<_UIntType, __a, __c, __m>:: - operator()() - { - _M_x = __detail::__mod<_UIntType, __a, __c, __m>(_M_x); - return _M_x; - } - - template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const linear_congruential<_UIntType, __a, __c, __m>& __lcr) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); - __os.fill(__os.widen(' ')); - - __os << __lcr._M_x; - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<class _UIntType, _UIntType __a, _UIntType __c, _UIntType __m, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - linear_congruential<_UIntType, __a, __c, __m>& __lcr) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec); - - __is >> __lcr._M_x; - - __is.flags(__flags); - return __is; - } - - - template<class _UIntType, int __w, int __n, int __m, int __r, - _UIntType __a, int __u, int __s, - _UIntType __b, int __t, _UIntType __c, int __l> - void - mersenne_twister<_UIntType, __w, __n, __m, __r, __a, __u, __s, - __b, __t, __c, __l>:: - seed(unsigned long __value) - { - _M_x[0] = __detail::__mod<_UIntType, 1, 0, - __detail::_Shift<_UIntType, __w>::__value>(__value); - - for (int __i = 1; __i < state_size; ++__i) - { - _UIntType __x = _M_x[__i - 1]; - __x ^= __x >> (__w - 2); - __x *= 1812433253ul; - __x += __i; - _M_x[__i] = __detail::__mod<_UIntType, 1, 0, - __detail::_Shift<_UIntType, __w>::__value>(__x); - } - _M_p = state_size; - } - - template<class _UIntType, int __w, int __n, int __m, int __r, - _UIntType __a, int __u, int __s, - _UIntType __b, int __t, _UIntType __c, int __l> - template<class _Gen> - void - mersenne_twister<_UIntType, __w, __n, __m, __r, __a, __u, __s, - __b, __t, __c, __l>:: - seed(_Gen& __gen, false_type) - { - for (int __i = 0; __i < state_size; ++__i) - _M_x[__i] = __detail::__mod<_UIntType, 1, 0, - __detail::_Shift<_UIntType, __w>::__value>(__gen()); - _M_p = state_size; - } - - template<class _UIntType, int __w, int __n, int __m, int __r, - _UIntType __a, int __u, int __s, - _UIntType __b, int __t, _UIntType __c, int __l> - typename - mersenne_twister<_UIntType, __w, __n, __m, __r, __a, __u, __s, - __b, __t, __c, __l>::result_type - mersenne_twister<_UIntType, __w, __n, __m, __r, __a, __u, __s, - __b, __t, __c, __l>:: - operator()() - { - // Reload the vector - cost is O(n) amortized over n calls. - if (_M_p >= state_size) - { - const _UIntType __upper_mask = (~_UIntType()) << __r; - const _UIntType __lower_mask = ~__upper_mask; - - for (int __k = 0; __k < (__n - __m); ++__k) - { - _UIntType __y = ((_M_x[__k] & __upper_mask) - | (_M_x[__k + 1] & __lower_mask)); - _M_x[__k] = (_M_x[__k + __m] ^ (__y >> 1) - ^ ((__y & 0x01) ? __a : 0)); - } - - for (int __k = (__n - __m); __k < (__n - 1); ++__k) - { - _UIntType __y = ((_M_x[__k] & __upper_mask) - | (_M_x[__k + 1] & __lower_mask)); - _M_x[__k] = (_M_x[__k + (__m - __n)] ^ (__y >> 1) - ^ ((__y & 0x01) ? __a : 0)); - } - - _UIntType __y = ((_M_x[__n - 1] & __upper_mask) - | (_M_x[0] & __lower_mask)); - _M_x[__n - 1] = (_M_x[__m - 1] ^ (__y >> 1) - ^ ((__y & 0x01) ? __a : 0)); - _M_p = 0; - } - - // Calculate o(x(i)). - result_type __z = _M_x[_M_p++]; - __z ^= (__z >> __u); - __z ^= (__z << __s) & __b; - __z ^= (__z << __t) & __c; - __z ^= (__z >> __l); - - return __z; - } - - template<class _UIntType, int __w, int __n, int __m, int __r, - _UIntType __a, int __u, int __s, _UIntType __b, int __t, - _UIntType __c, int __l, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const mersenne_twister<_UIntType, __w, __n, __m, - __r, __a, __u, __s, __b, __t, __c, __l>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); - __os.fill(__space); - - for (int __i = 0; __i < __n - 1; ++__i) - __os << __x._M_x[__i] << __space; - __os << __x._M_x[__n - 1]; - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<class _UIntType, int __w, int __n, int __m, int __r, - _UIntType __a, int __u, int __s, _UIntType __b, int __t, - _UIntType __c, int __l, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - mersenne_twister<_UIntType, __w, __n, __m, - __r, __a, __u, __s, __b, __t, __c, __l>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - for (int __i = 0; __i < __n; ++__i) - __is >> __x._M_x[__i]; - - __is.flags(__flags); - return __is; - } - - - template<typename _IntType, _IntType __m, int __s, int __r> - void - subtract_with_carry<_IntType, __m, __s, __r>:: - seed(unsigned long __value) - { - if (__value == 0) - __value = 19780503; - - std::tr1::linear_congruential<unsigned long, 40014, 0, 2147483563> - __lcg(__value); - - for (int __i = 0; __i < long_lag; ++__i) - _M_x[__i] = __detail::__mod<_UIntType, 1, 0, modulus>(__lcg()); - - _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0; - _M_p = 0; - } - - template<typename _IntType, _IntType __m, int __s, int __r> - template<class _Gen> - void - subtract_with_carry<_IntType, __m, __s, __r>:: - seed(_Gen& __gen, false_type) - { - const int __n = (std::numeric_limits<_UIntType>::digits + 31) / 32; - - for (int __i = 0; __i < long_lag; ++__i) - { - _UIntType __tmp = 0; - _UIntType __factor = 1; - for (int __j = 0; __j < __n; ++__j) - { - __tmp += __detail::__mod<__detail::_UInt32Type, 1, 0, 0> - (__gen()) * __factor; - __factor *= __detail::_Shift<_UIntType, 32>::__value; - } - _M_x[__i] = __detail::__mod<_UIntType, 1, 0, modulus>(__tmp); - } - _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0; - _M_p = 0; - } - - template<typename _IntType, _IntType __m, int __s, int __r> - typename subtract_with_carry<_IntType, __m, __s, __r>::result_type - subtract_with_carry<_IntType, __m, __s, __r>:: - operator()() - { - // Derive short lag index from current index. - int __ps = _M_p - short_lag; - if (__ps < 0) - __ps += long_lag; - - // Calculate new x(i) without overflow or division. - // NB: Thanks to the requirements for _IntType, _M_x[_M_p] + _M_carry - // cannot overflow. - _UIntType __xi; - if (_M_x[__ps] >= _M_x[_M_p] + _M_carry) - { - __xi = _M_x[__ps] - _M_x[_M_p] - _M_carry; - _M_carry = 0; - } - else - { - __xi = modulus - _M_x[_M_p] - _M_carry + _M_x[__ps]; - _M_carry = 1; - } - _M_x[_M_p] = __xi; - - // Adjust current index to loop around in ring buffer. - if (++_M_p >= long_lag) - _M_p = 0; - - return __xi; - } - - template<typename _IntType, _IntType __m, int __s, int __r, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const subtract_with_carry<_IntType, __m, __s, __r>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); - __os.fill(__space); - - for (int __i = 0; __i < __r; ++__i) - __os << __x._M_x[__i] << __space; - __os << __x._M_carry; - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<typename _IntType, _IntType __m, int __s, int __r, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - subtract_with_carry<_IntType, __m, __s, __r>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - for (int __i = 0; __i < __r; ++__i) - __is >> __x._M_x[__i]; - __is >> __x._M_carry; - - __is.flags(__flags); - return __is; - } - - - template<typename _RealType, int __w, int __s, int __r> - void - subtract_with_carry_01<_RealType, __w, __s, __r>:: - _M_initialize_npows() - { - for (int __j = 0; __j < __n; ++__j) -#if _GLIBCXX_USE_C99_MATH_TR1 - _M_npows[__j] = std::tr1::ldexp(_RealType(1), -__w + __j * 32); -#else - _M_npows[__j] = std::pow(_RealType(2), -__w + __j * 32); -#endif - } - - template<typename _RealType, int __w, int __s, int __r> - void - subtract_with_carry_01<_RealType, __w, __s, __r>:: - seed(unsigned long __value) - { - if (__value == 0) - __value = 19780503; - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 512. Seeding subtract_with_carry_01 from a single unsigned long. - std::tr1::linear_congruential<unsigned long, 40014, 0, 2147483563> - __lcg(__value); - - this->seed(__lcg); - } - - template<typename _RealType, int __w, int __s, int __r> - template<class _Gen> - void - subtract_with_carry_01<_RealType, __w, __s, __r>:: - seed(_Gen& __gen, false_type) - { - for (int __i = 0; __i < long_lag; ++__i) - { - for (int __j = 0; __j < __n - 1; ++__j) - _M_x[__i][__j] = __detail::__mod<_UInt32Type, 1, 0, 0>(__gen()); - _M_x[__i][__n - 1] = __detail::__mod<_UInt32Type, 1, 0, - __detail::_Shift<_UInt32Type, __w % 32>::__value>(__gen()); - } - - _M_carry = 1; - for (int __j = 0; __j < __n; ++__j) - if (_M_x[long_lag - 1][__j] != 0) - { - _M_carry = 0; - break; - } - - _M_p = 0; - } - - template<typename _RealType, int __w, int __s, int __r> - typename subtract_with_carry_01<_RealType, __w, __s, __r>::result_type - subtract_with_carry_01<_RealType, __w, __s, __r>:: - operator()() - { - // Derive short lag index from current index. - int __ps = _M_p - short_lag; - if (__ps < 0) - __ps += long_lag; - - _UInt32Type __new_carry; - for (int __j = 0; __j < __n - 1; ++__j) - { - if (_M_x[__ps][__j] > _M_x[_M_p][__j] - || (_M_x[__ps][__j] == _M_x[_M_p][__j] && _M_carry == 0)) - __new_carry = 0; - else - __new_carry = 1; - - _M_x[_M_p][__j] = _M_x[__ps][__j] - _M_x[_M_p][__j] - _M_carry; - _M_carry = __new_carry; - } - - if (_M_x[__ps][__n - 1] > _M_x[_M_p][__n - 1] - || (_M_x[__ps][__n - 1] == _M_x[_M_p][__n - 1] && _M_carry == 0)) - __new_carry = 0; - else - __new_carry = 1; - - _M_x[_M_p][__n - 1] = __detail::__mod<_UInt32Type, 1, 0, - __detail::_Shift<_UInt32Type, __w % 32>::__value> - (_M_x[__ps][__n - 1] - _M_x[_M_p][__n - 1] - _M_carry); - _M_carry = __new_carry; - - result_type __ret = 0.0; - for (int __j = 0; __j < __n; ++__j) - __ret += _M_x[_M_p][__j] * _M_npows[__j]; - - // Adjust current index to loop around in ring buffer. - if (++_M_p >= long_lag) - _M_p = 0; - - return __ret; - } - - template<typename _RealType, int __w, int __s, int __r, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const subtract_with_carry_01<_RealType, __w, __s, __r>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); - __os.fill(__space); - - for (int __i = 0; __i < __r; ++__i) - for (int __j = 0; __j < __x.__n; ++__j) - __os << __x._M_x[__i][__j] << __space; - __os << __x._M_carry; - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<typename _RealType, int __w, int __s, int __r, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - subtract_with_carry_01<_RealType, __w, __s, __r>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - for (int __i = 0; __i < __r; ++__i) - for (int __j = 0; __j < __x.__n; ++__j) - __is >> __x._M_x[__i][__j]; - __is >> __x._M_carry; - - __is.flags(__flags); - return __is; - } - - - template<class _UniformRandomNumberGenerator, int __p, int __r> - typename discard_block<_UniformRandomNumberGenerator, - __p, __r>::result_type - discard_block<_UniformRandomNumberGenerator, __p, __r>:: - operator()() - { - if (_M_n >= used_block) - { - while (_M_n < block_size) - { - _M_b(); - ++_M_n; - } - _M_n = 0; - } - ++_M_n; - return _M_b(); - } - - template<class _UniformRandomNumberGenerator, int __p, int __r, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const discard_block<_UniformRandomNumberGenerator, - __p, __r>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::dec | __ios_base::fixed - | __ios_base::left); - __os.fill(__space); - - __os << __x._M_b << __space << __x._M_n; - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<class _UniformRandomNumberGenerator, int __p, int __r, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - discard_block<_UniformRandomNumberGenerator, __p, __r>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - __is >> __x._M_b >> __x._M_n; - - __is.flags(__flags); - return __is; - } - - - template<class _UniformRandomNumberGenerator1, int __s1, - class _UniformRandomNumberGenerator2, int __s2> - void - xor_combine<_UniformRandomNumberGenerator1, __s1, - _UniformRandomNumberGenerator2, __s2>:: - _M_initialize_max() - { - const int __w = std::numeric_limits<result_type>::digits; - - const result_type __m1 = - std::min(result_type(_M_b1.max() - _M_b1.min()), - __detail::_Shift<result_type, __w - __s1>::__value - 1); - - const result_type __m2 = - std::min(result_type(_M_b2.max() - _M_b2.min()), - __detail::_Shift<result_type, __w - __s2>::__value - 1); - - // NB: In TR1 s1 is not required to be >= s2. - if (__s1 < __s2) - _M_max = _M_initialize_max_aux(__m2, __m1, __s2 - __s1) << __s1; - else - _M_max = _M_initialize_max_aux(__m1, __m2, __s1 - __s2) << __s2; - } - - template<class _UniformRandomNumberGenerator1, int __s1, - class _UniformRandomNumberGenerator2, int __s2> - typename xor_combine<_UniformRandomNumberGenerator1, __s1, - _UniformRandomNumberGenerator2, __s2>::result_type - xor_combine<_UniformRandomNumberGenerator1, __s1, - _UniformRandomNumberGenerator2, __s2>:: - _M_initialize_max_aux(result_type __a, result_type __b, int __d) - { - const result_type __two2d = result_type(1) << __d; - const result_type __c = __a * __two2d; - - if (__a == 0 || __b < __two2d) - return __c + __b; - - const result_type __t = std::max(__c, __b); - const result_type __u = std::min(__c, __b); - - result_type __ub = __u; - result_type __p; - for (__p = 0; __ub != 1; __ub >>= 1) - ++__p; - - const result_type __two2p = result_type(1) << __p; - const result_type __k = __t / __two2p; - - if (__k & 1) - return (__k + 1) * __two2p - 1; - - if (__c >= __b) - return (__k + 1) * __two2p + _M_initialize_max_aux((__t % __two2p) - / __two2d, - __u % __two2p, __d); - else - return (__k + 1) * __two2p + _M_initialize_max_aux((__u % __two2p) - / __two2d, - __t % __two2p, __d); - } - - template<class _UniformRandomNumberGenerator1, int __s1, - class _UniformRandomNumberGenerator2, int __s2, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const xor_combine<_UniformRandomNumberGenerator1, __s1, - _UniformRandomNumberGenerator2, __s2>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); - __os.fill(__space); - - __os << __x.base1() << __space << __x.base2(); - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<class _UniformRandomNumberGenerator1, int __s1, - class _UniformRandomNumberGenerator2, int __s2, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - xor_combine<_UniformRandomNumberGenerator1, __s1, - _UniformRandomNumberGenerator2, __s2>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::skipws); - - __is >> __x._M_b1 >> __x._M_b2; - - __is.flags(__flags); - return __is; - } - - - template<typename _IntType, typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const uniform_int<_IntType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__space); - - __os << __x.min() << __space << __x.max(); - - __os.flags(__flags); - __os.fill(__fill); - return __os; - } - - template<typename _IntType, typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - uniform_int<_IntType>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - __is >> __x._M_min >> __x._M_max; - - __is.flags(__flags); - return __is; - } - - - template<typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const bernoulli_distribution& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__os.widen(' ')); - __os.precision(__gnu_cxx::__numeric_traits<double>::__max_digits10); - - __os << __x.p(); - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - - template<typename _IntType, typename _RealType> - template<class _UniformRandomNumberGenerator> - typename geometric_distribution<_IntType, _RealType>::result_type - geometric_distribution<_IntType, _RealType>:: - operator()(_UniformRandomNumberGenerator& __urng) - { - // About the epsilon thing see this thread: - // http://gcc.gnu.org/ml/gcc-patches/2006-10/msg00971.html - const _RealType __naf = - (1 - std::numeric_limits<_RealType>::epsilon()) / 2; - // The largest _RealType convertible to _IntType. - const _RealType __thr = - std::numeric_limits<_IntType>::max() + __naf; - - _RealType __cand; - do - __cand = std::ceil(std::log(__urng()) / _M_log_p); - while (__cand >= __thr); - - return result_type(__cand + __naf); - } - - template<typename _IntType, typename _RealType, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const geometric_distribution<_IntType, _RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__os.widen(' ')); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x.p(); - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - - template<typename _IntType, typename _RealType> - void - poisson_distribution<_IntType, _RealType>:: - _M_initialize() - { -#if _GLIBCXX_USE_C99_MATH_TR1 - if (_M_mean >= 12) - { - const _RealType __m = std::floor(_M_mean); - _M_lm_thr = std::log(_M_mean); - _M_lfm = std::tr1::lgamma(__m + 1); - _M_sm = std::sqrt(__m); - - const _RealType __pi_4 = 0.7853981633974483096156608458198757L; - const _RealType __dx = std::sqrt(2 * __m * std::log(32 * __m - / __pi_4)); - _M_d = std::tr1::round(std::max(_RealType(6), - std::min(__m, __dx))); - const _RealType __cx = 2 * __m + _M_d; - _M_scx = std::sqrt(__cx / 2); - _M_1cx = 1 / __cx; - - _M_c2b = std::sqrt(__pi_4 * __cx) * std::exp(_M_1cx); - _M_cb = 2 * __cx * std::exp(-_M_d * _M_1cx * (1 + _M_d / 2)) / _M_d; - } - else -#endif - _M_lm_thr = std::exp(-_M_mean); - } - - /** - * A rejection algorithm when mean >= 12 and a simple method based - * upon the multiplication of uniform random variates otherwise. - * NB: The former is available only if _GLIBCXX_USE_C99_MATH_TR1 - * is defined. - * - * Reference: - * Devroye, L. "Non-Uniform Random Variates Generation." Springer-Verlag, - * New York, 1986, Ch. X, Sects. 3.3 & 3.4 (+ Errata!). - */ - template<typename _IntType, typename _RealType> - template<class _UniformRandomNumberGenerator> - typename poisson_distribution<_IntType, _RealType>::result_type - poisson_distribution<_IntType, _RealType>:: - operator()(_UniformRandomNumberGenerator& __urng) - { -#if _GLIBCXX_USE_C99_MATH_TR1 - if (_M_mean >= 12) - { - _RealType __x; - - // See comments above... - const _RealType __naf = - (1 - std::numeric_limits<_RealType>::epsilon()) / 2; - const _RealType __thr = - std::numeric_limits<_IntType>::max() + __naf; - - const _RealType __m = std::floor(_M_mean); - // sqrt(pi / 2) - const _RealType __spi_2 = 1.2533141373155002512078826424055226L; - const _RealType __c1 = _M_sm * __spi_2; - const _RealType __c2 = _M_c2b + __c1; - const _RealType __c3 = __c2 + 1; - const _RealType __c4 = __c3 + 1; - // e^(1 / 78) - const _RealType __e178 = 1.0129030479320018583185514777512983L; - const _RealType __c5 = __c4 + __e178; - const _RealType __c = _M_cb + __c5; - const _RealType __2cx = 2 * (2 * __m + _M_d); - - bool __reject = true; - do - { - const _RealType __u = __c * __urng(); - const _RealType __e = -std::log(__urng()); - - _RealType __w = 0.0; - - if (__u <= __c1) - { - const _RealType __n = _M_nd(__urng); - const _RealType __y = -std::abs(__n) * _M_sm - 1; - __x = std::floor(__y); - __w = -__n * __n / 2; - if (__x < -__m) - continue; - } - else if (__u <= __c2) - { - const _RealType __n = _M_nd(__urng); - const _RealType __y = 1 + std::abs(__n) * _M_scx; - __x = std::ceil(__y); - __w = __y * (2 - __y) * _M_1cx; - if (__x > _M_d) - continue; - } - else if (__u <= __c3) - // NB: This case not in the book, nor in the Errata, - // but should be ok... - __x = -1; - else if (__u <= __c4) - __x = 0; - else if (__u <= __c5) - __x = 1; - else - { - const _RealType __v = -std::log(__urng()); - const _RealType __y = _M_d + __v * __2cx / _M_d; - __x = std::ceil(__y); - __w = -_M_d * _M_1cx * (1 + __y / 2); - } - - __reject = (__w - __e - __x * _M_lm_thr - > _M_lfm - std::tr1::lgamma(__x + __m + 1)); - - __reject |= __x + __m >= __thr; - - } while (__reject); - - return result_type(__x + __m + __naf); - } - else -#endif - { - _IntType __x = 0; - _RealType __prod = 1.0; - - do - { - __prod *= __urng(); - __x += 1; - } - while (__prod > _M_lm_thr); - - return __x - 1; - } - } - - template<typename _IntType, typename _RealType, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const poisson_distribution<_IntType, _RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__space); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x.mean() << __space << __x._M_nd; - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - template<typename _IntType, typename _RealType, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - poisson_distribution<_IntType, _RealType>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::skipws); - - __is >> __x._M_mean >> __x._M_nd; - __x._M_initialize(); - - __is.flags(__flags); - return __is; - } - - - template<typename _IntType, typename _RealType> - void - binomial_distribution<_IntType, _RealType>:: - _M_initialize() - { - const _RealType __p12 = _M_p <= 0.5 ? _M_p : 1.0 - _M_p; - - _M_easy = true; - -#if _GLIBCXX_USE_C99_MATH_TR1 - if (_M_t * __p12 >= 8) - { - _M_easy = false; - const _RealType __np = std::floor(_M_t * __p12); - const _RealType __pa = __np / _M_t; - const _RealType __1p = 1 - __pa; - - const _RealType __pi_4 = 0.7853981633974483096156608458198757L; - const _RealType __d1x = - std::sqrt(__np * __1p * std::log(32 * __np - / (81 * __pi_4 * __1p))); - _M_d1 = std::tr1::round(std::max(_RealType(1), __d1x)); - const _RealType __d2x = - std::sqrt(__np * __1p * std::log(32 * _M_t * __1p - / (__pi_4 * __pa))); - _M_d2 = std::tr1::round(std::max(_RealType(1), __d2x)); - - // sqrt(pi / 2) - const _RealType __spi_2 = 1.2533141373155002512078826424055226L; - _M_s1 = std::sqrt(__np * __1p) * (1 + _M_d1 / (4 * __np)); - _M_s2 = std::sqrt(__np * __1p) * (1 + _M_d2 / (4 * _M_t * __1p)); - _M_c = 2 * _M_d1 / __np; - _M_a1 = std::exp(_M_c) * _M_s1 * __spi_2; - const _RealType __a12 = _M_a1 + _M_s2 * __spi_2; - const _RealType __s1s = _M_s1 * _M_s1; - _M_a123 = __a12 + (std::exp(_M_d1 / (_M_t * __1p)) - * 2 * __s1s / _M_d1 - * std::exp(-_M_d1 * _M_d1 / (2 * __s1s))); - const _RealType __s2s = _M_s2 * _M_s2; - _M_s = (_M_a123 + 2 * __s2s / _M_d2 - * std::exp(-_M_d2 * _M_d2 / (2 * __s2s))); - _M_lf = (std::tr1::lgamma(__np + 1) - + std::tr1::lgamma(_M_t - __np + 1)); - _M_lp1p = std::log(__pa / __1p); - - _M_q = -std::log(1 - (__p12 - __pa) / __1p); - } - else -#endif - _M_q = -std::log(1 - __p12); - } - - template<typename _IntType, typename _RealType> - template<class _UniformRandomNumberGenerator> - typename binomial_distribution<_IntType, _RealType>::result_type - binomial_distribution<_IntType, _RealType>:: - _M_waiting(_UniformRandomNumberGenerator& __urng, _IntType __t) - { - _IntType __x = 0; - _RealType __sum = 0; - - do - { - const _RealType __e = -std::log(__urng()); - __sum += __e / (__t - __x); - __x += 1; - } - while (__sum <= _M_q); - - return __x - 1; - } - - /** - * A rejection algorithm when t * p >= 8 and a simple waiting time - * method - the second in the referenced book - otherwise. - * NB: The former is available only if _GLIBCXX_USE_C99_MATH_TR1 - * is defined. - * - * Reference: - * Devroye, L. "Non-Uniform Random Variates Generation." Springer-Verlag, - * New York, 1986, Ch. X, Sect. 4 (+ Errata!). - */ - template<typename _IntType, typename _RealType> - template<class _UniformRandomNumberGenerator> - typename binomial_distribution<_IntType, _RealType>::result_type - binomial_distribution<_IntType, _RealType>:: - operator()(_UniformRandomNumberGenerator& __urng) - { - result_type __ret; - const _RealType __p12 = _M_p <= 0.5 ? _M_p : 1.0 - _M_p; - -#if _GLIBCXX_USE_C99_MATH_TR1 - if (!_M_easy) - { - _RealType __x; - - // See comments above... - const _RealType __naf = - (1 - std::numeric_limits<_RealType>::epsilon()) / 2; - const _RealType __thr = - std::numeric_limits<_IntType>::max() + __naf; - - const _RealType __np = std::floor(_M_t * __p12); - const _RealType __pa = __np / _M_t; - - // sqrt(pi / 2) - const _RealType __spi_2 = 1.2533141373155002512078826424055226L; - const _RealType __a1 = _M_a1; - const _RealType __a12 = __a1 + _M_s2 * __spi_2; - const _RealType __a123 = _M_a123; - const _RealType __s1s = _M_s1 * _M_s1; - const _RealType __s2s = _M_s2 * _M_s2; - - bool __reject; - do - { - const _RealType __u = _M_s * __urng(); - - _RealType __v; - - if (__u <= __a1) - { - const _RealType __n = _M_nd(__urng); - const _RealType __y = _M_s1 * std::abs(__n); - __reject = __y >= _M_d1; - if (!__reject) - { - const _RealType __e = -std::log(__urng()); - __x = std::floor(__y); - __v = -__e - __n * __n / 2 + _M_c; - } - } - else if (__u <= __a12) - { - const _RealType __n = _M_nd(__urng); - const _RealType __y = _M_s2 * std::abs(__n); - __reject = __y >= _M_d2; - if (!__reject) - { - const _RealType __e = -std::log(__urng()); - __x = std::floor(-__y); - __v = -__e - __n * __n / 2; - } - } - else if (__u <= __a123) - { - const _RealType __e1 = -std::log(__urng()); - const _RealType __e2 = -std::log(__urng()); - - const _RealType __y = _M_d1 + 2 * __s1s * __e1 / _M_d1; - __x = std::floor(__y); - __v = (-__e2 + _M_d1 * (1 / (_M_t - __np) - -__y / (2 * __s1s))); - __reject = false; - } - else - { - const _RealType __e1 = -std::log(__urng()); - const _RealType __e2 = -std::log(__urng()); - - const _RealType __y = _M_d2 + 2 * __s2s * __e1 / _M_d2; - __x = std::floor(-__y); - __v = -__e2 - _M_d2 * __y / (2 * __s2s); - __reject = false; - } - - __reject = __reject || __x < -__np || __x > _M_t - __np; - if (!__reject) - { - const _RealType __lfx = - std::tr1::lgamma(__np + __x + 1) - + std::tr1::lgamma(_M_t - (__np + __x) + 1); - __reject = __v > _M_lf - __lfx + __x * _M_lp1p; - } - - __reject |= __x + __np >= __thr; - } - while (__reject); - - __x += __np + __naf; - - const _IntType __z = _M_waiting(__urng, _M_t - _IntType(__x)); - __ret = _IntType(__x) + __z; - } - else -#endif - __ret = _M_waiting(__urng, _M_t); - - if (__p12 != _M_p) - __ret = _M_t - __ret; - return __ret; - } - - template<typename _IntType, typename _RealType, - typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const binomial_distribution<_IntType, _RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__space); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x.t() << __space << __x.p() - << __space << __x._M_nd; - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - template<typename _IntType, typename _RealType, - typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - binomial_distribution<_IntType, _RealType>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - __is >> __x._M_t >> __x._M_p >> __x._M_nd; - __x._M_initialize(); - - __is.flags(__flags); - return __is; - } - - - template<typename _RealType, typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const uniform_real<_RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__space); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x.min() << __space << __x.max(); - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - template<typename _RealType, typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - uniform_real<_RealType>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::skipws); - - __is >> __x._M_min >> __x._M_max; - - __is.flags(__flags); - return __is; - } - - - template<typename _RealType, typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const exponential_distribution<_RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__os.widen(' ')); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x.lambda(); - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - - /** - * Polar method due to Marsaglia. - * - * Devroye, L. "Non-Uniform Random Variates Generation." Springer-Verlag, - * New York, 1986, Ch. V, Sect. 4.4. - */ - template<typename _RealType> - template<class _UniformRandomNumberGenerator> - typename normal_distribution<_RealType>::result_type - normal_distribution<_RealType>:: - operator()(_UniformRandomNumberGenerator& __urng) - { - result_type __ret; - - if (_M_saved_available) - { - _M_saved_available = false; - __ret = _M_saved; - } - else - { - result_type __x, __y, __r2; - do - { - __x = result_type(2.0) * __urng() - 1.0; - __y = result_type(2.0) * __urng() - 1.0; - __r2 = __x * __x + __y * __y; - } - while (__r2 > 1.0 || __r2 == 0.0); - - const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2); - _M_saved = __x * __mult; - _M_saved_available = true; - __ret = __y * __mult; - } - - __ret = __ret * _M_sigma + _M_mean; - return __ret; - } - - template<typename _RealType, typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const normal_distribution<_RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - const _CharT __space = __os.widen(' '); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__space); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x._M_saved_available << __space - << __x.mean() << __space - << __x.sigma(); - if (__x._M_saved_available) - __os << __space << __x._M_saved; - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - - template<typename _RealType, typename _CharT, typename _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, - normal_distribution<_RealType>& __x) - { - typedef std::basic_istream<_CharT, _Traits> __istream_type; - typedef typename __istream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __is.flags(); - __is.flags(__ios_base::dec | __ios_base::skipws); - - __is >> __x._M_saved_available >> __x._M_mean - >> __x._M_sigma; - if (__x._M_saved_available) - __is >> __x._M_saved; - - __is.flags(__flags); - return __is; - } - - - template<typename _RealType> - void - gamma_distribution<_RealType>:: - _M_initialize() - { - if (_M_alpha >= 1) - _M_l_d = std::sqrt(2 * _M_alpha - 1); - else - _M_l_d = (std::pow(_M_alpha, _M_alpha / (1 - _M_alpha)) - * (1 - _M_alpha)); - } - - /** - * Cheng's rejection algorithm GB for alpha >= 1 and a modification - * of Vaduva's rejection from Weibull algorithm due to Devroye for - * alpha < 1. - * - * References: - * Cheng, R. C. "The Generation of Gamma Random Variables with Non-integral - * Shape Parameter." Applied Statistics, 26, 71-75, 1977. - * - * Vaduva, I. "Computer Generation of Gamma Gandom Variables by Rejection - * and Composition Procedures." Math. Operationsforschung and Statistik, - * Series in Statistics, 8, 545-576, 1977. - * - * Devroye, L. "Non-Uniform Random Variates Generation." Springer-Verlag, - * New York, 1986, Ch. IX, Sect. 3.4 (+ Errata!). - */ - template<typename _RealType> - template<class _UniformRandomNumberGenerator> - typename gamma_distribution<_RealType>::result_type - gamma_distribution<_RealType>:: - operator()(_UniformRandomNumberGenerator& __urng) - { - result_type __x; - - bool __reject; - if (_M_alpha >= 1) - { - // alpha - log(4) - const result_type __b = _M_alpha - - result_type(1.3862943611198906188344642429163531L); - const result_type __c = _M_alpha + _M_l_d; - const result_type __1l = 1 / _M_l_d; - - // 1 + log(9 / 2) - const result_type __k = 2.5040773967762740733732583523868748L; - - do - { - const result_type __u = __urng(); - const result_type __v = __urng(); - - const result_type __y = __1l * std::log(__v / (1 - __v)); - __x = _M_alpha * std::exp(__y); - - const result_type __z = __u * __v * __v; - const result_type __r = __b + __c * __y - __x; - - __reject = __r < result_type(4.5) * __z - __k; - if (__reject) - __reject = __r < std::log(__z); - } - while (__reject); - } - else - { - const result_type __c = 1 / _M_alpha; - - do - { - const result_type __z = -std::log(__urng()); - const result_type __e = -std::log(__urng()); - - __x = std::pow(__z, __c); - - __reject = __z + __e < _M_l_d + __x; - } - while (__reject); - } - - return __x; - } - - template<typename _RealType, typename _CharT, typename _Traits> - std::basic_ostream<_CharT, _Traits>& - operator<<(std::basic_ostream<_CharT, _Traits>& __os, - const gamma_distribution<_RealType>& __x) - { - typedef std::basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const typename __ios_base::fmtflags __flags = __os.flags(); - const _CharT __fill = __os.fill(); - const std::streamsize __precision = __os.precision(); - __os.flags(__ios_base::scientific | __ios_base::left); - __os.fill(__os.widen(' ')); - __os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10); - - __os << __x.alpha(); - - __os.flags(__flags); - __os.fill(__fill); - __os.precision(__precision); - return __os; - } - -_GLIBCXX_END_NAMESPACE -} diff --git a/contrib/libstdc++/include/tr1/ref_fwd.h b/contrib/libstdc++/include/tr1/ref_fwd.h deleted file mode 100644 index 6c0efbc60e182..0000000000000 --- a/contrib/libstdc++/include/tr1/ref_fwd.h +++ /dev/null @@ -1,59 +0,0 @@ - - -// class template reference_wrapper forwarding header -*- C++ -*- - -// Copyright (C) 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. - -/** @file tr1/ref_fwd.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -// Douglas Gregor <doug.gregor -at- gmail.com> -#ifndef _TR1_REF_FWD -#define _TR1_REF_FWD - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -template<typename _Tp> - class reference_wrapper; - -template<typename _Tp> - reference_wrapper<_Tp> - ref(_Tp& __t); - - // Denotes a const reference should be taken to a variable. -template<typename _Tp> - reference_wrapper<const _Tp> - cref(const _Tp& __t); - -_GLIBCXX_END_NAMESPACE -} -#endif diff --git a/contrib/libstdc++/include/tr1/ref_wrap_iterate.h b/contrib/libstdc++/include/tr1/ref_wrap_iterate.h deleted file mode 100644 index 7c63d2cf18aa2..0000000000000 --- a/contrib/libstdc++/include/tr1/ref_wrap_iterate.h +++ /dev/null @@ -1,44 +0,0 @@ -// TR1 reference_wrapper -*- C++ -*- - -// Copyright (C) 2005 Free Software Foundation, Inc. -// Written by Douglas Gregor <doug.gregor -at- gmail.com> -// -// 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. - -/** @file tr1/ref_wrap_iterate.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#if _GLIBCXX_NUM_ARGS > 0 -template<_GLIBCXX_TEMPLATE_PARAMS> - typename result_of<_M_func_type(_GLIBCXX_TEMPLATE_ARGS)>::type - operator()(_GLIBCXX_REF_PARAMS) const; -#else -typename result_of<_M_func_type()>::type -operator()() const -{ return get()(); } -#endif diff --git a/contrib/libstdc++/include/tr1/repeat.h b/contrib/libstdc++/include/tr1/repeat.h deleted file mode 100644 index 3f09dd56207b1..0000000000000 --- a/contrib/libstdc++/include/tr1/repeat.h +++ /dev/null @@ -1,677 +0,0 @@ -// TR1 code repetition -*- C++ -*- - -// Copyright (C) 2005 Free Software Foundation, Inc. -// Written by Douglas Gregor <doug.gregor -at- gmail.com> -// -// 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. - -/** @file tr1/repeat.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _GLIBCXX_REPEAT_HEADER -# error Internal error: _GLIBCXX_REPEAT_HEADER must be set -#endif /* _GLIBCXX_REPEAT_HEADER */ - -#ifndef _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS -# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10 -# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS_UNNAMED typename, typename, typename, typename, typename, typename, typename, typename, typename, typename -# define _GLIBCXX_TUPLE_ALL_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 -#endif - -#define _GLIBCXX_NUM_ARGS 0 -#define _GLIBCXX_COMMA -#define _GLIBCXX_TEMPLATE_PARAMS -#define _GLIBCXX_TEMPLATE_ARGS -#define _GLIBCXX_PARAMS -#define _GLIBCXX_REF_PARAMS -#define _GLIBCXX_ARGS -#define _GLIBCXX_COMMA_SHIFTED -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#define _GLIBCXX_PARAMS_SHIFTED -#define _GLIBCXX_ARGS_SHIFTED -#define _GLIBCXX_BIND_MEMBERS_INIT -#define _GLIBCXX_BIND_MEMBERS -#define _GLIBCXX_MU_GET_TUPLE_ARGS -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) -#define _GLIBCXX_BIND_V_ARGS -#define _GLIBCXX_TUPLE_ADD_CREF -#define _GLIBCXX_TUPLE_COPY_INIT -#define _GLIBCXX_TUPLE_ASSIGN -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#define _GLIBCXX_TEMPLATE_PARAMS_U -#define _GLIBCXX_TEMPLATE_ARGS_U -#define _GLIBCXX_REF_WRAP_PARAMS -#define _GLIBCXX_REF_TEMPLATE_ARGS -#define _GLIBCXX_NUM_ARGS_PLUS_1 1 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T1 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 1 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1 -#define _GLIBCXX_TEMPLATE_ARGS _T1 -#define _GLIBCXX_PARAMS _T1 __a1 -#define _GLIBCXX_REF_PARAMS _T1& __a1 -#define _GLIBCXX_ARGS __a1 -#define _GLIBCXX_COMMA_SHIFTED -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#define _GLIBCXX_PARAMS_SHIFTED -#define _GLIBCXX_ARGS_SHIFTED -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1& -#define _GLIBCXX_NUM_ARGS_PLUS_1 2 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T2 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 2 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2 -#define _GLIBCXX_ARGS __a1, __a2 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1 -#define _GLIBCXX_ARGS_SHIFTED __a1 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2& -#define _GLIBCXX_NUM_ARGS_PLUS_1 3 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T3 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 3 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3 -#define _GLIBCXX_ARGS __a1, __a2, __a3 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3& -#define _GLIBCXX_NUM_ARGS_PLUS_1 4 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T4 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 4 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4& -#define _GLIBCXX_NUM_ARGS_PLUS_1 5 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T5 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 5 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5& -#define _GLIBCXX_NUM_ARGS_PLUS_1 6 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T6 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 6 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6& -#define _GLIBCXX_NUM_ARGS_PLUS_1 7 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T7 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 7 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7& -#define _GLIBCXX_NUM_ARGS_PLUS_1 8 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T8 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 8 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7, typename __add_c_ref<_T8>::type __a8 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7), _M_arg8(__in._M_arg8) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; _M_arg8 = __in._M_arg8; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass, typename _T8 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_T8>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7), ref(__a8) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8& -#define _GLIBCXX_NUM_ARGS_PLUS_1 9 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T9 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_NUM_ARGS 9 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7, typename __add_c_ref<_T8>::type __a8, typename __add_c_ref<_T9>::type __a9 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7), _M_arg8(__in._M_arg8), _M_arg9(__in._M_arg9) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; _M_arg8 = __in._M_arg8; _M_arg9 = __in._M_arg9; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass, typename _T8 = _NullClass, typename _T9 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_T8>::__type, typename __strip_reference_wrapper<_T9>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7), ref(__a8), ref(__a9) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&, _T9& -#define _GLIBCXX_NUM_ARGS_PLUS_1 10 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T10 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#define _GLIBCXX_LAST_INCLUDE -#define _GLIBCXX_NUM_ARGS 10 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10 -#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9, _T10& __a10 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9 -#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; -#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10) -#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple) -#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type -#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)) -#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7, typename __add_c_ref<_T8>::type __a8, typename __add_c_ref<_T9>::type __a9, typename __add_c_ref<_T10>::type __a10 -#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7), _M_arg8(__in._M_arg8), _M_arg9(__in._M_arg9), _M_arg10(__in._M_arg10) -#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; _M_arg8 = __in._M_arg8; _M_arg9 = __in._M_arg9; _M_arg10 = __in._M_arg10; -#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass, typename _T8 = _NullClass, typename _T9 = _NullClass, typename _T10 = _NullClass -#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_T8>::__type, typename __strip_reference_wrapper<_T9>::__type, typename __strip_reference_wrapper<_T10>::__type -#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10 -#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10 -#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7), ref(__a8), ref(__a9), ref(__a10) -#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&, _T9&, _T10& -#define _GLIBCXX_NUM_ARGS_PLUS_1 11 -#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T11 -#include _GLIBCXX_REPEAT_HEADER -#undef _GLIBCXX_T_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_NUM_ARGS_PLUS_1 -#undef _GLIBCXX_REF_TEMPLATE_ARGS -#undef _GLIBCXX_REF_WRAP_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS_U -#undef _GLIBCXX_TEMPLATE_PARAMS_U -#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED -#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS -#undef _GLIBCXX_TUPLE_ASSIGN -#undef _GLIBCXX_TUPLE_COPY_INIT -#undef _GLIBCXX_TUPLE_ADD_CREF -#undef _GLIBCXX_BIND_V_ARGS -#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS -#undef _GLIBCXX_MU_GET_TUPLE_ARGS -#undef _GLIBCXX_BIND_MEMBERS_INIT -#undef _GLIBCXX_BIND_MEMBERS -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_REF_PARAMS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS -#undef _GLIBCXX_LAST_INCLUDE - diff --git a/contrib/libstdc++/include/tr1/stdarg.h b/contrib/libstdc++/include/tr1/stdarg.h deleted file mode 100644 index 87c4cf3064e01..0000000000000 --- a/contrib/libstdc++/include/tr1/stdarg.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 stdarg.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/stdarg.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_STDARG_H -#define _TR1_STDARG_H 1 - -#include <tr1/cstdarg> - -#endif diff --git a/contrib/libstdc++/include/tr1/stdbool.h b/contrib/libstdc++/include/tr1/stdbool.h deleted file mode 100644 index 5865e02305cf4..0000000000000 --- a/contrib/libstdc++/include/tr1/stdbool.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 stdbool.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/stdbool.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_STDBOOL_H -#define _TR1_STDBOOL_H 1 - -#include <tr1/cstdbool> - -#endif diff --git a/contrib/libstdc++/include/tr1/stdint.h b/contrib/libstdc++/include/tr1/stdint.h deleted file mode 100644 index f9e48707d177d..0000000000000 --- a/contrib/libstdc++/include/tr1/stdint.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 stdint.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/stdint.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_STDINT_H -#define _TR1_STDINT_H 1 - -#include <tr1/cstdint> - -#endif diff --git a/contrib/libstdc++/include/tr1/stdio.h b/contrib/libstdc++/include/tr1/stdio.h deleted file mode 100644 index 763f03e1bfcbd..0000000000000 --- a/contrib/libstdc++/include/tr1/stdio.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 stdio.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/stdio.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_STDIO_H -#define _TR1_STDIO_H 1 - -#include <tr1/cstdio> - -#endif diff --git a/contrib/libstdc++/include/tr1/stdlib.h b/contrib/libstdc++/include/tr1/stdlib.h deleted file mode 100644 index 92bc4687c6f47..0000000000000 --- a/contrib/libstdc++/include/tr1/stdlib.h +++ /dev/null @@ -1,56 +0,0 @@ -// TR1 stdlib.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/stdlib.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_STDLIB_H -#define _TR1_STDLIB_H 1 - -#include <tr1/cstdlib> - -#if _GLIBCXX_HOSTED - -#if _GLIBCXX_USE_C99 - -using std::tr1::atoll; -using std::tr1::strtoll; -using std::tr1::strtoull; - -using std::tr1::abs; -#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC -using std::tr1::div; -#endif - -#endif - -#endif - -#endif diff --git a/contrib/libstdc++/include/tr1/tgmath.h b/contrib/libstdc++/include/tr1/tgmath.h deleted file mode 100644 index 90c8a63deaac1..0000000000000 --- a/contrib/libstdc++/include/tr1/tgmath.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 tgmath.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/tgmath.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_TGMATH_H -#define _TR1_TGMATH_H 1 - -#include <tr1/ctgmath> - -#endif diff --git a/contrib/libstdc++/include/tr1/tuple b/contrib/libstdc++/include/tr1/tuple deleted file mode 100644 index 379631d42f25d..0000000000000 --- a/contrib/libstdc++/include/tr1/tuple +++ /dev/null @@ -1,161 +0,0 @@ -// class template tuple -*- C++ -*- - -// Copyright (C) 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. - -/** @file tr1/tuple -* This is a TR1 C++ Library header. -*/ - -// Chris Jefferson <chris@bubblescope.net> - -#ifndef _TR1_TUPLE -#define _TR1_TUPLE 1 - -#include <tr1/utility> -#include <tr1/ref_fwd.h> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // An implementation specific class which is used in the tuple class - // when the tuple is not maximum possible size. - struct _NullClass { }; - - /// Gives the type of the ith element of a given tuple type. - template<int __i, typename _Tp> - struct tuple_element; - - /// Finds the size of a given tuple type. - template<typename _Tp> - struct tuple_size; - - // Adds a const reference to a non-reference type. - template<typename _Tp> - struct __add_c_ref - { typedef const _Tp& type; }; - - template<typename _Tp> - struct __add_c_ref<_Tp&> - { typedef _Tp& type; }; - - // Adds a reference to a non-reference type. - template<typename _Tp> - struct __add_ref - { typedef _Tp& type; }; - - template<typename _Tp> - struct __add_ref<_Tp&> - { typedef _Tp& type; }; - - // Class used in the implementation of get - template<int __i, typename _Tp> - struct __get_helper; - - // Returns a const reference to the ith element of a tuple. - // Any const or non-const ref elements are returned with their original type. - - // This class helps construct the various comparison operations on tuples - template<int __check_equal_size, int __i, int __j, typename _Tp, typename _Up> - struct __tuple_compare; - - // Helper which adds a reference to a type when given a reference_wrapper - template<typename _Tp> - struct __strip_reference_wrapper - { - typedef _Tp __type; - }; - - template<typename _Tp> - struct __strip_reference_wrapper<reference_wrapper<_Tp> > - { - typedef _Tp& __type; - }; - - template<typename _Tp> - struct __strip_reference_wrapper<const reference_wrapper<_Tp> > - { - typedef _Tp& __type; - }; - - #include "tuple_defs.h" - - template<int __i, int __j, typename _Tp, typename _Up> - struct __tuple_compare<0, __i, __j, _Tp, _Up> - { - static bool __eq(const _Tp& __t, const _Up& __u) - { - return get<__i>(__t) == get<__i>(__u) && - __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u); - } - static bool __less(const _Tp& __t, const _Up& __u) - { - return (get<__i>(__t) < get<__i>(__u)) || !(get<__i>(__u) < get<__i>(__t)) && - __tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u); - } - }; - - template<int __i, typename _Tp, typename _Up> - struct __tuple_compare<0, __i, __i, _Tp, _Up> - { - static bool __eq(const _Tp&, const _Up&) - { return true; } - static bool __less(const _Tp&, const _Up&) - { return false; } - }; - - // A class (and instance) which can be used in 'tie' when an element - // of a tuple is not required - struct swallow_assign - { - template<class T> - swallow_assign& - operator=(const T&) - { return *this; } - }; - - // TODO: Put this in some kind of shared file. - namespace - { - swallow_assign ignore; - }; // anonymous namespace - -_GLIBCXX_END_NAMESPACE -} - -#define _GLIBCXX_CAT(x,y) _GLIBCXX_CAT2(x,y) -#define _GLIBCXX_CAT2(x,y) x##y -#define _SHORT_REPEAT -#define _GLIBCXX_REPEAT_HEADER <tr1/tuple_iterate.h> -#include <tr1/repeat.h> -#undef _GLIBCXX_REPEAT_HEADER -#undef _SHORT_REPEAT - -#include <tr1/functional> - -#endif diff --git a/contrib/libstdc++/include/tr1/tuple_defs.h b/contrib/libstdc++/include/tr1/tuple_defs.h deleted file mode 100644 index dba6ccc435781..0000000000000 --- a/contrib/libstdc++/include/tr1/tuple_defs.h +++ /dev/null @@ -1,114 +0,0 @@ -// class template tuple -*- C++ -*- - -// Copyright (C) 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. - -/** @file tr1/tuple_defs.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _GLIBCXX_REPEAT_HEADER -# define _GLIBCXX_REPEAT_HEADER "tuple_defs.h" -# include "repeat.h" -# undef _GLIBCXX_REPEAT_HEADER -#endif - -#ifdef _GLIBCXX_LAST_INCLUDE -// Chris Jefferson <chris@bubblescope.net> - template<_GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS> class tuple; - - // Returns a const reference to the ith element of a tuple. - // Any const or non-const ref elements are returned with their original type. - template<int __i, _GLIBCXX_TEMPLATE_PARAMS> - typename __add_ref<typename tuple_element<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::type>::type - get(tuple<_GLIBCXX_TEMPLATE_ARGS>& __t) - { - return __get_helper<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::get_value(__t); - } - - template<int __i, _GLIBCXX_TEMPLATE_PARAMS> - typename __add_c_ref<typename tuple_element<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::type>::type - get(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t) - { - return __get_helper<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::get_value(__t); - } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator==(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { - typedef tuple<_GLIBCXX_TEMPLATE_ARGS> _Tp; - typedef tuple<_GLIBCXX_TEMPLATE_ARGS_U> _Up; - return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0, - tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u); - } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator<(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { - typedef tuple<_GLIBCXX_TEMPLATE_ARGS> _Tp; - typedef tuple<_GLIBCXX_TEMPLATE_ARGS_U> _Up; - return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0, - tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u); - } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator!=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return !(__t == __u); } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator>(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return __u < __t; } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator<=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return !(__u < __t); } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator>=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return !(__t < __u); } - - template<_GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS> - struct __stripped_tuple_type - { - typedef tuple<_GLIBCXX_TEMPLATE_ARGS_STRIPPED> __type; - }; - -#endif - diff --git a/contrib/libstdc++/include/tr1/tuple_iterate.h b/contrib/libstdc++/include/tr1/tuple_iterate.h deleted file mode 100644 index 42ddf54b78aa9..0000000000000 --- a/contrib/libstdc++/include/tr1/tuple_iterate.h +++ /dev/null @@ -1,172 +0,0 @@ -// class template tuple -*- C++ -*- - -// Copyright (C) 2004, 2005, 2006 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. - -/** @file tr1/tuple_iterate.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -// Chris Jefferson <chris@bubblescope.net> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - -/// @brief class tuple_size -template<_GLIBCXX_TEMPLATE_PARAMS> - struct tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> > - { static const int value = _GLIBCXX_NUM_ARGS; }; - -#if _GLIBCXX_NUM_ARGS > 0 -template<_GLIBCXX_TEMPLATE_PARAMS> - const int tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> >::value; -#endif - -template<_GLIBCXX_TEMPLATE_PARAMS> -#ifdef _GLIBCXX_LAST_INCLUDE - class tuple -#else - class tuple<_GLIBCXX_TEMPLATE_ARGS> -#endif - { - _GLIBCXX_BIND_MEMBERS - - public: - tuple() - { } - -#if _GLIBCXX_NUM_ARGS == 2 - template<typename _U1, typename _U2> - tuple(const std::pair<_U1, _U2>& __u) : - _M_arg1(__u.first), _M_arg2(__u.second) - { } - - template<typename _U1, typename _U2> - tuple& - operator=(const std::pair<_U1, _U2>& __u) - { - _M_arg1 = __u.first; - _M_arg2 = __u.second; - return *this; - } -#endif - -#if _GLIBCXX_NUM_ARGS > 0 - explicit tuple(_GLIBCXX_TUPLE_ADD_CREF) : - _GLIBCXX_BIND_MEMBERS_INIT - { } - - template<_GLIBCXX_TEMPLATE_PARAMS_U> - tuple(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in) : - _GLIBCXX_TUPLE_COPY_INIT - { } - - - template<_GLIBCXX_TEMPLATE_PARAMS_U> - tuple& - operator=(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in) - { - _GLIBCXX_TUPLE_ASSIGN - return *this; - } - - tuple(const tuple& __in) : - _GLIBCXX_TUPLE_COPY_INIT - { } - -#else - - tuple(const tuple&) - { } - -#endif - - tuple& - operator=(const tuple& __in __attribute__((__unused__)) ) - { - _GLIBCXX_TUPLE_ASSIGN - return *this; - } - - template<int __i, typename __Type> - friend class __get_helper; - - template<_GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS_UNNAMED> - friend class tuple; - }; - -#ifndef _GLIBCXX_LAST_INCLUDE - -template<typename _Tp> - struct __get_helper<_GLIBCXX_NUM_ARGS, _Tp> - { - static typename __add_ref<typename tuple_element<_GLIBCXX_NUM_ARGS, - _Tp>::type>::type - get_value(_Tp& __in) - { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); } - - static typename __add_c_ref<typename tuple_element<_GLIBCXX_NUM_ARGS, - _Tp>::type>::type - get_value(const _Tp& __in) - { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); } - }; - -/// @brief class tuple_element -template<_GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS> - struct tuple_element<_GLIBCXX_NUM_ARGS, tuple<_GLIBCXX_TUPLE_ALL_TEMPLATE_ARGS> > - { typedef _GLIBCXX_T_NUM_ARGS_PLUS_1 type; }; - -#endif -#if _GLIBCXX_NUM_ARGS == 0 - -tuple<> -inline make_tuple() -{ return tuple<>(); } - -tuple<> -inline tie() -{ return tuple<>(); } -#else - -template<_GLIBCXX_TEMPLATE_PARAMS> - typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::__type - inline make_tuple(_GLIBCXX_PARAMS) - { - return typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>:: - __type(_GLIBCXX_ARGS); - } - -template<_GLIBCXX_TEMPLATE_PARAMS> - tuple<_GLIBCXX_REF_TEMPLATE_ARGS> - inline tie(_GLIBCXX_REF_PARAMS) - { return make_tuple(_GLIBCXX_REF_WRAP_PARAMS); } -#endif - -_GLIBCXX_END_NAMESPACE -} diff --git a/contrib/libstdc++/include/tr1/type_traits b/contrib/libstdc++/include/tr1/type_traits deleted file mode 100644 index 048180150dfea..0000000000000 --- a/contrib/libstdc++/include/tr1/type_traits +++ /dev/null @@ -1,703 +0,0 @@ -// TR1 type_traits -*- C++ -*- - -// Copyright (C) 2004, 2005, 2006 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. - -/** @file tr1/type_traits - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_TYPE_TRAITS -#define _TR1_TYPE_TRAITS 1 - -#include <bits/c++config.h> -#include <tr1/type_traits_fwd.h> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // For use in __in_array and elsewhere. - struct __sfinae_types - { - typedef char __one; - typedef struct { char __arr[2]; } __two; - }; - - template<typename _Tp> - struct __in_array - : public __sfinae_types - { - private: - template<typename _Up> - static __one __test(_Up(*)[1]); - template<typename> - static __two __test(...); - - public: - static const bool __value = sizeof(__test<_Tp>(0)) == 1; - }; - -#define _DEFINE_SPEC_BODY(_Value) \ - : public integral_constant<bool, _Value> { }; - -#define _DEFINE_SPEC_0_HELPER(_Spec, _Value) \ - template<> \ - struct _Spec \ - _DEFINE_SPEC_BODY(_Value) - -#define _DEFINE_SPEC_1_HELPER(_Spec, _Value) \ - template<typename _Tp> \ - struct _Spec \ - _DEFINE_SPEC_BODY(_Value) - -#define _DEFINE_SPEC_2_HELPER(_Spec, _Value) \ - template<typename _Tp, typename _Cp> \ - struct _Spec \ - _DEFINE_SPEC_BODY(_Value) - -#define _DEFINE_SPEC(_Order, _Trait, _Type, _Value) \ - _DEFINE_SPEC_##_Order##_HELPER(_Trait<_Type>, _Value) \ - _DEFINE_SPEC_##_Order##_HELPER(_Trait<_Type const>, _Value) \ - _DEFINE_SPEC_##_Order##_HELPER(_Trait<_Type volatile>, _Value) \ - _DEFINE_SPEC_##_Order##_HELPER(_Trait<_Type const volatile>, _Value) - - /// @brief helper classes [4.3]. - template<typename _Tp, _Tp __v> - struct integral_constant - { - static const _Tp value = __v; - typedef _Tp value_type; - typedef integral_constant<_Tp, __v> type; - }; - typedef integral_constant<bool, true> true_type; - typedef integral_constant<bool, false> false_type; - - template<typename _Tp, _Tp __v> - const _Tp integral_constant<_Tp, __v>::value; - - /// @brief primary type categories [4.5.1]. - template<typename> - struct is_void - : public false_type { }; - _DEFINE_SPEC(0, is_void, void, true) - - template<typename> - struct is_integral - : public false_type { }; - _DEFINE_SPEC(0, is_integral, bool, true) - _DEFINE_SPEC(0, is_integral, char, true) - _DEFINE_SPEC(0, is_integral, signed char, true) - _DEFINE_SPEC(0, is_integral, unsigned char, true) -#ifdef _GLIBCXX_USE_WCHAR_T - _DEFINE_SPEC(0, is_integral, wchar_t, true) -#endif - _DEFINE_SPEC(0, is_integral, short, true) - _DEFINE_SPEC(0, is_integral, unsigned short, true) - _DEFINE_SPEC(0, is_integral, int, true) - _DEFINE_SPEC(0, is_integral, unsigned int, true) - _DEFINE_SPEC(0, is_integral, long, true) - _DEFINE_SPEC(0, is_integral, unsigned long, true) - _DEFINE_SPEC(0, is_integral, long long, true) - _DEFINE_SPEC(0, is_integral, unsigned long long, true) - - template<typename> - struct is_floating_point - : public false_type { }; - _DEFINE_SPEC(0, is_floating_point, float, true) - _DEFINE_SPEC(0, is_floating_point, double, true) - _DEFINE_SPEC(0, is_floating_point, long double, true) - - template<typename> - struct is_array - : public false_type { }; - - template<typename _Tp, std::size_t _Size> - struct is_array<_Tp[_Size]> - : public true_type { }; - - template<typename _Tp> - struct is_array<_Tp[]> - : public true_type { }; - - template<typename> - struct is_pointer - : public false_type { }; - _DEFINE_SPEC(1, is_pointer, _Tp*, true) - - template<typename> - struct is_reference - : public false_type { }; - - template<typename _Tp> - struct is_reference<_Tp&> - : public true_type { }; - - template<typename> - struct is_member_object_pointer - : public false_type { }; - _DEFINE_SPEC(2, is_member_object_pointer, _Tp _Cp::*, - !is_function<_Tp>::value) - - template<typename> - struct is_member_function_pointer - : public false_type { }; - _DEFINE_SPEC(2, is_member_function_pointer, _Tp _Cp::*, - is_function<_Tp>::value) - - template<typename _Tp> - struct is_enum - : public integral_constant<bool, !(is_fundamental<_Tp>::value - || is_array<_Tp>::value - || is_pointer<_Tp>::value - || is_reference<_Tp>::value - || is_member_pointer<_Tp>::value - || is_function<_Tp>::value - || __is_union_or_class<_Tp>::value)> - { }; - - template<typename> - struct is_union { }; - - template<typename> - struct is_class { }; - - template<typename _Tp> - struct is_function - : public integral_constant<bool, !(__in_array<_Tp>::__value - || __is_union_or_class<_Tp>::value - || is_reference<_Tp>::value - || is_void<_Tp>::value)> - { }; - - /// @brief composite type traits [4.5.2]. - template<typename _Tp> - struct is_arithmetic - : public integral_constant<bool, (is_integral<_Tp>::value - || is_floating_point<_Tp>::value)> - { }; - - template<typename _Tp> - struct is_fundamental - : public integral_constant<bool, (is_arithmetic<_Tp>::value - || is_void<_Tp>::value)> - { }; - - template<typename _Tp> - struct is_object - : public integral_constant<bool, !(is_function<_Tp>::value - || is_reference<_Tp>::value - || is_void<_Tp>::value)> - { }; - - template<typename _Tp> - struct is_scalar - : public integral_constant<bool, (is_arithmetic<_Tp>::value - || is_enum<_Tp>::value - || is_pointer<_Tp>::value - || is_member_pointer<_Tp>::value)> - { }; - - template<typename _Tp> - struct is_compound - : public integral_constant<bool, !is_fundamental<_Tp>::value> { }; - - template<typename _Tp> - struct is_member_pointer - : public integral_constant<bool, - (is_member_object_pointer<_Tp>::value - || is_member_function_pointer<_Tp>::value)> - { }; - - template<typename _Tp> - struct __is_union_or_class_helper - : public __sfinae_types - { - private: - template<typename _Up> - static __one __test(int _Up::*); - template<typename> - static __two __test(...); - - public: - static const bool __value = sizeof(__test<_Tp>(0)) == 1; - }; - - // Extension. - template<typename _Tp> - struct __is_union_or_class - : public integral_constant<bool, __is_union_or_class_helper<_Tp>::__value> - { }; - - /// @brief type properties [4.5.3]. - template<typename> - struct is_const - : public false_type { }; - - template<typename _Tp> - struct is_const<_Tp const> - : public true_type { }; - - template<typename> - struct is_volatile - : public false_type { }; - - template<typename _Tp> - struct is_volatile<_Tp volatile> - : public true_type { }; - - template<typename _Tp> - struct is_pod - : public integral_constant<bool, (is_void<_Tp>::value - || is_scalar<typename - remove_all_extents<_Tp>::type>::value)> - { }; - - // NB: Without compiler support we cannot tell union from class types, - // and is_empty and is_polymorphic don't work at all with the former. - template<typename _Tp, bool = !__is_union_or_class<_Tp>::value> - struct __is_empty_helper - { - private: - template<typename> - struct __first { }; - template<typename _Up> - struct __second - : public _Up { }; - - public: - static const bool __value = sizeof(__first<_Tp>) == sizeof(__second<_Tp>); - }; - - template<typename _Tp> - struct __is_empty_helper<_Tp, true> - { static const bool __value = false; }; - - template<typename _Tp> - struct is_empty - : public integral_constant<bool, __is_empty_helper<_Tp>::__value> - { }; - - template<typename _Tp, bool = !__is_union_or_class<_Tp>::value> - struct __is_polymorphic_helper - { - private: - template<typename _Up> - struct __first - : public _Up { }; - template<typename _Up> - struct __second - : public _Up - { - virtual void __dummy(); - virtual ~__second() throw(); - }; - - public: - static const bool __value = sizeof(__first<_Tp>) == sizeof(__second<_Tp>); - }; - - template<typename _Tp> - struct __is_polymorphic_helper<_Tp, true> - { static const bool __value = false; }; - - template<typename _Tp> - struct is_polymorphic - : public integral_constant<bool, __is_polymorphic_helper<_Tp>::__value> - { }; - - // Exploit the resolution DR core/337. - template<typename _Tp> - struct is_abstract - : public integral_constant<bool, (!__in_array<_Tp>::__value - && __is_union_or_class<_Tp>::value)> { }; - - template<typename _Tp> - struct has_trivial_constructor - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename _Tp> - struct has_trivial_copy - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename _Tp> - struct has_trivial_assign - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename _Tp> - struct has_trivial_destructor - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename _Tp> - struct has_nothrow_constructor - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename _Tp> - struct has_nothrow_copy - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename _Tp> - struct has_nothrow_assign - : public integral_constant<bool, is_pod<_Tp>::value> { }; - - template<typename> - struct has_virtual_destructor - : public false_type { }; - - template<typename> - struct is_signed - : public false_type { }; - _DEFINE_SPEC(0, is_signed, signed char, true) - _DEFINE_SPEC(0, is_signed, short, true) - _DEFINE_SPEC(0, is_signed, int, true) - _DEFINE_SPEC(0, is_signed, long, true) - _DEFINE_SPEC(0, is_signed, long long, true) - - template<typename> - struct is_unsigned - : public false_type { }; - _DEFINE_SPEC(0, is_unsigned, unsigned char, true) - _DEFINE_SPEC(0, is_unsigned, unsigned short, true) - _DEFINE_SPEC(0, is_unsigned, unsigned int, true) - _DEFINE_SPEC(0, is_unsigned, unsigned long, true) - _DEFINE_SPEC(0, is_unsigned, unsigned long long, true) - - template<typename _Tp> - struct alignment_of - : public integral_constant<std::size_t, __alignof__(_Tp)> { }; - - template<typename> - struct rank - : public integral_constant<std::size_t, 0> { }; - - template<typename _Tp, std::size_t _Size> - struct rank<_Tp[_Size]> - : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { }; - - template<typename _Tp> - struct rank<_Tp[]> - : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { }; - - template<typename, unsigned> - struct extent - : public integral_constant<std::size_t, 0> { }; - - template<typename _Tp, unsigned _Uint, std::size_t _Size> - struct extent<_Tp[_Size], _Uint> - : public integral_constant<std::size_t, - _Uint == 0 ? _Size : extent<_Tp, - _Uint - 1>::value> - { }; - - template<typename _Tp, unsigned _Uint> - struct extent<_Tp[], _Uint> - : public integral_constant<std::size_t, - _Uint == 0 ? 0 : extent<_Tp, - _Uint - 1>::value> - { }; - - /// @brief relationships between types [4.6]. - template<typename, typename> - struct is_same - : public false_type { }; - - template<typename _Tp> - struct is_same<_Tp, _Tp> - : public true_type { }; - - // See Daveed Vandevoorde explanation in http://tinyurl.com/502f. - // Also see Rani Sharoni in http://tinyurl.com/6jvyq. - template<typename _Base, typename _Derived, - bool = (!__is_union_or_class<_Base>::value - || !__is_union_or_class<_Derived>::value - || is_same<_Base, _Derived>::value)> - struct __is_base_of_helper - : public __sfinae_types - { - private: - typedef typename remove_cv<_Base>::type _NoCv_Base; - typedef typename remove_cv<_Derived>::type _NoCv_Derived; - - template<typename _Up> - static __one __test(_NoCv_Derived&, _Up); - static __two __test(_NoCv_Base&, int); - - struct _Conv - { - operator _NoCv_Derived&(); - operator _NoCv_Base&() const; - }; - - public: - static const bool __value = sizeof(__test(_Conv(), 0)) == 1; - }; - - template<typename _Base, typename _Derived> - struct __is_base_of_helper<_Base, _Derived, true> - { static const bool __value = is_same<_Base, _Derived>::value; }; - - template<typename _Base, typename _Derived> - struct is_base_of - : public integral_constant<bool, - __is_base_of_helper<_Base, _Derived>::__value> - { }; - - template<typename _From, typename _To> - struct __is_convertible_simple - : public __sfinae_types - { - private: - static __one __test(_To); - static __two __test(...); - static _From __makeFrom(); - - public: - static const bool __value = sizeof(__test(__makeFrom())) == 1; - }; - - template<typename _Tp> - struct __is_int_or_cref - { - typedef typename remove_reference<_Tp>::type __rr_Tp; - static const bool __value = (is_integral<_Tp>::value - || (is_integral<__rr_Tp>::value - && is_const<__rr_Tp>::value - && !is_volatile<__rr_Tp>::value)); - }; - - template<typename _From, typename _To, - bool = (is_void<_From>::value || is_void<_To>::value - || is_function<_To>::value || is_array<_To>::value - // This special case is here only to avoid warnings. - || (is_floating_point<typename - remove_reference<_From>::type>::value - && __is_int_or_cref<_To>::__value))> - struct __is_convertible_helper - { - // "An imaginary lvalue of type From...". - static const bool __value = (__is_convertible_simple<typename - add_reference<_From>::type, _To>::__value); - }; - - template<typename _From, typename _To> - struct __is_convertible_helper<_From, _To, true> - { static const bool __value = (is_void<_To>::value - || (__is_int_or_cref<_To>::__value - && !is_void<_From>::value)); }; - - template<typename _From, typename _To> - struct is_convertible - : public integral_constant<bool, - __is_convertible_helper<_From, _To>::__value> - { }; - - /// @brief const-volatile modifications [4.7.1]. - template<typename _Tp> - struct remove_const - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_const<_Tp const> - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_volatile - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_volatile<_Tp volatile> - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_cv - { - typedef typename - remove_const<typename remove_volatile<_Tp>::type>::type type; - }; - - template<typename _Tp> - struct add_const - { typedef _Tp const type; }; - - template<typename _Tp> - struct add_volatile - { typedef _Tp volatile type; }; - - template<typename _Tp> - struct add_cv - { - typedef typename - add_const<typename add_volatile<_Tp>::type>::type type; - }; - - /// @brief reference modifications [4.7.2]. - template<typename _Tp> - struct remove_reference - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_reference<_Tp&> - { typedef _Tp type; }; - - // NB: Careful with reference to void. - template<typename _Tp, bool = (is_void<_Tp>::value - || is_reference<_Tp>::value)> - struct __add_reference_helper - { typedef _Tp& type; }; - - template<typename _Tp> - struct __add_reference_helper<_Tp, true> - { typedef _Tp type; }; - - template<typename _Tp> - struct add_reference - : public __add_reference_helper<_Tp> - { }; - - /// @brief array modifications [4.7.3]. - template<typename _Tp> - struct remove_extent - { typedef _Tp type; }; - - template<typename _Tp, std::size_t _Size> - struct remove_extent<_Tp[_Size]> - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_extent<_Tp[]> - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_all_extents - { typedef _Tp type; }; - - template<typename _Tp, std::size_t _Size> - struct remove_all_extents<_Tp[_Size]> - { typedef typename remove_all_extents<_Tp>::type type; }; - - template<typename _Tp> - struct remove_all_extents<_Tp[]> - { typedef typename remove_all_extents<_Tp>::type type; }; - - /// @brief pointer modifications [4.7.4]. -#undef _DEFINE_SPEC_BODY -#define _DEFINE_SPEC_BODY(_Value) \ - { typedef _Tp type; }; - - template<typename _Tp> - struct remove_pointer - { typedef _Tp type; }; - _DEFINE_SPEC(1, remove_pointer, _Tp*, false) - - template<typename _Tp> - struct add_pointer - { typedef typename remove_reference<_Tp>::type* type; }; - - /// @brief other transformations [4.8]. - - // Due to c++/19163 and c++/17743, for the time being we cannot use - // the correct, neat implementation :-( - // - // template<std::size_t _Len, std::size_t _Align> - // struct aligned_storage - // { typedef char type[_Len] __attribute__((__aligned__(_Align))); } - // - // Temporary workaround, useful for Align up to 32: - template<std::size_t, std::size_t> - struct aligned_storage { }; - - template<std::size_t _Len> - struct aligned_storage<_Len, 1> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(1))); - }; - }; - - template<std::size_t _Len> - struct aligned_storage<_Len, 2> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(2))); - }; - }; - - template<std::size_t _Len> - struct aligned_storage<_Len, 4> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(4))); - }; - }; - - template<std::size_t _Len> - struct aligned_storage<_Len, 8> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(8))); - }; - }; - - template<std::size_t _Len> - struct aligned_storage<_Len, 16> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(16))); - }; - }; - - template<std::size_t _Len> - struct aligned_storage<_Len, 32> - { - union type - { - unsigned char __data[_Len]; - char __align __attribute__((__aligned__(32))); - }; - }; - -#undef _DEFINE_SPEC_0_HELPER -#undef _DEFINE_SPEC_1_HELPER -#undef _DEFINE_SPEC_2_HELPER -#undef _DEFINE_SPEC -#undef _DEFINE_SPEC_BODY - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/type_traits_fwd.h b/contrib/libstdc++/include/tr1/type_traits_fwd.h deleted file mode 100644 index 819bb914817e0..0000000000000 --- a/contrib/libstdc++/include/tr1/type_traits_fwd.h +++ /dev/null @@ -1,226 +0,0 @@ -// TR1 type_traits -*- C++ -*- - -// Copyright (C) 2004, 2005, 2006 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. - -/** @file tr1/type_traits_fwd.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _TYPE_TRAITS_FWD_H -#define _TYPE_TRAITS_FWD_H 1 - -#include <cstddef> - -// namespace std::tr1 -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - /// @brief helper classes [4.3]. - template<typename _Tp, _Tp __v> - struct integral_constant; - typedef integral_constant<bool, true> true_type; - typedef integral_constant<bool, false> false_type; - - /// @brief primary type categories [4.5.1]. - template<typename _Tp> - struct is_void; - - template<typename _Tp> - struct is_integral; - - template<typename _Tp> - struct is_floating_point; - - template<typename _Tp> - struct is_array; - - template<typename _Tp> - struct is_pointer; - - template<typename _Tp> - struct is_reference; - - template<typename _Tp> - struct is_member_object_pointer; - - template<typename _Tp> - struct is_member_function_pointer; - - template<typename _Tp> - struct is_enum; - - template<typename _Tp> - struct is_union; - - template<typename _Tp> - struct is_class; - - template<typename _Tp> - struct is_function; - - /// @brief composite type traits [4.5.2]. - template<typename _Tp> - struct is_arithmetic; - - template<typename _Tp> - struct is_fundamental; - - template<typename _Tp> - struct is_object; - - template<typename _Tp> - struct is_scalar; - - template<typename _Tp> - struct is_compound; - - template<typename _Tp> - struct is_member_pointer; - - // Extension. - template<typename _Tp> - struct __is_union_or_class; - - /// @brief type properties [4.5.3]. - template<typename _Tp> - struct is_const; - - template<typename _Tp> - struct is_volatile; - - template<typename _Tp> - struct is_pod; - - template<typename _Tp> - struct is_empty; - - template<typename _Tp> - struct is_polymorphic; - - template<typename _Tp> - struct is_abstract; - - template<typename _Tp> - struct has_trivial_constructor; - - template<typename _Tp> - struct has_trivial_copy; - - template<typename _Tp> - struct has_trivial_assign; - - template<typename _Tp> - struct has_trivial_destructor; - - template<typename _Tp> - struct has_nothrow_constructor; - - template<typename _Tp> - struct has_nothrow_copy; - - template<typename _Tp> - struct has_nothrow_assign; - - template<typename _Tp> - struct has_virtual_destructor; - - template<typename _Tp> - struct is_signed; - - template<typename _Tp> - struct is_unsigned; - - template<typename _Tp> - struct alignment_of; - - template<typename _Tp> - struct rank; - - template<typename _Tp, unsigned _Uint = 0> - struct extent; - - /// @brief relationships between types [4.6]. - template<typename _Tp, typename _Up> - struct is_same; - - template<typename _From, typename _To> - struct is_convertible; - - template<typename _Base, typename _Derived> - struct is_base_of; - - /// @brief const-volatile modifications [4.7.1]. - template<typename _Tp> - struct remove_const; - - template<typename _Tp> - struct remove_volatile; - - template<typename _Tp> - struct remove_cv; - - template<typename _Tp> - struct add_const; - - template<typename _Tp> - struct add_volatile; - - template<typename _Tp> - struct add_cv; - - /// @brief reference modifications [4.7.2]. - template<typename _Tp> - struct remove_reference; - - template<typename _Tp> - struct add_reference; - - /// @brief array modifications [4.7.3]. - template<typename _Tp> - struct remove_extent; - - template<typename _Tp> - struct remove_all_extents; - - /// @brief pointer modifications [4.7.4]. - template<typename _Tp> - struct remove_pointer; - - template<typename _Tp> - struct add_pointer; - - /// @brief other transformations [4.8]. - template<std::size_t _Len, std::size_t _Align> - struct aligned_storage; - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/unordered_map b/contrib/libstdc++/include/tr1/unordered_map deleted file mode 100644 index d613d156ef1ef..0000000000000 --- a/contrib/libstdc++/include/tr1/unordered_map +++ /dev/null @@ -1,168 +0,0 @@ -// TR1 unordered_map -*- C++ -*- - -// Copyright (C) 2005, 2006, 2007 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. - -/** @file tr1/unordered_map - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_UNORDERED_MAP -#define _TR1_UNORDERED_MAP 1 - -#include <tr1/hashtable> -#include <tr1/functional_hash.h> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // XXX When we get typedef templates these class definitions - // will be unnecessary. - template<class _Key, class _Tp, - class _Hash = hash<_Key>, - class _Pred = std::equal_to<_Key>, - class _Alloc = std::allocator<std::pair<const _Key, _Tp> >, - bool __cache_hash_code = false> - class unordered_map - : public _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc, - std::_Select1st<std::pair<const _Key, _Tp> >, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, false, true> - { - typedef _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc, - std::_Select1st<std::pair<const _Key, _Tp> >, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, false, true> - _Base; - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - - explicit - unordered_map(size_type __n = 10, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), - __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a) - { } - - template<typename _InputIterator> - unordered_map(_InputIterator __f, _InputIterator __l, - size_type __n = 10, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), - __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a) - { } - }; - - template<class _Key, class _Tp, - class _Hash = hash<_Key>, - class _Pred = std::equal_to<_Key>, - class _Alloc = std::allocator<std::pair<const _Key, _Tp> >, - bool __cache_hash_code = false> - class unordered_multimap - : public _Hashtable<_Key, std::pair<const _Key, _Tp>, - _Alloc, - std::_Select1st<std::pair<const _Key, _Tp> >, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, false, false> - { - typedef _Hashtable<_Key, std::pair<const _Key, _Tp>, - _Alloc, - std::_Select1st<std::pair<const _Key, _Tp> >, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, false, false> - _Base; - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - - explicit - unordered_multimap(size_type __n = 10, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), - __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a) - { } - - - template<typename _InputIterator> - unordered_multimap(_InputIterator __f, _InputIterator __l, - typename _Base::size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), - __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a) - { } - }; - - template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc, - bool __cache_hash_code> - inline void - swap(unordered_map<_Key, _Tp, _Hash, _Pred, - _Alloc, __cache_hash_code>& __x, - unordered_map<_Key, _Tp, _Hash, _Pred, - _Alloc, __cache_hash_code>& __y) - { __x.swap(__y); } - - template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc, - bool __cache_hash_code> - inline void - swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, - _Alloc, __cache_hash_code>& __x, - unordered_multimap<_Key, _Tp, _Hash, _Pred, - _Alloc, __cache_hash_code>& __y) - { __x.swap(__y); } - -_GLIBCXX_END_NAMESPACE -} - -#endif // _TR1_UNORDERED_MAP diff --git a/contrib/libstdc++/include/tr1/unordered_set b/contrib/libstdc++/include/tr1/unordered_set deleted file mode 100644 index a01b89b3af8fa..0000000000000 --- a/contrib/libstdc++/include/tr1/unordered_set +++ /dev/null @@ -1,166 +0,0 @@ -// TR1 unordered_set -*- C++ -*- - -// Copyright (C) 2005, 2006, 2007 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. - -/** @file tr1/unordered_set - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_UNORDERED_SET -#define _TR1_UNORDERED_SET 1 - -#include <tr1/hashtable> -#include <tr1/functional_hash.h> - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - // XXX When we get typedef templates these class definitions - // will be unnecessary. - template<class _Value, - class _Hash = hash<_Value>, - class _Pred = std::equal_to<_Value>, - class _Alloc = std::allocator<_Value>, - bool __cache_hash_code = false> - class unordered_set - : public _Hashtable<_Value, _Value, _Alloc, - std::_Identity<_Value>, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, true, true> - { - typedef _Hashtable<_Value, _Value, _Alloc, - std::_Identity<_Value>, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, true, true> - _Base; - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - - explicit - unordered_set(size_type __n = 10, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), __eql, - std::_Identity<_Value>(), __a) - { } - - template<typename _InputIterator> - unordered_set(_InputIterator __f, _InputIterator __l, - size_type __n = 10, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), __eql, - std::_Identity<_Value>(), __a) - { } - }; - - template<class _Value, - class _Hash = hash<_Value>, - class _Pred = std::equal_to<_Value>, - class _Alloc = std::allocator<_Value>, - bool __cache_hash_code = false> - class unordered_multiset - : public _Hashtable<_Value, _Value, _Alloc, - std::_Identity<_Value>, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, true, false> - { - typedef _Hashtable<_Value, _Value, _Alloc, - std::_Identity<_Value>, _Pred, - _Hash, __detail::_Mod_range_hashing, - __detail::_Default_ranged_hash, - __detail::_Prime_rehash_policy, - __cache_hash_code, true, false> - _Base; - - public: - typedef typename _Base::size_type size_type; - typedef typename _Base::hasher hasher; - typedef typename _Base::key_equal key_equal; - typedef typename _Base::allocator_type allocator_type; - - explicit - unordered_multiset(size_type __n = 10, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), __eql, - std::_Identity<_Value>(), __a) - { } - - - template<typename _InputIterator> - unordered_multiset(_InputIterator __f, _InputIterator __l, - typename _Base::size_type __n = 0, - const hasher& __hf = hasher(), - const key_equal& __eql = key_equal(), - const allocator_type& __a = allocator_type()) - : _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(), - __detail::_Default_ranged_hash(), __eql, - std::_Identity<_Value>(), __a) - { } - }; - - template<class _Value, class _Hash, class _Pred, class _Alloc, - bool __cache_hash_code> - inline void - swap (unordered_set<_Value, _Hash, _Pred, - _Alloc, __cache_hash_code>& __x, - unordered_set<_Value, _Hash, _Pred, - _Alloc, __cache_hash_code>& __y) - { __x.swap(__y); } - - template<class _Value, class _Hash, class _Pred, class _Alloc, - bool __cache_hash_code> - inline void - swap(unordered_multiset<_Value, _Hash, _Pred, - _Alloc, __cache_hash_code>& __x, - unordered_multiset<_Value, _Hash, _Pred, - _Alloc, __cache_hash_code>& __y) - { __x.swap(__y); } - -_GLIBCXX_END_NAMESPACE -} - -#endif // _TR1_UNORDERED_SET diff --git a/contrib/libstdc++/include/tr1/utility b/contrib/libstdc++/include/tr1/utility deleted file mode 100644 index 93e00eb3c945f..0000000000000 --- a/contrib/libstdc++/include/tr1/utility +++ /dev/null @@ -1,102 +0,0 @@ -// TR1 utility -*- C++ -*- - -// Copyright (C) 2004, 2005, 2006, 2007 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. - -/** @file tr1/utility - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_UTILITY -#define _TR1_UTILITY 1 - -#include "../utility" - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(tr1) - - template<class _Tp> class tuple_size; - template<int _Int, class _Tp> class tuple_element; - - // Various functions which give std::pair a tuple-like interface. - template<class _Tp1, class _Tp2> - struct tuple_size<std::pair<_Tp1, _Tp2> > - { static const int value = 2; }; - - template<class _Tp1, class _Tp2> - const int tuple_size<std::pair<_Tp1, _Tp2> >::value; - - template<class _Tp1, class _Tp2> - struct tuple_element<0, std::pair<_Tp1, _Tp2> > - { typedef _Tp1 type; }; - - template<class _Tp1, class _Tp2> - struct tuple_element<1, std::pair<_Tp1, _Tp2> > - { typedef _Tp2 type; }; - - - template<int _Int> struct __pair_get; - - template<> - struct __pair_get<0> - { - template<typename _Tp1, typename _Tp2> - static _Tp1& __get(std::pair<_Tp1, _Tp2>& __pair) - { return __pair.first; } - - template<typename _Tp1, typename _Tp2> - static const _Tp1& __const_get(const std::pair<_Tp1, _Tp2>& __pair) - { return __pair.first; } - }; - - template<> - struct __pair_get<1> - { - template<typename _Tp1, typename _Tp2> - static _Tp2& __get(std::pair<_Tp1, _Tp2>& __pair) - { return __pair.second; } - - template<typename _Tp1, typename _Tp2> - static const _Tp2& __const_get(const std::pair<_Tp1, _Tp2>& __pair) - { return __pair.second; } - }; - - template<int _Int, class _Tp1, class _Tp2> - inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type& - get(std::pair<_Tp1, _Tp2>& __in) - { return __pair_get<_Int>::__get(__in); } - - template<int _Int, class _Tp1, class _Tp2> - inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type& - get(const std::pair<_Tp1, _Tp2>& __in) - { return __pair_get<_Int>::__const_get(__in); } - -_GLIBCXX_END_NAMESPACE -} - -#endif diff --git a/contrib/libstdc++/include/tr1/wchar.h b/contrib/libstdc++/include/tr1/wchar.h deleted file mode 100644 index 00fb8a0ce8e1f..0000000000000 --- a/contrib/libstdc++/include/tr1/wchar.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 wchar.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/wchar.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_WCHAR_H -#define _TR1_WCHAR_H 1 - -#include <tr1/cwchar> - -#endif diff --git a/contrib/libstdc++/include/tr1/wctype.h b/contrib/libstdc++/include/tr1/wctype.h deleted file mode 100644 index 9ef23cd636279..0000000000000 --- a/contrib/libstdc++/include/tr1/wctype.h +++ /dev/null @@ -1,39 +0,0 @@ -// TR1 wctype.h -*- C++ -*- - -// Copyright (C) 2006 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. - -/** @file tr1/wctype.h - * This is a TR1 C++ Library header. - */ - -#ifndef _TR1_WCTYPE_H -#define _TR1_WCTYPE_H 1 - -#include <tr1/cwctype> - -#endif |