|
Boost-Commit : |
From: daniel_james_at_[hidden]
Date: 2007-08-23 20:42:24
Author: danieljames
Date: 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
New Revision: 38873
URL: http://svn.boost.org/trac/boost/changeset/38873
Log:
Copy hash library from 1.34.1 over trunk.
For the first merge with the release branch, I only want to include some of the
changes I've been working on (fixes and some trivial changes), so I'm starting
again from 1.34.1.
Removed:
trunk/boost/functional/hash/extensions.hpp
Text files modified:
trunk/boost/functional/detail/container_fwd.hpp | 6
trunk/boost/functional/detail/float_functions.hpp | 6
trunk/boost/functional/detail/hash_float.hpp | 77 +--------
trunk/boost/functional/hash.hpp | 10
trunk/boost/functional/hash/deque.hpp | 6
trunk/boost/functional/hash/hash.hpp | 309 ++++++++++++++++++++++++++-------------
trunk/boost/functional/hash/list.hpp | 6
trunk/boost/functional/hash/map.hpp | 6
trunk/boost/functional/hash/pair.hpp | 6
trunk/boost/functional/hash/set.hpp | 6
trunk/boost/functional/hash/vector.hpp | 6
trunk/boost/functional/hash_fwd.hpp | 6
trunk/libs/functional/hash/doc/Jamfile.v2 | 4
trunk/libs/functional/hash/doc/changes.qbk | 2
trunk/libs/functional/hash/doc/disable.qbk | 2
trunk/libs/functional/hash/doc/hash.qbk | 4
trunk/libs/functional/hash/doc/intro.qbk | 2
trunk/libs/functional/hash/doc/links.qbk | 2
trunk/libs/functional/hash/doc/portability.qbk | 2
trunk/libs/functional/hash/doc/ref.xml | 105 -------------
trunk/libs/functional/hash/doc/thanks.qbk | 15 +
trunk/libs/functional/hash/doc/tutorial.qbk | 4
trunk/libs/functional/hash/examples/books.cpp | 6
trunk/libs/functional/hash/examples/books.hpp | 6
trunk/libs/functional/hash/examples/point.cpp | 6
trunk/libs/functional/hash/examples/portable.cpp | 6
trunk/libs/functional/hash/index.html | 2
trunk/libs/functional/hash/test/Jamfile.v2 | 9
trunk/libs/functional/hash/test/compile_time.hpp | 8
trunk/libs/functional/hash/test/config.hpp | 6
trunk/libs/functional/hash/test/container_fwd_test.cpp | 6
trunk/libs/functional/hash/test/hash_built_in_array_test.cpp | 6
trunk/libs/functional/hash/test/hash_custom_test.cpp | 6
trunk/libs/functional/hash/test/hash_deque_test.cpp | 6
trunk/libs/functional/hash/test/hash_float_test.cpp | 100 +++++------
trunk/libs/functional/hash/test/hash_friend_test.cpp | 6
trunk/libs/functional/hash/test/hash_function_pointer_test.cpp | 6
trunk/libs/functional/hash/test/hash_fwd_test.hpp | 6
trunk/libs/functional/hash/test/hash_fwd_test_1.cpp | 6
trunk/libs/functional/hash/test/hash_fwd_test_2.cpp | 6
trunk/libs/functional/hash/test/hash_global_namespace_test.cpp | 8
trunk/libs/functional/hash/test/hash_list_test.cpp | 6
trunk/libs/functional/hash/test/hash_map_test.cpp | 6
trunk/libs/functional/hash/test/hash_map_test.hpp | 15 -
trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp | 6
trunk/libs/functional/hash/test/hash_no_ext_macro_1.cpp | 6
trunk/libs/functional/hash/test/hash_no_ext_macro_2.cpp | 6
trunk/libs/functional/hash/test/hash_number_test.cpp | 50 +-----
trunk/libs/functional/hash/test/hash_pointer_test.cpp | 6
trunk/libs/functional/hash/test/hash_range_test.cpp | 6
trunk/libs/functional/hash/test/hash_sequence_test.hpp | 15 -
trunk/libs/functional/hash/test/hash_set_test.cpp | 6
trunk/libs/functional/hash/test/hash_set_test.hpp | 22 --
trunk/libs/functional/hash/test/hash_string_test.cpp | 6
trunk/libs/functional/hash/test/hash_value_array_test.cpp | 6
trunk/libs/functional/hash/test/hash_vector_test.cpp | 6
trunk/libs/functional/hash/test/link_ext_test.cpp | 9
trunk/libs/functional/hash/test/link_no_ext_test.cpp | 6
trunk/libs/functional/hash/test/link_test.cpp | 6
trunk/libs/functional/hash/test/link_test_2.cpp | 6
60 files changed, 432 insertions(+), 566 deletions(-)
Modified: trunk/boost/functional/detail/container_fwd.hpp
==============================================================================
--- trunk/boost/functional/detail/container_fwd.hpp (original)
+++ trunk/boost/functional/detail/container_fwd.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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_DETAIL_CONTAINER_FWD_HPP)
#define BOOST_DETAIL_CONTAINER_FWD_HPP
Modified: trunk/boost/functional/detail/float_functions.hpp
==============================================================================
--- trunk/boost/functional/detail/float_functions.hpp (original)
+++ trunk/boost/functional/detail/float_functions.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP)
#define BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP
Modified: trunk/boost/functional/detail/hash_float.hpp
==============================================================================
--- trunk/boost/functional/detail/hash_float.hpp (original)
+++ trunk/boost/functional/detail/hash_float.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
@@ -15,9 +15,9 @@
#endif
#include <boost/functional/detail/float_functions.hpp>
-#include <boost/integer/static_log2.hpp>
#include <boost/limits.hpp>
#include <boost/assert.hpp>
+#include <errno.h>
// Don't use fpclassify or _fpclass for stlport.
#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
@@ -35,43 +35,10 @@
# endif
#endif
-// On OpenBSD, numeric_limits is not reliable for long doubles, but
-// the macros defined in <float.h> are.
-
-#if defined(__OpenBSD__)
-#include <float.h>
-#endif
-
namespace boost
{
namespace hash_detail
{
- template <class T>
- struct limits : std::numeric_limits<T> {};
-
-#if defined(__OpenBSD__)
- template <>
- struct limits<long double>
- : std::numeric_limits<long double>
- {
- static long double epsilon() {
- return LDBL_EPSILON;
- }
-
- static long double (max)() {
- return LDBL_MAX;
- }
-
- static long double (min)() {
- return LDBL_MIN;
- }
-
- BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG);
- BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP);
- BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP);
- };
-#endif // __OpenBSD__
-
inline void hash_float_combine(std::size_t& seed, std::size_t value)
{
seed ^= value + (seed<<6) + (seed>>2);
@@ -81,35 +48,21 @@
inline std::size_t float_hash_impl(T v)
{
int exp = 0;
+ errno = 0;
+ v = boost::hash_detail::call_frexp(v, &exp);
+ if(errno) return 0;
- // The result of frexp is always between 0.5 and 1, so its
- // top bit will always be 1. Subtract by 0.5 to remove that.
- if(v >= 0) {
- v = boost::hash_detail::call_frexp(v, &exp) - T(0.5);
- }
- else {
- v = -boost::hash_detail::call_frexp(v, &exp) - T(0.5);
- exp = ~exp;
- }
-
- // TODO: Of course, this doesn't pass when hashing infinity or NaN.
- //BOOST_ASSERT(0 <= v && v < 0.5);
-
- v = boost::hash_detail::call_ldexp(v,
- limits<std::size_t>::digits + 1);
- std::size_t seed = static_cast<std::size_t>(v);
- v -= seed;
+ std::size_t seed = 0;
- // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1;
std::size_t const length
- = (limits<T>::digits *
- boost::static_log2<limits<T>::radix>::value - 1)
- / limits<std::size_t>::digits;
+ = (std::numeric_limits<T>::digits +
+ std::numeric_limits<int>::digits - 1)
+ / std::numeric_limits<int>::digits;
- for(std::size_t i = 0; i != length; ++i)
+ for(std::size_t i = 0; i < length; ++i)
{
- v = boost::hash_detail::call_ldexp(v, limits<std::size_t>::digits);
- std::size_t part = static_cast<std::size_t>(v);
+ v = boost::hash_detail::call_ldexp(v, std::numeric_limits<int>::digits);
+ int const part = static_cast<int>(v);
v -= part;
hash_float_combine(seed, part);
}
@@ -161,7 +114,7 @@
return 0;
}
#else
- return v == 0 ? 0 : float_hash_impl(v);
+ return float_hash_impl(v);
#endif
}
}
Modified: trunk/boost/functional/hash.hpp
==============================================================================
--- trunk/boost/functional/hash.hpp (original)
+++ trunk/boost/functional/hash.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,14 +1,10 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
// issue 6.18.
#include <boost/functional/hash/hash.hpp>
-
-#if !defined(BOOST_HASH_NO_EXTENSIONS)
-#include <boost/functional/hash/extensions.hpp>
-#endif
Modified: trunk/boost/functional/hash/deque.hpp
==============================================================================
--- trunk/boost/functional/hash/deque.hpp (original)
+++ trunk/boost/functional/hash/deque.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2006 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Deleted: trunk/boost/functional/hash/extensions.hpp
==============================================================================
--- trunk/boost/functional/hash/extensions.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
+++ (empty file)
@@ -1,182 +0,0 @@
-
-// Copyright 2005-2007 Daniel James.
-// 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)
-
-// Based on Peter Dimov's proposal
-// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
-// issue 6.18.
-
-#if !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
-#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-namespace boost
-{
-
-#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- namespace hash_detail
- {
- template <bool IsArray>
- struct call_hash_impl
- {
- template <class T>
- struct inner
- {
- static std::size_t call(T const& v)
- {
- using namespace boost;
- return hash_value(v);
- }
- };
- };
-
- template <>
- struct call_hash_impl<true>
- {
- template <class Array>
- struct inner
- {
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- static std::size_t call(Array const& v)
-#else
- static std::size_t call(Array& v)
-#endif
- {
- const int size = sizeof(v) / sizeof(*v);
- return boost::hash_range(v, v + size);
- }
- };
- };
-
- template <class T>
- struct call_hash
- : public call_hash_impl<boost::is_array<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T>
- {
- };
- }
-#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- template <class T> struct hash
- : std::unary_function<T, std::size_t>
- {
-#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- std::size_t operator()(T const& val) const
- {
- return hash_value(val);
- }
-#else
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
-#endif
- };
-
-#if BOOST_WORKAROUND(__DMC__, <= 0x848)
- template <class T, unsigned int n> struct hash<T[n]>
- : std::unary_function<T[n], std::size_t>
- {
- std::size_t operator()(const T* val) const
- {
- return boost::hash_range(val, val+n);
- }
- };
-#endif
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // On compilers without partial specialization, boost::hash<T>
- // has already been declared to deal with pointers, so just
- // need to supply the non-pointer version.
-
- namespace hash_detail
- {
- template <bool IsPointer>
- struct hash_impl;
-
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner
- : std::unary_function<T, std::size_t>
- {
-#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- std::size_t operator()(T const& val) const
- {
- return hash_value(val);
- }
-#else
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
-#endif
- };
- };
-
-#else // Visual C++ 6.5
-
- // There's probably a more elegant way to Visual C++ 6.5 to work
- // but I don't know what it is.
-
- template <bool IsConst>
- struct hash_impl_msvc
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T const>::call(val);
- }
-
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <>
- struct hash_impl_msvc<true>
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <class T>
- struct hash_impl_msvc2
- : public hash_impl_msvc<boost::is_const<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T> {};
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner : public hash_impl_msvc2<T> {};
- };
-
-#endif // Visual C++ 6.5
- }
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-}
-
-#endif
Modified: trunk/boost/functional/hash/hash.hpp
==============================================================================
--- trunk/boost/functional/hash/hash.hpp (original)
+++ trunk/boost/functional/hash/hash.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2007. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
@@ -10,10 +10,6 @@
#if !defined(BOOST_FUNCTIONAL_HASH_HASH_HPP)
#define BOOST_FUNCTIONAL_HASH_HASH_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
#include <boost/functional/hash_fwd.hpp>
#include <functional>
#include <boost/functional/detail/hash_float.hpp>
@@ -32,24 +28,29 @@
#include <boost/type_traits/is_const.hpp>
#endif
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4267)
+#endif
+
namespace boost
{
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ // Borland complains about an ambiguous function overload
+ // when compiling boost::hash<bool>.
std::size_t hash_value(bool);
- std::size_t hash_value(char);
- std::size_t hash_value(unsigned char);
- std::size_t hash_value(signed char);
- std::size_t hash_value(short);
- std::size_t hash_value(unsigned short);
+#endif
+
std::size_t hash_value(int);
std::size_t hash_value(unsigned int);
std::size_t hash_value(long);
std::size_t hash_value(unsigned long);
-#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
- std::size_t hash_value(wchar_t);
-#endif
-
-#if defined(BOOST_HAS_LONG_LONG)
+#if defined(BOOST_HAS_LONG_LONG) && defined(_M_X64) && defined(_WIN64)
+ // On 64-bit windows std::size_t is a typedef for unsigned long long, which
+ // isn't due to be supported until Boost 1.35. So add support here.
+ // (Technically, Boost.Hash isn't actually documented as supporting
+ // std::size_t. But it would be pretty silly not to).
std::size_t hash_value(long long);
std::size_t hash_value(unsigned long long);
#endif
@@ -92,84 +93,14 @@
template <class K, class T, class C, class A>
std::size_t hash_value(std::multimap<K, T, C, A> const& v);
- template <class T>
- std::size_t hash_value(std::complex<T> const&);
-
// Implementation
- namespace hash_detail
- {
- template <class T>
- inline std::size_t hash_value_signed(T val)
- {
- const int size_t_bits = std::numeric_limits<std::size_t>::digits;
- // ceiling(std::numeric_limits<T>::digits / size_t_bits) - 1
- const int length = (std::numeric_limits<T>::digits - 1)
- / size_t_bits;
-
- std::size_t seed = 0;
- T positive = val < 0 ? -1 - val : val;
-
- // Hopefully, this loop can be unrolled.
- for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits)
- {
- seed ^= (std::size_t) (positive >> i) + (seed<<6) + (seed>>2);
- }
- seed ^= (std::size_t) val + (seed<<6) + (seed>>2);
-
- return seed;
- }
-
- template <class T>
- inline std::size_t hash_value_unsigned(T val)
- {
- const int size_t_bits = std::numeric_limits<std::size_t>::digits;
- // ceiling(std::numeric_limits<T>::digits / size_t_bits) - 1
- const int length = (std::numeric_limits<T>::digits - 1)
- / size_t_bits;
-
- std::size_t seed = 0;
-
- // Hopefully, this loop can be unrolled.
- for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits)
- {
- seed ^= (std::size_t) (val >> i) + (seed<<6) + (seed>>2);
- }
- seed ^= (std::size_t) val + (seed<<6) + (seed>>2);
-
- return seed;
- }
- }
-
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
inline std::size_t hash_value(bool v)
{
return static_cast<std::size_t>(v);
}
-
- inline std::size_t hash_value(char v)
- {
- return static_cast<std::size_t>(v);
- }
-
- inline std::size_t hash_value(unsigned char v)
- {
- return static_cast<std::size_t>(v);
- }
-
- inline std::size_t hash_value(signed char v)
- {
- return static_cast<std::size_t>(v);
- }
-
- inline std::size_t hash_value(short v)
- {
- return static_cast<std::size_t>(v);
- }
-
- inline std::size_t hash_value(unsigned short v)
- {
- return static_cast<std::size_t>(v);
- }
+#endif
inline std::size_t hash_value(int v)
{
@@ -191,22 +122,15 @@
return static_cast<std::size_t>(v);
}
-#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
- inline std::size_t hash_value(wchar_t v)
- {
- return static_cast<std::size_t>(v);
- }
-#endif
-
-#if defined(BOOST_HAS_LONG_LONG)
+#if defined(BOOST_HAS_LONG_LONG) && defined(_M_X64) && defined(_WIN64)
inline std::size_t hash_value(long long v)
{
- return hash_detail::hash_value_signed(v);
+ return v;
}
inline std::size_t hash_value(unsigned long long v)
{
- return hash_detail::hash_value_unsigned(v);
+ return v;
}
#endif
@@ -368,15 +292,6 @@
return hash_range(v.begin(), v.end());
}
- template <class T>
- std::size_t hash_value(std::complex<T> const& v)
- {
- boost::hash<T> hasher;
- std::size_t seed = hasher(v.imag());
- seed ^= hasher(v.real()) + (seed<<6) + (seed>>2);
- return seed;
- }
-
//
// boost::hash
//
@@ -507,3 +422,181 @@
}
#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
+
+////////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_HASH_NO_EXTENSIONS) \
+ && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
+#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
+
+namespace boost
+{
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ namespace hash_detail
+ {
+ template <bool IsArray>
+ struct call_hash_impl
+ {
+ template <class T>
+ struct inner
+ {
+ static std::size_t call(T const& v)
+ {
+ using namespace boost;
+ return hash_value(v);
+ }
+ };
+ };
+
+ template <>
+ struct call_hash_impl<true>
+ {
+ template <class Array>
+ struct inner
+ {
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ static std::size_t call(Array const& v)
+#else
+ static std::size_t call(Array& v)
+#endif
+ {
+ const int size = sizeof(v) / sizeof(*v);
+ return boost::hash_range(v, v + size);
+ }
+ };
+ };
+
+ template <class T>
+ struct call_hash
+ : public call_hash_impl<boost::is_array<T>::value>
+ ::BOOST_NESTED_TEMPLATE inner<T>
+ {
+ };
+ }
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ template <class T> struct hash
+ : std::unary_function<T, std::size_t>
+ {
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ std::size_t operator()(T const& val) const
+ {
+ return hash_value(val);
+ }
+#else
+ std::size_t operator()(T const& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+#endif
+ };
+
+#if BOOST_WORKAROUND(__DMC__, <= 0x848)
+ template <class T, unsigned int n> struct hash<T[n]>
+ : std::unary_function<T[n], std::size_t>
+ {
+ std::size_t operator()(const T* val) const
+ {
+ return boost::hash_range(val, val+n);
+ }
+ };
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // On compilers without partial specialization, boost::hash<T>
+ // has already been declared to deal with pointers, so just
+ // need to supply the non-pointer version.
+
+ namespace hash_detail
+ {
+ template <bool IsPointer>
+ struct hash_impl;
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+ template <>
+ struct hash_impl<false>
+ {
+ template <class T>
+ struct inner
+ : std::unary_function<T, std::size_t>
+ {
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ std::size_t operator()(T const& val) const
+ {
+ return hash_value(val);
+ }
+#else
+ std::size_t operator()(T const& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+#endif
+ };
+ };
+
+#else // Visual C++ 6.5
+
+ // There's probably a more elegant way to Visual C++ 6.5 to work
+ // but I don't know what it is.
+
+ template <bool IsConst>
+ struct hash_impl_msvc
+ {
+ template <class T>
+ struct inner
+ : public std::unary_function<T, std::size_t>
+ {
+ std::size_t operator()(T const& val) const
+ {
+ return hash_detail::call_hash<T const>::call(val);
+ }
+
+ std::size_t operator()(T& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+ };
+ };
+
+ template <>
+ struct hash_impl_msvc<true>
+ {
+ template <class T>
+ struct inner
+ : public std::unary_function<T, std::size_t>
+ {
+ std::size_t operator()(T& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+ };
+ };
+
+ template <class T>
+ struct hash_impl_msvc2
+ : public hash_impl_msvc<boost::is_const<T>::value>
+ ::BOOST_NESTED_TEMPLATE inner<T> {};
+
+ template <>
+ struct hash_impl<false>
+ {
+ template <class T>
+ struct inner : public hash_impl_msvc2<T> {};
+ };
+
+#endif // Visual C++ 6.5
+ }
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
+
Modified: trunk/boost/functional/hash/list.hpp
==============================================================================
--- trunk/boost/functional/hash/list.hpp (original)
+++ trunk/boost/functional/hash/list.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2006 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Modified: trunk/boost/functional/hash/map.hpp
==============================================================================
--- trunk/boost/functional/hash/map.hpp (original)
+++ trunk/boost/functional/hash/map.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2006 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Modified: trunk/boost/functional/hash/pair.hpp
==============================================================================
--- trunk/boost/functional/hash/pair.hpp (original)
+++ trunk/boost/functional/hash/pair.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2006 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Modified: trunk/boost/functional/hash/set.hpp
==============================================================================
--- trunk/boost/functional/hash/set.hpp (original)
+++ trunk/boost/functional/hash/set.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2006 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Modified: trunk/boost/functional/hash/vector.hpp
==============================================================================
--- trunk/boost/functional/hash/vector.hpp (original)
+++ trunk/boost/functional/hash/vector.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2006 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Modified: trunk/boost/functional/hash_fwd.hpp
==============================================================================
--- trunk/boost/functional/hash_fwd.hpp (original)
+++ trunk/boost/functional/hash_fwd.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// Based on Peter Dimov's proposal
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
Modified: trunk/libs/functional/hash/doc/Jamfile.v2
==============================================================================
--- trunk/libs/functional/hash/doc/Jamfile.v2 (original)
+++ trunk/libs/functional/hash/doc/Jamfile.v2 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,6 +1,6 @@
-# Copyright 2005 Daniel James.
-# Distributed under the Boost Software License, Version 1.0. (See accompanying
+# Copyright Daniel James 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)
using quickbook ;
Modified: trunk/libs/functional/hash/doc/changes.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/changes.qbk (original)
+++ trunk/libs/functional/hash/doc/changes.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,5 +1,5 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
Modified: trunk/libs/functional/hash/doc/disable.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/disable.qbk (original)
+++ trunk/libs/functional/hash/doc/disable.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,5 +1,5 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
Modified: trunk/libs/functional/hash/doc/hash.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/hash.qbk (original)
+++ trunk/libs/functional/hash/doc/hash.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
[library Boost.Functional/Hash
[quickbook 1.3]
[authors [James, Daniel]]
- [copyright 2005 2007 Daniel James]
+ [copyright 2005 2006 Daniel James]
[purpose A TR1 hash function object that can be extended to hash user
defined types]
[category higher-order]
@@ -10,7 +10,7 @@
[license
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])
+ [@http://www.boost.org/LICENSE_1_0.txt]
]
]
Modified: trunk/libs/functional/hash/doc/intro.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/intro.qbk (original)
+++ trunk/libs/functional/hash/doc/intro.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,5 +1,5 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
Modified: trunk/libs/functional/hash/doc/links.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/links.qbk (original)
+++ trunk/libs/functional/hash/doc/links.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,5 +1,5 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
Modified: trunk/libs/functional/hash/doc/portability.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/portability.qbk (original)
+++ trunk/libs/functional/hash/doc/portability.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,5 +1,5 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
Modified: trunk/libs/functional/hash/doc/ref.xml
==============================================================================
--- trunk/libs/functional/hash/doc/ref.xml (original)
+++ trunk/libs/functional/hash/doc/ref.xml 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,6 +1,5 @@
-
<!--
-Copyright Daniel James 2005-2007
+Copyright 2005-2006 Daniel James.
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)
-->
@@ -264,42 +263,6 @@
<struct-specialization name="hash">
<template></template>
<specialization>
- <template-arg>long long</template-arg>
- </specialization>
- <method name="operator()" cv="const">
- <type>std::size_t</type>
- <parameter name="val">
- <paramtype>long long</paramtype>
- </parameter>
- <returns>
- <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
- <para><functionname>hash_value</functionname>(val) in Boost.</para>
- </returns>
- <throws><para>Doesn't throw</para></throws>
- </method>
- </struct-specialization>
-
- <struct-specialization name="hash">
- <template></template>
- <specialization>
- <template-arg>unsigned long long</template-arg>
- </specialization>
- <method name="operator()" cv="const">
- <type>std::size_t</type>
- <parameter name="val">
- <paramtype>unsigned long long</paramtype>
- </parameter>
- <returns>
- <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
- <para><functionname>hash_value</functionname>(val) in Boost.</para>
- </returns>
- <throws><para>Doesn't throw</para></throws>
- </method>
- </struct-specialization>
-
- <struct-specialization name="hash">
- <template></template>
- <specialization>
<template-arg>float</template-arg>
</specialization>
<method name="operator()" cv="const">
@@ -406,8 +369,6 @@
</method>
</struct-specialization>
- <free-function-group name="Support functions (Boost extension).">
-
<!--
boost::hash_combine
-->
@@ -502,10 +463,6 @@
</para></throws>
</overloaded-function>
- </free-function-group>
-
- <free-function-group name="Overloadable hash implementation (Boost extension).">
-
<!--
boost::hash_value - integers
-->
@@ -517,36 +474,6 @@
<signature>
<type>std::size_t</type>
- <parameter name="val"><paramtype>bool</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>char</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>signed char</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>unsigned char</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>short</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>unsigned short</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
<parameter name="val"><paramtype>int</paramtype></parameter>
</signature>
@@ -567,16 +494,6 @@
<signature>
<type>std::size_t</type>
- <parameter name="val"><paramtype>long long</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>unsigned long long</paramtype></parameter>
- </signature>
-
- <signature>
- <type>std::size_t</type>
<parameter name="val"><paramtype>float</paramtype></parameter>
</signature>
@@ -703,14 +620,6 @@
<parameter name="val"><paramtype>std::multimap<K, T, C, A> const&</paramtype></parameter>
</signature>
- <signature>
- <template>
- <template-type-parameter name="T"/>
- </template>
- <type>std::size_t</type>
- <parameter name="val"><paramtype>std::complex<T> const&</paramtype></parameter>
- </signature>
-
<description><para>
Generally shouldn't be called directly by users, instead they should use
<classname>boost::hash</classname>, <functionname>boost::hash_range</functionname>
@@ -745,10 +654,6 @@
<entry><code>val</code></entry>
</row>
<row>
- <entry><code>long long</code>, <code>unsigned long long</code></entry>
- <entry><code>val</code> when <code>abs(val) <= std::numeric_limits<std::size_t>::max()</code>.</entry>
- </row>
- <row>
<entry><code>float</code>, <code>double</code>, <code>long double</code></entry>
<entry>An unspecified value, except that equal arguments shall yield the same result.</entry>
</row>
@@ -783,19 +688,11 @@
<functionname>hash_combine</functionname>(seed, val.second);
return seed;</programlisting></entry>
</row>
- <row>
- <entry>
- <code>std::complex<val[N]></code>
- </entry>
- <entry>For built in types when <code>val.imag() == 0</code>, <code>hash_value(val.real())</code></entry>
- </row>
</tbody>
</tgroup>
</informaltable>
</returns>
</overloaded-function>
-
- </free-function-group>
</namespace>
</header>
</library-reference>
Modified: trunk/libs/functional/hash/doc/thanks.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/thanks.qbk (original)
+++ trunk/libs/functional/hash/doc/thanks.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,19 +1,20 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
[section:acknowledgements Acknowledgements]
-This library is based on the design by Peter Dimov. During the initial
-development
-JoaquÃn M López Muñoz made many useful suggestions and contributed fixes.
+This library is based on the design by Peter Dimov's original design.
+
+During the initial development JoaquÃn M López Muñoz made many useful
+suggestions, contributed fixes.
The formal review was managed by Thorsten Ottosen, and the library reviewed by:
David Abrahams, Alberto Barbati, Topher Cooper, Caleb Epstein, Dave Harris,
-Chris Jefferson, Bronek Kozicki, John Maddock, Tobias Swinger, Jaap Suter,
-Rob Stewart and Pavel Vozenilek. Since then, further constructive criticism has
-been made by Daniel Krügler, Alexander Nasonov and æ²æ
§å³°.
+Chris Jefferson, Bronek Kozicki, John Maddock, Tobias Swinger, Jaap Suter, Rob
+Stewart and Pavel Vozenilek. Since then, there have been further contributions
+from Daniel Krügler, Alexander Nasonov, æ²æ
§å³° and John Maddock.
The implementation of the hash function for pointers is based on suggestions
made by Alberto Barbati and Dave Harris. Dave Harris also suggested an
Modified: trunk/libs/functional/hash/doc/tutorial.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/tutorial.qbk (original)
+++ trunk/libs/functional/hash/doc/tutorial.qbk 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,5 +1,5 @@
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2006 Daniel James.
/ 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) ]
@@ -119,7 +119,7 @@
Objects that are equal must generate the same hash value.
When objects are not equal they should generate different hash values.
In this object equality was based just on the id so the hash function
-only hashes the id. If it was based on the object's name and author
+only hash the id. If it was based on the objects name and author
then the hash function should take them into account
(how to do this is discussed in the next section).
]
Modified: trunk/libs/functional/hash/examples/books.cpp
==============================================================================
--- trunk/libs/functional/hash/examples/books.cpp (original)
+++ trunk/libs/functional/hash/examples/books.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./books.hpp"
#include <boost/functional/hash.hpp>
Modified: trunk/libs/functional/hash/examples/books.hpp
==============================================================================
--- trunk/libs/functional/hash/examples/books.hpp (original)
+++ trunk/libs/functional/hash/examples/books.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// This example illustrates how to use boost::hash with a custom hash function.
// The implementation is contained in books.cpp
Modified: trunk/libs/functional/hash/examples/point.cpp
==============================================================================
--- trunk/libs/functional/hash/examples/point.cpp (original)
+++ trunk/libs/functional/hash/examples/point.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005 Daniel James.
-// 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)
+// Copyright Daniel James 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)
#include <boost/functional/hash.hpp>
#include <cassert>
Modified: trunk/libs/functional/hash/examples/portable.cpp
==============================================================================
--- trunk/libs/functional/hash/examples/portable.cpp (original)
+++ trunk/libs/functional/hash/examples/portable.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include <boost/functional/hash.hpp>
#include <cassert>
Modified: trunk/libs/functional/hash/index.html
==============================================================================
--- trunk/libs/functional/hash/index.html (original)
+++ trunk/libs/functional/hash/index.html 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,6 +1,6 @@
<!--
-Copyright 2005-2007 Daniel James.
+Copyright 2005-2006 Daniel James.
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)
-->
Modified: trunk/libs/functional/hash/test/Jamfile.v2
==============================================================================
--- trunk/libs/functional/hash/test/Jamfile.v2 (original)
+++ trunk/libs/functional/hash/test/Jamfile.v2 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,15 +1,13 @@
-# Copyright 2005-2007 Daniel James.
-# 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)
+# Copyright Daniel James 2005-2006. 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)
import testing ;
project hash-tests
: requirements
<toolset>gcc:<define>_GLIBCXX_DEBUG
- "<toolset>gcc:<cxxflags>-Wsign-promo -Wextra"
- <toolset>msvc:<cxxflags>/W4
;
test-suite functional/hash
@@ -32,7 +30,6 @@
[ run hash_deque_test.cpp ]
[ run hash_set_test.cpp ]
[ run hash_map_test.cpp ]
- [ run hash_complex_test.cpp ]
[ run link_test.cpp link_test_2.cpp ]
[ run link_ext_test.cpp link_no_ext_test.cpp ]
[ run container_fwd_test.cpp ]
Modified: trunk/libs/functional/hash/test/compile_time.hpp
==============================================================================
--- trunk/libs/functional/hash/test/compile_time.hpp (original)
+++ trunk/libs/functional/hash/test/compile_time.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include <boost/config.hpp>
#include <boost/static_assert.hpp>
@@ -12,5 +12,5 @@
{
BOOST_STATIC_ASSERT((boost::is_base_and_derived<
std::unary_function<T, std::size_t>, HASH_NAMESPACE::hash<T> >::value));
-}
+};
Modified: trunk/libs/functional/hash/test/config.hpp
==============================================================================
--- trunk/libs/functional/hash/test/config.hpp (original)
+++ trunk/libs/functional/hash/test/config.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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(TEST_STD)
# define TEST_STD_INCLUDES
Modified: trunk/libs/functional/hash/test/container_fwd_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/container_fwd_test.cpp (original)
+++ trunk/libs/functional/hash/test/container_fwd_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include <boost/functional/detail/container_fwd.hpp>
Modified: trunk/libs/functional/hash/test/hash_built_in_array_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_built_in_array_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_built_in_array_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_custom_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_custom_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_custom_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include <boost/config.hpp>
#include <cstddef>
Modified: trunk/libs/functional/hash/test/hash_deque_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_deque_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_deque_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_float_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_float_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_float_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
@@ -18,23 +18,18 @@
#include <iostream>
-#if defined(BOOST_MSVC)
-#pragma warning(push)
-#pragma warning(disable:4127) // conditional expression is constant
-#endif
-
template <class T>
void float_tests(char const* name, T* = 0)
{
std::cerr<<"\n"
<<"Testing " BOOST_STRINGIZE(HASH_NAMESPACE) "::hash<"<<name<<">\n"
<<"\n"
- <<"boost::hash_detail::limits<T>::digits = "
- <<boost::hash_detail::limits<T>::digits<<"\n"
- <<"boost::hash_detail::limits<int>::digits = "
- <<boost::hash_detail::limits<int>::digits<<"\n"
- <<"boost::hash_detail::limits<std::size_t>::digits = "
- <<boost::hash_detail::limits<std::size_t>::digits<<"\n"
+ <<"std::numeric_limits<T>::digits = "
+ <<std::numeric_limits<T>::digits<<"\n"
+ <<"std::numeric_limits<int>::digits = "
+ <<std::numeric_limits<int>::digits<<"\n"
+ <<"std::numeric_limits<std::size_t>::digits = "
+ <<std::numeric_limits<std::size_t>::digits<<"\n"
<<"\n"
;
@@ -55,11 +50,11 @@
#if defined(__BORLANDC__)
std::cerr<<"Not running infinity checks on Borland, as it causes it to crash.\n";
#else
- if(boost::hash_detail::limits<T>::has_infinity) {
+ if(std::numeric_limits<T>::has_infinity) {
T infinity = -log(zero);
T infinity2 = (T) 1. / zero;
T infinity3 = (T) -1. / minus_zero;
- T infinity4 = boost::hash_detail::limits<T>::infinity();
+ T infinity4 = std::numeric_limits<T>::infinity();
T minus_infinity = log(zero);
T minus_infinity2 = (T) -1. / zero;
@@ -71,7 +66,7 @@
if(infinity == infinity2)
BOOST_TEST(x1(infinity) == x1(infinity2));
- if(infinity == infinity3)
+ if(infinity == infinity3);
BOOST_TEST(x1(infinity) == x1(infinity3));
if(infinity == infinity4)
BOOST_TEST(x1(infinity) == x1(infinity4));
@@ -89,26 +84,26 @@
// This should really be 'has_denorm == denorm_present' but some
// compilers don't have 'denorm_present'. See also a later use.
- if(boost::hash_detail::limits<T>::has_denorm) {
- if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(infinity)) {
+ if(std::numeric_limits<T>::has_denorm) {
+ if(x1(std::numeric_limits<T>::denorm_min()) == x1(infinity)) {
std::cerr<<"x1(denorm_min) == x1(infinity) == "<<x1(infinity)<<"\n";
}
- if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(minus_infinity)) {
+ if(x1(std::numeric_limits<T>::denorm_min()) == x1(minus_infinity)) {
std::cerr<<"x1(denorm_min) == x1(-infinity) == "<<x1(minus_infinity)<<"\n";
}
}
- if(boost::hash_detail::limits<T>::has_quiet_NaN) {
- if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(infinity)) {
+ if(std::numeric_limits<T>::has_quiet_NaN) {
+ if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(infinity)) {
std::cerr<<"x1(quiet_NaN) == x1(infinity) == "<<x1(infinity)<<"\n";
}
- if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(minus_infinity)) {
+ if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(minus_infinity)) {
std::cerr<<"x1(quiet_NaN) == x1(-infinity) == "<<x1(minus_infinity)<<"\n";
}
}
}
#endif
- T max = (boost::hash_detail::limits<T>::max)();
+ T max = (std::numeric_limits<T>::max)();
T half_max = max / 2;
T quarter_max = max / 4;
T three_quarter_max = max - quarter_max;
@@ -142,50 +137,50 @@
BOOST_TEST(x1(v2) == HASH_NAMESPACE::hash_value(v2));
#endif
- BOOST_TEST(x1(boost::hash_detail::limits<T>::epsilon()) ==
- HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::epsilon()));
+ BOOST_TEST(x1(std::numeric_limits<T>::epsilon()) ==
+ HASH_NAMESPACE::hash_value(std::numeric_limits<T>::epsilon()));
- BOOST_TEST(boost::hash_detail::limits<T>::epsilon() != (T) 0);
- if(x1(boost::hash_detail::limits<T>::epsilon()) == x1((T) 0))
+ BOOST_TEST(std::numeric_limits<T>::epsilon() != (T) 0);
+ if(x1(std::numeric_limits<T>::epsilon()) == x1((T) 0))
std::cerr<<"x1(epsilon) == x1(0) == "<<x1((T) 0)<<"\n";
- BOOST_TEST(-boost::hash_detail::limits<T>::epsilon() != (T) 0);
- if(x1(-boost::hash_detail::limits<T>::epsilon()) == x1((T) 0))
+ BOOST_TEST(-std::numeric_limits<T>::epsilon() != (T) 0);
+ if(x1(-std::numeric_limits<T>::epsilon()) == x1((T) 0))
std::cerr<<"x1(-epsilon) == x1(0) == "<<x1((T) 0)<<"\n";
- BOOST_TEST((T) 1 + boost::hash_detail::limits<T>::epsilon() != (T) 1);
- if(x1((T) 1 + boost::hash_detail::limits<T>::epsilon()) == x1((T) 1))
+ BOOST_TEST((T) 1 + std::numeric_limits<T>::epsilon() != (T) 1);
+ if(x1((T) 1 + std::numeric_limits<T>::epsilon()) == x1((T) 1))
std::cerr<<"x1(1 + epsilon) == x1(1) == "<<x1((T) 1)<<"\n";
- BOOST_TEST((T) 1 - boost::hash_detail::limits<T>::epsilon() != (T) 1);
- if(x1((T) 1 - boost::hash_detail::limits<T>::epsilon()) == x1((T) 1))
+ BOOST_TEST((T) 1 - std::numeric_limits<T>::epsilon() != (T) 1);
+ if(x1((T) 1 - std::numeric_limits<T>::epsilon()) == x1((T) 1))
std::cerr<<"x1(1 - epsilon) == x1(1) == "<<x1((T) 1)<<"\n";
- BOOST_TEST((T) -1 + boost::hash_detail::limits<T>::epsilon() != (T) -1);
- if(x1((T) -1 + boost::hash_detail::limits<T>::epsilon()) == x1((T) -1))
+ BOOST_TEST((T) -1 + std::numeric_limits<T>::epsilon() != (T) -1);
+ if(x1((T) -1 + std::numeric_limits<T>::epsilon()) == x1((T) -1))
std::cerr<<"x1(-1 + epsilon) == x1(-1) == "<<x1((T) -1)<<"\n";
- BOOST_TEST((T) -1 - boost::hash_detail::limits<T>::epsilon() != (T) -1);
- if(x1((T) -1 - boost::hash_detail::limits<T>::epsilon()) == x1((T) -1))
+ BOOST_TEST((T) -1 - std::numeric_limits<T>::epsilon() != (T) -1);
+ if(x1((T) -1 - std::numeric_limits<T>::epsilon()) == x1((T) -1))
std::cerr<<"x1(-1 - epsilon) == x1(-1) == "<<x1((T) -1)<<"\n";
// As before.
- if(boost::hash_detail::limits<T>::has_denorm) {
- if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(zero)) {
+ if(std::numeric_limits<T>::has_denorm) {
+ if(x1(std::numeric_limits<T>::denorm_min()) == x1(zero)) {
std::cerr<<"x1(denorm_min) == x1(zero) == "<<x1(zero)<<"\n";
}
#if !BOOST_WORKAROUND(__DECCXX_VER,<70190006)
// The Tru64/CXX standard library prior to 7.1 contains a bug in the
- // specialization of boost::hash_detail::limits::denorm_min() for long
+ // specialization of std::numeric_limits::denorm_min() for long
// doubles which causes this test to fail.
- if(x1(boost::hash_detail::limits<T>::denorm_min()) !=
- HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::denorm_min()))
+ if(x1(std::numeric_limits<T>::denorm_min()) !=
+ HASH_NAMESPACE::hash_value(std::numeric_limits<T>::denorm_min()))
{
- std::cerr<<"x1(boost::hash_detail::limits<T>::denorm_min()) = "
- << x1(boost::hash_detail::limits<T>::denorm_min())
- << "\nhash_value(boost::hash_detail::limits<T>::denorm_min()) = "
+ std::cerr<<"x1(std::numeric_limits<T>::denorm_min()) = "
+ << x1(std::numeric_limits<T>::denorm_min())
+ << "\nhash_value(std::numeric_limits<T>::denorm_min()) = "
<< HASH_NAMESPACE::hash_value(
- boost::hash_detail::limits<T>::denorm_min())
+ std::numeric_limits<T>::denorm_min())
<< "\nx1(0) = "<<x1(0)<<"\n";
}
#endif
@@ -193,12 +188,12 @@
// NaN also causes borland to crash.
#if !defined(__BORLANDC__)
- if(boost::hash_detail::limits<T>::has_quiet_NaN) {
- if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(1.0)) {
+ if(std::numeric_limits<T>::has_quiet_NaN) {
+ if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(1.0)) {
std::cerr<<"x1(quiet_NaN) == x1(1.0) == "<<x1(1.0)<<"\n";
}
- BOOST_TEST(x1(boost::hash_detail::limits<T>::quiet_NaN()) ==
- HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::quiet_NaN()));
+ BOOST_TEST(x1(std::numeric_limits<T>::quiet_NaN()) ==
+ HASH_NAMESPACE::hash_value(std::numeric_limits<T>::quiet_NaN()));
}
#endif
}
@@ -231,6 +226,3 @@
return boost::report_errors();
}
-#if defined(BOOST_MSVC)
-#pragma warning(pop)
-#endif
Modified: trunk/libs/functional/hash/test/hash_friend_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_friend_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_friend_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
#include <boost/config.hpp>
#include <cstddef>
Modified: trunk/libs/functional/hash/test/hash_function_pointer_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_function_pointer_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_function_pointer_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_fwd_test.hpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_fwd_test.hpp (original)
+++ trunk/libs/functional/hash/test/hash_fwd_test.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_fwd_test_1.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_fwd_test_1.cpp (original)
+++ trunk/libs/functional/hash/test/hash_fwd_test_1.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
// This checks that template code implemented using hash_fwd will work.
Modified: trunk/libs/functional/hash/test/hash_fwd_test_2.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_fwd_test_2.cpp (original)
+++ trunk/libs/functional/hash/test/hash_fwd_test_2.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
// This test just makes sure a header which uses hash_fwd can compile without
// the main hash headers.
Modified: trunk/libs/functional/hash/test/hash_global_namespace_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_global_namespace_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_global_namespace_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
// This test demonstrates an ADL bug in Borland 5.5 where ADL isn't performed
// in the global namespace.
@@ -44,7 +44,7 @@
# ifdef TEST_STD_INCLUDES
# include <functional>
# else
-# include <boost/functional/hash.hpp>
+# include <boost/functional/hash/hash.hpp>
# endif
#endif
Modified: trunk/libs/functional/hash/test/hash_list_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_list_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_list_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_map_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_map_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_map_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_map_test.hpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_map_test.hpp (original)
+++ trunk/libs/functional/hash/test/hash_map_test.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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(CONTAINER_TYPE)
#error "CONTAINER_TYPE not defined"
@@ -9,11 +9,6 @@
#include <boost/preprocessor/cat.hpp>
-#if defined(BOOST_MSVC)
-#pragma warning(push)
-#pragma warning(disable:4245) // signed/unsigned mismatch
-#endif
-
namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests)
{
template <class T>
@@ -65,9 +60,5 @@
}
}
-#if defined(BOOST_MSVC)
-#pragma warning(pop)
-#endif
-
#undef CONTAINER_TYPE
#endif
Modified: trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
#define HASH_NAMESPACE boost
Modified: trunk/libs/functional/hash/test/hash_no_ext_macro_1.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_no_ext_macro_1.cpp (original)
+++ trunk/libs/functional/hash/test/hash_no_ext_macro_1.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
#define HASH_NAMESPACE boost
#include <boost/functional/hash.hpp>
Modified: trunk/libs/functional/hash/test/hash_no_ext_macro_2.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_no_ext_macro_2.cpp (original)
+++ trunk/libs/functional/hash/test/hash_no_ext_macro_2.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
#define HASH_NAMESPACE boost
#define BOOST_HASH_NO_EXTENSIONS
Modified: trunk/libs/functional/hash/test/hash_number_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_number_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_number_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
@@ -21,24 +21,17 @@
#include "./compile_time.hpp"
-#if defined(BOOST_MSVC)
-#pragma warning(push)
-#pragma warning(disable:4127) // conditional expression is constant
-#pragma warning(disable:4309) // truncation of constant value
-#pragma warning(disable:4310) // cast truncates constant value
-#endif
-
template <class T>
void numeric_test(T*)
{
- typedef boost::hash_detail::limits<T> limits;
+ typedef std::numeric_limits<T> limits;
compile_time_tests((T*) 0);
HASH_NAMESPACE::hash<T> x1;
HASH_NAMESPACE::hash<T> x2;
- T v1 = (T) -5;
+ T v1 = -5;
BOOST_TEST(x1(v1) == x2(v1));
BOOST_TEST(x1(T(-5)) == x2(T(-5)));
BOOST_TEST(x1(T(0)) == x2(T(0)));
@@ -55,8 +48,7 @@
if (limits::is_integer)
{
- BOOST_TEST(HASH_NAMESPACE::hash_value(T((std::size_t)-5))
- == (std::size_t)T(-5));
+ BOOST_TEST(HASH_NAMESPACE::hash_value(T(-5)) == (std::size_t)T(-5));
BOOST_TEST(HASH_NAMESPACE::hash_value(T(0)) == (std::size_t)T(0u));
BOOST_TEST(HASH_NAMESPACE::hash_value(T(10)) == (std::size_t)T(10u));
BOOST_TEST(HASH_NAMESPACE::hash_value(T(25)) == (std::size_t)T(25u));
@@ -67,7 +59,7 @@
template <class T>
void limits_test(T*)
{
- typedef boost::hash_detail::limits<T> limits;
+ typedef std::numeric_limits<T> limits;
if(limits::is_specialized)
{
@@ -98,7 +90,7 @@
template <class T>
void poor_quality_tests(T*)
{
- typedef boost::hash_detail::limits<T> limits;
+ typedef std::numeric_limits<T> limits;
HASH_NAMESPACE::hash<T> x1;
HASH_NAMESPACE::hash<T> x2;
@@ -113,29 +105,16 @@
BOOST_TEST(x1((limits::max)()) != x2((limits::max)() - 1));
}
-void bool_test()
-{
- HASH_NAMESPACE::hash<bool> x1;
- HASH_NAMESPACE::hash<bool> x2;
-
- BOOST_TEST(x1(true) == x2(true));
- BOOST_TEST(x1(false) == x2(false));
- BOOST_TEST(x1(true) != x2(false));
- BOOST_TEST(x1(false) != x2(true));
-}
#define NUMERIC_TEST(type, name) \
std::cerr<<"Testing: " BOOST_STRINGIZE(name) "\n"; \
numeric_test((type*) 0); \
limits_test((type*) 0); \
poor_quality_tests((type*) 0);
-#define NUMERIC_TEST_NO_LIMITS(type, name) \
- std::cerr<<"Testing: " BOOST_STRINGIZE(name) "\n"; \
- numeric_test((type*) 0); \
- poor_quality_tests((type*) 0);
int main()
{
+ NUMERIC_TEST(bool, bool)
NUMERIC_TEST(char, char)
NUMERIC_TEST(signed char, schar)
NUMERIC_TEST(unsigned char, uchar)
@@ -149,20 +128,11 @@
NUMERIC_TEST(long, hash_long)
NUMERIC_TEST(unsigned long, ulong)
-#if defined(BOOST_HAS_LONG_LONG)
- NUMERIC_TEST_NO_LIMITS(long long, hash_longlong)
- NUMERIC_TEST_NO_LIMITS(unsigned long long, ulonglong)
-#endif
-
NUMERIC_TEST(float, float)
NUMERIC_TEST(double, double)
NUMERIC_TEST(long double, ldouble)
- bool_test();
-
return boost::report_errors();
}
-#if defined(BOOST_MSVC)
-#pragma warning(pop)
-#endif
+
Modified: trunk/libs/functional/hash/test/hash_pointer_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_pointer_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_pointer_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_range_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_range_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_range_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_sequence_test.hpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_sequence_test.hpp (original)
+++ trunk/libs/functional/hash/test/hash_sequence_test.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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(CONTAINER_TYPE)
#error "CONTAINER_TYPE not defined"
@@ -9,11 +9,6 @@
#include <boost/preprocessor/cat.hpp>
-#if defined(BOOST_MSVC)
-#pragma warning(push)
-#pragma warning(disable:4245) // signed/unsigned mismatch
-#endif
-
namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests)
{
template <class T>
@@ -68,9 +63,5 @@
}
}
-#if defined(BOOST_MSVC)
-#pragma warning(pop)
-#endif
-
#undef CONTAINER_TYPE
#endif
Modified: trunk/libs/functional/hash/test/hash_set_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_set_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_set_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_set_test.hpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_set_test.hpp (original)
+++ trunk/libs/functional/hash/test/hash_set_test.hpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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(CONTAINER_TYPE)
#error "CONTAINER_TYPE not defined"
@@ -9,17 +9,12 @@
#include <boost/preprocessor/cat.hpp>
-#if defined(BOOST_MSVC)
-#pragma warning(push)
-#pragma warning(disable:4245) // signed/unsigned mismatch
-#endif
-
namespace BOOST_PP_CAT(CONTAINER_TYPE, _tests)
{
template <class T>
void integer_tests(T* = 0)
{
- const int number_of_containers = 12;
+ const int number_of_containers = 11;
T containers[number_of_containers];
for(int i = 0; i < 5; ++i) {
@@ -35,11 +30,6 @@
containers[9].insert(-1);
containers[10].insert(-1);
containers[10].insert(1);
- containers[11].insert(1);
- containers[11].insert(2);
- containers[11].insert(3);
- containers[11].insert(4);
- containers[11].insert(5);
HASH_NAMESPACE::hash<T> hasher;
@@ -71,9 +61,5 @@
}
}
-#if defined(BOOST_MSVC)
-#pragma warning(pop)
-#endif
-
#undef CONTAINER_TYPE
#endif
Modified: trunk/libs/functional/hash/test/hash_string_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_string_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_string_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/hash_value_array_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_value_array_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_value_array_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
// On some compilers hash_value isn't available for arrays, so I test it
// separately from the main array tests.
Modified: trunk/libs/functional/hash/test/hash_vector_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_vector_test.cpp (original)
+++ trunk/libs/functional/hash/test/hash_vector_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include "./config.hpp"
Modified: trunk/libs/functional/hash/test/link_ext_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/link_ext_test.cpp (original)
+++ trunk/libs/functional/hash/test/link_ext_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2006-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2006. 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)
#define HASH_NAMESPACE boost
#include <boost/functional/hash.hpp>
@@ -17,7 +17,6 @@
std::vector<std::size_t> x;
x.push_back(*x1);
HASH_NAMESPACE::hash<std::vector<std::size_t> > vector_hasher;
- BOOST_TEST(vector_hasher(x) == HASH_NAMESPACE::hash_value(x));
- return boost::report_errors();
+ return vector_hasher(x) != HASH_NAMESPACE::hash_value(x);
}
Modified: trunk/libs/functional/hash/test/link_no_ext_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/link_no_ext_test.cpp (original)
+++ trunk/libs/functional/hash/test/link_no_ext_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#define HASH_NAMESPACE boost
#define BOOST_HASH_NO_EXTENSIONS
Modified: trunk/libs/functional/hash/test/link_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/link_test.cpp (original)
+++ trunk/libs/functional/hash/test/link_test.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include <boost/functional/hash.hpp>
Modified: trunk/libs/functional/hash/test/link_test_2.cpp
==============================================================================
--- trunk/libs/functional/hash/test/link_test_2.cpp (original)
+++ trunk/libs/functional/hash/test/link_test_2.cpp 2007-08-23 20:42:19 EDT (Thu, 23 Aug 2007)
@@ -1,7 +1,7 @@
-// Copyright 2005-2007 Daniel James.
-// 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)
+// Copyright Daniel James 2005-2006. 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)
#include <boost/functional/hash.hpp>
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