|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r49214 - in branches/release: boost/tr1 boost/tr1/detail boost/tr1/tr1 boost/tr1/tr1/bcc32 boost/tr1/tr1/sun libs/tr1/doc libs/tr1/test libs/tr1/test/cyclic_depend libs/tr1/test/std_headers
From: john_at_[hidden]
Date: 2008-10-09 13:33:51
Author: johnmaddock
Date: 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
New Revision: 49214
URL: http://svn.boost.org/trac/boost/changeset/49214
Log:
Merged changes from Trunk:
* Updated tests to check for cyclic dependencies.
* Added <cmath> header.
* Fixed some bugs involving the new MSVC native TR1 library.
* Fixed some cyclic dependency bugs.
Added:
branches/release/boost/tr1/cmath.hpp
- copied unchanged from r49213, /trunk/boost/tr1/cmath.hpp
branches/release/boost/tr1/tr1/bcc32/unordere.h
- copied unchanged from r49213, /trunk/boost/tr1/tr1/bcc32/unordere.h
branches/release/boost/tr1/tr1/cmath
- copied unchanged from r49213, /trunk/boost/tr1/tr1/cmath
branches/release/boost/tr1/tr1/sun/cmath.SUNWCCh
- copied unchanged from r49213, /trunk/boost/tr1/tr1/sun/cmath.SUNWCCh
branches/release/boost/tr1/tr1/sun/unordered_map.SUNWCCh
- copied unchanged from r49213, /trunk/boost/tr1/tr1/sun/unordered_map.SUNWCCh
branches/release/boost/tr1/tr1/sun/unordered_set.SUNWCCh
- copied unchanged from r49213, /trunk/boost/tr1/tr1/sun/unordered_set.SUNWCCh
branches/release/boost/tr1/tr1/unordered_map
- copied unchanged from r49213, /trunk/boost/tr1/tr1/unordered_map
branches/release/boost/tr1/tr1/unordered_set
- copied unchanged from r49213, /trunk/boost/tr1/tr1/unordered_set
branches/release/boost/tr1/unordered_map.hpp
- copied unchanged from r49213, /trunk/boost/tr1/unordered_map.hpp
branches/release/boost/tr1/unordered_set.hpp
- copied unchanged from r49213, /trunk/boost/tr1/unordered_set.hpp
branches/release/libs/tr1/test/cyclic_depend/math_special_functions.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/cyclic_depend/math_special_functions.cpp
branches/release/libs/tr1/test/cyclic_depend/math_tr1.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/cyclic_depend/math_tr1.cpp
branches/release/libs/tr1/test/cyclic_depend/unordered_map.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/cyclic_depend/unordered_map.cpp
branches/release/libs/tr1/test/cyclic_depend/unordered_set.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/cyclic_depend/unordered_set.cpp
branches/release/libs/tr1/test/std_headers/test_cmath.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/std_headers/test_cmath.cpp
branches/release/libs/tr1/test/test_cmath.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/test_cmath.cpp
branches/release/libs/tr1/test/test_cmath_tricky.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/test_cmath_tricky.cpp
branches/release/libs/tr1/test/test_unordered_map.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/test_unordered_map.cpp
branches/release/libs/tr1/test/test_unordered_set.cpp
- copied unchanged from r49213, /trunk/libs/tr1/test/test_unordered_set.cpp
branches/release/libs/tr1/test/unordered_concepts.hpp
- copied unchanged from r49213, /trunk/libs/tr1/test/unordered_concepts.hpp
Text files modified:
branches/release/boost/tr1/array.hpp | 7
branches/release/boost/tr1/complex.hpp | 56 ++--
branches/release/boost/tr1/detail/config.hpp | 17 +
branches/release/boost/tr1/detail/config_all.hpp | 5
branches/release/boost/tr1/random.hpp | 9
branches/release/boost/tr1/regex.hpp | 7
branches/release/boost/tr1/tr1/array | 56 ++-
branches/release/boost/tr1/tr1/random | 14 +
branches/release/boost/tr1/tr1/tuple | 14 +
branches/release/boost/tr1/tr1/type_traits | 39 ++
branches/release/boost/tr1/tuple.hpp | 7
branches/release/boost/tr1/type_traits.hpp | 9
branches/release/libs/tr1/doc/tr1.qbk | 465 ++++++++++++++++++++++++++++++++-------
branches/release/libs/tr1/test/run_random.cpp | 2
branches/release/libs/tr1/test/test_complex.cpp | 7
15 files changed, 553 insertions(+), 161 deletions(-)
Modified: branches/release/boost/tr1/array.hpp
==============================================================================
--- branches/release/boost/tr1/array.hpp (original)
+++ branches/release/boost/tr1/array.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -9,7 +9,12 @@
#ifdef BOOST_HAS_TR1_ARRAY
-# include BOOST_TR1_HEADER(array)
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(array)
+# else
+# include <boost/tr1/detail/config_all.hpp>
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(array))
+# endif
#else
Modified: branches/release/boost/tr1/complex.hpp
==============================================================================
--- branches/release/boost/tr1/complex.hpp (original)
+++ branches/release/boost/tr1/complex.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -8,6 +8,34 @@
# include <boost/tr1/detail/config.hpp>
# include <complex>
+#ifndef BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+
+#include <boost/math/complex.hpp>
+
+namespace std {
+namespace tr1 {
+
+using boost::math::acos;
+using boost::math::asin;
+using boost::math::atan;
+using boost::math::acosh;
+using boost::math::asinh;
+using boost::math::atanh;
+using boost::math::fabs;
+
+} }
+
+#else
+
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(complex)
+# else
+# include <boost/tr1/detail/config_all.hpp>
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(complex))
+# endif
+
+#endif
+
#ifndef BOOST_HAS_TR1_COMPLEX_OVERLOADS
#include <boost/tr1/detail/math_overloads.hpp>
@@ -212,33 +240,5 @@
#endif
-#ifndef BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
-
-#include <boost/math/complex.hpp>
-
-namespace std {
-namespace tr1 {
-
-using boost::math::acos;
-using boost::math::asin;
-using boost::math::atan;
-using boost::math::acosh;
-using boost::math::asinh;
-using boost::math::atanh;
-using boost::math::fabs;
-
-} }
-
-#else
-
-# ifdef BOOST_HAS_INCLUDE_NEXT
-# include_next BOOST_TR1_HEADER(complex)
-# else
-# include <boost/tr1/detail/config_all.hpp>
-# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(complex))
-# endif
-
-#endif
-
#endif
Modified: branches/release/boost/tr1/detail/config.hpp
==============================================================================
--- branches/release/boost/tr1/detail/config.hpp (original)
+++ branches/release/boost/tr1/detail/config.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -54,6 +54,11 @@
# define BOOST_HAS_TR1
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
+# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+#endif
+
#ifdef BOOST_HAS_TR1
// turn on support for everything:
# define BOOST_HAS_TR1_ARRAY
@@ -73,6 +78,7 @@
# define BOOST_HAS_TR1_UTILITY
# define BOOST_HAS_TR1_UNORDERED_MAP
# define BOOST_HAS_TR1_UNORDERED_SET
+# define BOOST_HAS_TR1_CMATH
#endif
@@ -90,8 +96,10 @@
#ifdef BOOST_HAS_GCC_TR1
// turn on support for everything in gcc 4.0.x:
# define BOOST_HAS_TR1_ARRAY
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
//# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
-//# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+#endif
# define BOOST_HAS_TR1_REFERENCE_WRAPPER
# define BOOST_HAS_TR1_RESULT_OF
# define BOOST_HAS_TR1_MEM_FN
@@ -99,8 +107,13 @@
# define BOOST_HAS_TR1_FUNCTION
# define BOOST_HAS_TR1_HASH
# define BOOST_HAS_TR1_SHARED_PTR
-//# define BOOST_HAS_TR1_RANDOM
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
+# define BOOST_HAS_TR1_RANDOM
//# define BOOST_HAS_TR1_REGEX
+#ifdef _GLIBCXX_USE_C99_MATH_TR1
+# define BOOST_HAS_TR1_CMATH
+#endif
+#endif
# define BOOST_HAS_TR1_TUPLE
# define BOOST_HAS_TR1_TYPE_TRAITS
# define BOOST_HAS_TR1_UTILITY
Modified: branches/release/boost/tr1/detail/config_all.hpp
==============================================================================
--- branches/release/boost/tr1/detail/config_all.hpp (original)
+++ branches/release/boost/tr1/detail/config_all.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -46,6 +46,8 @@
# ifdef __SUNPRO_CC
// can't use <../stlport/name> since some compilers put stlport in a different directory:
# define BOOST_TR1_STD_HEADER(name) <../stlport4/name>
+# elif defined(__PGI)
+# define BOOST_TR1_STD_HEADER(name) <../CC/name>
# else
# define BOOST_TR1_STD_HEADER(name) <../stlport/name>
# endif
@@ -90,6 +92,9 @@
#if defined(__GNUC__) && !defined(BOOST_HAS_INCLUDE_NEXT)
# define BOOST_HAS_INCLUDE_NEXT
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# define BOOST_HAS_CPP_0X
+#endif
//
// We may be in the middle of parsing boost/config.hpp
Modified: branches/release/boost/tr1/random.hpp
==============================================================================
--- branches/release/boost/tr1/random.hpp (original)
+++ branches/release/boost/tr1/random.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -9,7 +9,12 @@
# include <boost/tr1/detail/config.hpp>
#ifdef BOOST_HAS_TR1_RANDOM
-# include BOOST_TR1_HEADER(random)
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(random)
+# else
+# include <boost/tr1/detail/config_all.hpp>
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(random))
+# endif
#else
// Boost.Random:
#include <boost/random.hpp>
@@ -133,7 +138,7 @@
// constructors and member function
mersenne_twister(){}
explicit mersenne_twister(unsigned long value)
- : m_gen(value == 0 ? 4357UL : value){}
+ : m_gen(value == 0 ? 5489UL : value){}
template<class Gen> mersenne_twister(Gen& g)
{
init1(g, ::boost::is_same<mersenne_twister,Gen>());
Modified: branches/release/boost/tr1/regex.hpp
==============================================================================
--- branches/release/boost/tr1/regex.hpp (original)
+++ branches/release/boost/tr1/regex.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -9,7 +9,12 @@
#ifdef BOOST_HAS_TR1_REGEX
-# include BOOST_TR1_HEADER(regex)
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(regex)
+# else
+# include <boost/tr1/detail/config_all.hpp>
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(regex))
+# endif
#else
Modified: branches/release/boost/tr1/tr1/array
==============================================================================
--- branches/release/boost/tr1/tr1/array (original)
+++ branches/release/boost/tr1/tr1/array 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -1,22 +1,34 @@
-// (C) Copyright John Maddock 2005.
-// Use, modification and distribution are subject to 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)
-
-
-#if !defined(BOOST_TR1_ARRAY_INCLUDED)
-# define BOOST_TR1_ARRAY_INCLUDED
-# define BOOST_TR1_NO_RECURSION
-# include <boost/tr1/detail/config_all.hpp>
-# ifdef BOOST_HAS_TR1_ARRAY
-# ifdef BOOST_HAS_INCLUDE_NEXT
-# include_next BOOST_TR1_HEADER(array)
-# else
-# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(array))
-# endif
-# else
-# include <boost/tr1/array.hpp>
-# endif
-# undef BOOST_TR1_NO_RECURSION
-#endif
-
+// (C) Copyright John Maddock 2005.
+// Use, modification and distribution are subject to 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)
+
+
+#if !defined(BOOST_TR1_ARRAY_INCLUDED)
+# define BOOST_TR1_ARRAY_INCLUDED
+# include <boost/tr1/detail/config_all.hpp>
+
+# ifdef BOOST_HAS_CPP_0X
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <array>
+# else
+# include BOOST_TR1_STD_HEADER(array)
+# endif
+# endif
+
+# if !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
+# ifdef BOOST_HAS_TR1_ARRAY
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(array)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(array))
+# endif
+# else
+# include <boost/tr1/array.hpp>
+# endif
+# undef BOOST_TR1_NO_RECURSION
+#endif
+#endif
+
+
Modified: branches/release/boost/tr1/tr1/random
==============================================================================
--- branches/release/boost/tr1/tr1/random (original)
+++ branches/release/boost/tr1/tr1/random 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -6,8 +6,18 @@
#ifndef BOOST_TR1_RANDOM_INCLUDED
# define BOOST_TR1_RANDOM_INCLUDED
-# define BOOST_TR1_NO_RECURSION
# include <boost/tr1/detail/config_all.hpp>
+
+# ifdef BOOST_HAS_CPP_0X
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <random>
+# else
+# include BOOST_TR1_STD_HEADER(random)
+# endif
+# endif
+
+# if !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
# ifdef BOOST_HAS_TR1_RANDOM
# ifdef BOOST_HAS_INCLUDE_NEXT
# include_next BOOST_TR1_HEADER(random)
@@ -18,5 +28,7 @@
# include <boost/tr1/random.hpp>
# endif
# undef BOOST_TR1_NO_RECURSION
+# endif
#endif
+
Modified: branches/release/boost/tr1/tr1/tuple
==============================================================================
--- branches/release/boost/tr1/tr1/tuple (original)
+++ branches/release/boost/tr1/tr1/tuple 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -6,8 +6,18 @@
#ifndef BOOST_TR1_TUPLE_INCLUDED
# define BOOST_TR1_TUPLE_INCLUDED
-# define BOOST_TR1_NO_RECURSION
# include <boost/tr1/detail/config_all.hpp>
+
+# ifdef BOOST_HAS_CPP_0X
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <tuple>
+# else
+# include BOOST_TR1_STD_HEADER(tuple)
+# endif
+# endif
+
+# if !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
# ifdef BOOST_HAS_TR1_TUPLE
# ifdef BOOST_HAS_INCLUDE_NEXT
# include_next BOOST_TR1_HEADER(tuple)
@@ -18,5 +28,7 @@
# include <boost/tr1/tuple.hpp>
# endif
# undef BOOST_TR1_NO_RECURSION
+# endif
#endif
+
Modified: branches/release/boost/tr1/tr1/type_traits
==============================================================================
--- branches/release/boost/tr1/tr1/type_traits (original)
+++ branches/release/boost/tr1/tr1/type_traits 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -4,17 +4,40 @@
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#include <boost/tr1/detail/config_all.hpp>
+
+#if (!defined(BOOST_TR1_TYPE_TRAITS_INCLUDED) || defined(BOOST_TR1_NO_RECURSION)) && defined(BOOST_HAS_CPP_0X)
#ifndef BOOST_TR1_TYPE_TRAITS_INCLUDED
# define BOOST_TR1_TYPE_TRAITS_INCLUDED
-# include <boost/tr1/detail/config_all.hpp>
-# ifdef BOOST_HAS_TR1_TYPE_TRAITS
-# ifdef BOOST_HAS_INCLUDE_NEXT
-# include_next BOOST_TR1_HEADER(type_traits)
-# else
-# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(type_traits))
-# endif
+#endif
+# ifdef BOOST_TR1_NO_TYPE_TRAITS_RECURSION2
+# define BOOST_TR1_NO_TYPE_TRAITS_RECURSION3
+# elif defined(BOOST_TR1_NO_TYPE_TRAITS_RECURSION)
+# define BOOST_TR1_NO_TYPE_TRAITS_RECURSION2
+# elif !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_TYPE_TRAITS_RECURSION
+# endif
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <type_traits>
# else
-# include <boost/tr1/type_traits.hpp>
+# include BOOST_TR1_STD_HEADER(type_traits)
+# endif
+#ifdef BOOST_TR1_NO_TYPE_TRAITS_RECURSION3
+# undef BOOST_TR1_NO_TYPE_TRAITS_RECURSION3
+#elif defined(BOOST_TR1_NO_TYPE_TRAITS_RECURSION2)
+# undef BOOST_TR1_NO_TYPE_TRAITS_RECURSION2
+#elif defined(BOOST_TR1_NO_TYPE_TRAITS_RECURSION)
+# undef BOOST_TR1_NO_RECURSION
+# undef BOOST_TR1_NO_TYPE_TRAITS_RECURSION
# endif
#endif
+#if !defined(BOOST_TR1_FULL_TYPE_TRAITS_INCLUDED) && !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_FULL_TYPE_TRAITS_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/type_traits.hpp>
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
+
Modified: branches/release/boost/tr1/tuple.hpp
==============================================================================
--- branches/release/boost/tr1/tuple.hpp (original)
+++ branches/release/boost/tr1/tuple.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -9,7 +9,12 @@
#ifdef BOOST_HAS_TR1_TUPLE
-# include BOOST_TR1_HEADER(tuple)
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(tuple)
+# else
+# include <boost/tr1/detail/config_all.hpp>
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(tuple))
+# endif
#else
Modified: branches/release/boost/tr1/type_traits.hpp
==============================================================================
--- branches/release/boost/tr1/type_traits.hpp (original)
+++ branches/release/boost/tr1/type_traits.hpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -8,7 +8,14 @@
# include <boost/tr1/detail/config.hpp>
#ifdef BOOST_HAS_TR1_TYPE_TRAITS
-# include BOOST_TR1_HEADER(type_traits)
+
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(type_traits)
+# else
+# include <boost/tr1/detail/config_all.hpp>
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(type_traits))
+# endif
+
#else
// Boost Type Traits:
#include <boost/type_traits.hpp>
Modified: branches/release/libs/tr1/doc/tr1.qbk
==============================================================================
--- branches/release/libs/tr1/doc/tr1.qbk (original)
+++ branches/release/libs/tr1/doc/tr1.qbk 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -1337,16 +1337,142 @@
[endsect]
+[section:unordered_set Unordered Associative Set (Hash Table).]
+
+ #include <boost/tr1/unordered_set.hpp>
+
+or
+
+ #include <unordered_set>
+
+For accessing data based on key lookup, the C++ standard library
+offers std::set, std::map, std::multiset and std::multimap.
+These are generally implemented using balanced binary trees so that
+lookup time has logarithmic complexity. That is generally okay,
+but in many cases a hash table can perform better, as accessing
+data has constant complexity, on average. The worst case complexity
+is linear, but that occurs rarely and with some care, can be avoided.
+
+With this in mind, the C++ Standard Library Technical Report
+introduced the unordered associative containers, which are
+implemented using hash tables, and they have now been added to
+the Working Draft of the C++ Standard.
+
+Refer to the
+[@../../libs/unordered/index.html Unordered Library docs]
+for more information.
+
+ namespace std {
+ namespace tr1 {
+
+ template <class Value,
+ class Hash = hash<Value>,
+ class Pred = std::equal_to<Value>,
+ class Alloc = std::allocator<Value> >
+ class unordered_set;
+
+ // [6.3.4.5] Class template unordered_multiset
+ template <class Value,
+ class Hash = hash<Value>,
+ class Pred = std::equal_to<Value>,
+ class Alloc = std::allocator<Value> >
+ class unordered_multiset;
+
+ template <class Value, class Hash, class Pred, class Alloc>
+ void swap(unordered_set<Value, Hash, Pred, Alloc>& x,
+ unordered_set<Value, Hash, Pred, Alloc>& y);
+
+ template <class Value, class Hash, class Pred, class Alloc>
+ void swap(unordered_multiset<Value, Hash, Pred, Alloc>& x,
+ unordered_multiset<Value, Hash, Pred, Alloc>& y);
+
+ } // namespace tr1
+ } // namespace std
+
+[*Configuration:]
+[@../../libs/config/index.html Boost.Config] should (automatically) define
+the macro BOOST_HAS_TR1_UNORDERED_SET if your
+standard library implements this part of TR1.
+
+[*Standard Conformity:]
+No known issues for conforming compilers.
+
[endsect]
-[section:unsupported TR By Subject: Unsupported Features]
+[section:unordered_map Unordered Associative Map (Hash Table).]
+
+ #include <boost/tr1/unordered_map.hpp>
+
+or
+
+ #include <unordered_map>
+
+For accessing data based on key lookup, the C++ standard library
+offers std::set, std::map, std::multiset and std::multimap.
+These are generally implemented using balanced binary trees so that
+lookup time has logarithmic complexity. That is generally okay,
+but in many cases a hash table can perform better, as accessing
+data has constant complexity, on average. The worst case complexity
+is linear, but that occurs rarely and with some care, can be avoided.
+
+With this in mind, the C++ Standard Library Technical Report
+introduced the unordered associative containers, which are
+implemented using hash tables, and they have now been added to
+the Working Draft of the C++ Standard.
+
+Refer to the
+[@../../libs/unordered/index.html Unordered Library docs]
+for more information.
+
+ namespace std {
+ namespace tr1 {
+
+ // [6.3.4.4] Class template unordered_map
+ template <class Key,
+ class T,
+ class Hash = hash<Key>,
+ class Pred = std::equal_to<Key>,
+ class Alloc = std::allocator<std::pair<const Key, T> > >
+ class unordered_map;
+
+ // [6.3.4.6] Class template unordered_multimap
+ template <class Key,
+ class T,
+ class Hash = hash<Key>,
+ class Pred = std::equal_to<Key>,
+ class Alloc = std::allocator<std::pair<const Key, T> > >
+ class unordered_multimap;
+
+ template <class Key, class T, class Hash, class Pred, class Alloc>
+ void swap(unordered_map<Key, T, Hash, Pred, Alloc>& x,
+ unordered_map<Key, T, Hash, Pred, Alloc>& y);
+
+ template <class Key, class T, class Hash, class Pred, class Alloc>
+ void swap(unordered_multimap<Key, T, Hash, Pred, Alloc>& x,
+ unordered_multimap<Key, T, Hash, Pred, Alloc>& y);
+
+ } // namespace tr1
+ } // namespace std
+
+[*Configuration:]
+[@../../libs/config/index.html Boost.Config] should (automatically) define
+the macro BOOST_HAS_TR1_UNORDERED_MAP if your
+standard library implements this part of TR1.
+
+[*Standard Conformity:]
+No known issues for conforming compilers.
+
+[endsect]
[section:special Mathematical Special Functions.]
The TR adds 23 special functions (plus float and long double overloads)
-to header <cmath>. However, at present there is no Boost License
-compatible implementation of these functions, so these are [*unsupported
-by this implementation] unless your standard library supports them itself.
+to header <cmath>.
+
+Refer to the
+[@../../libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/tr1.html Math Library docs]
+for more information.
+
namespace std {
namespace tr1 {
@@ -1473,110 +1599,265 @@
[*Standard Conformity:]
-['[*Not Supported.]]
+The following functions are not supported in the Boost version of this component:
-[endsect]
-
-[section:unordered_set Unordered Associative Set (Hash Table).]
-
- #include <boost/tr1/unordered_set.hpp>
-
-or
-
- #include <unordered_set>
-
-This is not currently supported by Boost, although that situation is
-hoped to change soon.
-
- namespace std {
- namespace tr1 {
-
- template <class Value,
- class Hash = hash<Value>,
- class Pred = std::equal_to<Value>,
- class Alloc = std::allocator<Value> >
- class unordered_set;
-
- // [6.3.4.5] Class template unordered_multiset
- template <class Value,
- class Hash = hash<Value>,
- class Pred = std::equal_to<Value>,
- class Alloc = std::allocator<Value> >
- class unordered_multiset;
-
- template <class Value, class Hash, class Pred, class Alloc>
- void swap(unordered_set<Value, Hash, Pred, Alloc>& x,
- unordered_set<Value, Hash, Pred, Alloc>& y);
-
- template <class Value, class Hash, class Pred, class Alloc>
- void swap(unordered_multiset<Value, Hash, Pred, Alloc>& x,
- unordered_multiset<Value, Hash, Pred, Alloc>& y);
-
- } // namespace tr1
- } // namespace std
-
-[*Configuration:]
-[@../../libs/config/index.html Boost.Config] should (automatically) define
-the macro BOOST_HAS_TR1_UNORDERED_SET if your
-standard library implements this part of TR1.
+ // [5.2.1.7] confluent hypergeometric functions:
+ double conf_hyperg(double a, double c, double x);
+ float conf_hypergf(float a, float c, float x);
+ long double conf_hypergl(long double a, long double c, long double x);
-[*Standard Conformity:]
-Not supported.
+ // [5.2.1.17] hypergeometric functions:
+ double hyperg(double a, double b, double c, double x);
+ float hypergf(float a, float b, float c, float x);
+ long double hypergl(long double a, long double b, long double c, long double x);
[endsect]
-[section:unordered_map Unordered Associative Map (Hash Table).]
+[section:c99_special C99 Mathematical Special Functions.]
- #include <boost/tr1/unordered_map.hpp>
-
-or
+The TR adds a number of special functions which were first introduced in the C99 standard
+to header <cmath>.
+
+Refer to the
+[@../../libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/tr1.html Math Library docs]
+for more information.
- #include <unordered_map>
-
-This is not currently supported by Boost, although that situation is
-hoped to change soon.
namespace std {
namespace tr1 {
+
+ // types
+ typedef floating-type double_t;
+ typedef floating-type float_t;
+
+ // functions
+ double acosh(double x);
+ float acoshf(float x);
+ long double acoshl(long double x);
+
+ double asinh(double x);
+ float asinhf(float x);
+ long double asinhl(long double x);
+
+ double atanh(double x);
+ float atanhf(float x);
+ long double atanhl(long double x);
+
+ double cbrt(double x);
+ float cbrtf(float x);
+ long double cbrtl(long double x);
+
+ double copysign(double x, double y);
+ float copysignf(float x, float y);
+ long double copysignl(long double x, long double y);
+
+ double erf(double x);
+ float erff(float x);
+ long double erfl(long double x);
+
+ double erfc(double x);
+ float erfcf(float x);
+ long double erfcl(long double x);
+
+ double exp2(double x);
+ float exp2f(float x);
+ long double exp2l(long double x);
+
+ double expm1(double x);
+ float expm1f(float x);
+ long double expm1l(long double x);
+
+ double fdim(double x, double y);
+ float fdimf(float x, float y);
+ long double fdiml(long double x, long double y);
+
+ double fma(double x, double y, double z);
+ float fmaf(float x, float y, float z);
+ long double fmal(long double x, long double y, long double z);
+
+ double fmax(double x, double y);
+ float fmaxf(float x, float y);
+ long double fmaxl(long double x, long double y);
+
+ double fmin(double x, double y);
+ float fminf(float x, float y);
+ long double fminl(long double x, long double y);
+
+ double hypot(double x, double y);
+ float hypotf(float x, float y);
+ long double hypotl(long double x, long double y);
+
+ int ilogb(double x);
+ int ilogbf(float x);
+ int ilogbl(long double x);
+
+ double lgamma(double x);
+ float lgammaf(float x);
+ long double lgammal(long double x);
+
+ long long llrint(double x);
+ long long llrintf(float x);
+ long long llrintl(long double x);
+
+ long long llround(double x);
+ long long llroundf(float x);
+ long long llroundl(long double x);
+
+ double log1p(double x);
+ float log1pf(float x);
+ long double log1pl(long double x);
+
+ double log2(double x);
+ float log2f(float x);
+ long double log2l(long double x);
+
+ double logb(double x);
+ float logbf(float x);
+ long double logbl(long double x);
+
+ long lrint(double x);
+ long lrintf(float x);
+ long lrintl(long double x);
+
+ long lround(double x);
+ long lroundf(float x);
+ long lroundl(long double x);
+
+ double nan(const char *str);
+ float nanf(const char *str);
+ long double nanl(const char *str);
+
+ double nearbyint(double x);
+ float nearbyintf(float x);
+ long double nearbyintl(long double x);
+
+ double nextafter(double x, double y);
+ float nextafterf(float x, float y);
+ long double nextafterl(long double x, long double y);
+
+ double nexttoward(double x, long double y);
+ float nexttowardf(float x, long double y);
+ long double nexttowardl(long double x, long double y);
+
+ double remainder(double x, double y);
+ float remainderf(float x, float y);
+ long double remainderl(long double x, long double y);
+
+ double remquo(double x, double y, int *pquo);
+ float remquof(float x, float y, int *pquo);
+ long double remquol(long double x, long double y, int *pquo);
+
+ double rint(double x);
+ float rintf(float x);
+ long double rintl(long double x);
+
+ double round(double x);
+ float roundf(float x);
+ long double roundl(long double x);
+
+ double scalbln(double x, long ex);
+ float scalblnf(float x, long ex);
+ long double scalblnl(long double x, long ex);
+ double scalbn(double x, int ex);
+ float scalbnf(float x, int ex);
+ long double scalbnl(long double x, int ex);
+
+ double tgamma(double x);
+ float tgammaf(float x);
+ long double tgammal(long double x);
+
+ double trunc(double x);
+ float truncf(float x);
+ long double truncl(long double x);
+
+ // C99 macros defined as C++ templates
+ template<class T> bool signbit(T x);
+ template<class T> int fpclassify(T x);
+ template<class T> bool isfinite(T x);
+ template<class T> bool isinf(T x);
+ template<class T> bool isnan(T x);
+ template<class T> bool isnormal(T x);
+ template<class T> bool isgreater(T x, T y);
+ template<class T> bool isgreaterequal(T x, T y);
+ template<class T> bool isless(T x, T y);
+ template<class T> bool islessequal(T x, T y);
+ template<class T> bool islessgreater(T x, T y);
+ template<class T> bool isunordered(T x, T y);
- // [6.3.4.4] Class template unordered_map
- template <class Key,
- class T,
- class Hash = hash<Key>,
- class Pred = std::equal_to<Key>,
- class Alloc = std::allocator<std::pair<const Key, T> > >
- class unordered_map;
-
- // [6.3.4.6] Class template unordered_multimap
- template <class Key,
- class T,
- class Hash = hash<Key>,
- class Pred = std::equal_to<Key>,
- class Alloc = std::allocator<std::pair<const Key, T> > >
- class unordered_multimap;
-
- template <class Key, class T, class Hash, class Pred, class Alloc>
- void swap(unordered_map<Key, T, Hash, Pred, Alloc>& x,
- unordered_map<Key, T, Hash, Pred, Alloc>& y);
-
- template <class Key, class T, class Hash, class Pred, class Alloc>
- void swap(unordered_multimap<Key, T, Hash, Pred, Alloc>& x,
- unordered_multimap<Key, T, Hash, Pred, Alloc>& y);
-
- } // namespace tr1
- } // namespace std
-
-[*Configuration:]
-[@../../libs/config/index.html Boost.Config] should (automatically) define
-the macro BOOST_HAS_TR1_UNORDERED_MAP if your
-standard library implements this part of TR1.
+ }} // namespaces
[*Standard Conformity:]
-Not supported.
+The following functions are not supported in the Boost version of this component:
-[endsect]
+ double exp2(double x);
+ float exp2f(float x);
+ long double exp2l(long double x);
+
+ double fdim(double x, double y);
+ float fdimf(float x, float y);
+ long double fdiml(long double x, long double y);
+
+ double fma(double x, double y, double z);
+ float fmaf(float x, float y, float z);
+ long double fmal(long double x, long double y, long double z);
+
+ int ilogb(double x);
+ int ilogbf(float x);
+ int ilogbl(long double x);
+
+ long long llrint(double x);
+ long long llrintf(float x);
+ long long llrintl(long double x);
+
+ double log2(double x);
+ float log2f(float x);
+ long double log2l(long double x);
+
+ double logb(double x);
+ float logbf(float x);
+ long double logbl(long double x);
+
+ long lrint(double x);
+ long lrintf(float x);
+ long lrintl(long double x);
+
+ double nan(const char *str);
+ float nanf(const char *str);
+ long double nanl(const char *str);
+
+ double nearbyint(double x);
+ float nearbyintf(float x);
+ long double nearbyintl(long double x);
+
+ double remainder(double x, double y);
+ float remainderf(float x, float y);
+ long double remainderl(long double x, long double y);
+
+ double remquo(double x, double y, int *pquo);
+ float remquof(float x, float y, int *pquo);
+ long double remquol(long double x, long double y, int *pquo);
+
+ double rint(double x);
+ float rintf(float x);
+ long double rintl(long double x);
+
+ double scalbln(double x, long ex);
+ float scalblnf(float x, long ex);
+ long double scalblnl(long double x, long ex);
+ double scalbn(double x, int ex);
+ float scalbnf(float x, int ex);
+ long double scalbnl(long double x, int ex);
+
+ // C99 macros defined as C++ templates
+ template<class T> bool isgreater(T x, T y);
+ template<class T> bool isgreaterequal(T x, T y);
+ template<class T> bool isless(T x, T y);
+ template<class T> bool islessequal(T x, T y);
+ template<class T> bool islessgreater(T x, T y);
+ template<class T> bool isunordered(T x, T y);
[endsect]
+[endsect]
[section:header_list TR1 By Header]
Modified: branches/release/libs/tr1/test/run_random.cpp
==============================================================================
--- branches/release/libs/tr1/test/run_random.cpp (original)
+++ branches/release/libs/tr1/test/run_random.cpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -92,7 +92,7 @@
a1 = a2;
validate("mt11213b", a2, 3809585648u);
validate("mt11213b", a1, 3809585648u);
- a1.seed(0u);
+ a1.seed(5489UL);
validate("mt11213b", a1, 3809585648u);
a1 = mt11213b(5489u);
validate("mt11213b", a1, 3809585648u);
Modified: branches/release/libs/tr1/test/test_complex.cpp
==============================================================================
--- branches/release/libs/tr1/test/test_complex.cpp (original)
+++ branches/release/libs/tr1/test/test_complex.cpp 2008-10-09 13:33:50 EDT (Thu, 09 Oct 2008)
@@ -129,11 +129,18 @@
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
verify_return_type(std::tr1::atanh(l), l);
#endif
+
+ //
+ // There is a bug in the TR text here, that means we can't always
+ // check these as we'd like:
+ //
+#if !(defined(__GNUC__) && defined(BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG) && !defined(_GLIBCXX_INCLUDE_AS_CXX0X))
verify_return_type(std::tr1::fabs(f), sf);
verify_return_type(std::tr1::fabs(d), sd);
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
verify_return_type(std::tr1::fabs(l), sl);
#endif
+#endif
return 0;
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk