Boost logo

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