Compare commits

...

123 Commits

Author SHA1 Message Date
Troy D. Straszheim
bef51c68a6 merge of cmake build files from trunk per beman
[SVN r50756]
2009-01-24 18:57:20 +00:00
Daniel James
f01dd8b31a Rename parameter to avoid Visual C++ warning about clash with boost::array.
Merged revisions 50514 via svnmerge from 
https://svn.boost.org/svn/boost/trunk

........
  r50514 | danieljames | 2009-01-08 13:37:33 +0000 (Thu, 08 Jan 2009) | 3 lines
  
  Rename parameter to avoid Visual C++ warning about clash with boost::array.
  
  Fixes #2643
........


[SVN r50528]
2009-01-09 23:12:14 +00:00
Daniel James
2de255bab8 Merged revisions 49661-49662,49666,49669,49735,49756,49770,49811 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r49661 | danieljames | 2008-11-09 12:03:45 +0000 (Sun, 09 Nov 2008) | 1 line
  
  Move hash detail headers out of boost/functional/detail.
........
  r49662 | danieljames | 2008-11-09 12:11:50 +0000 (Sun, 09 Nov 2008) | 1 line
  
  Add a forwarding header for container_fwd.hpp
........
  r49666 | danieljames | 2008-11-09 19:12:05 +0000 (Sun, 09 Nov 2008) | 1 line
  
  Avoid comparing default initialised iterators in position_iterator.
........
  r49669 | danieljames | 2008-11-09 21:57:38 +0000 (Sun, 09 Nov 2008) | 2 lines
  
  Add link to the header to the synopsis in reference documentation.
  Refs #2214
........
  r49735 | danieljames | 2008-11-14 12:51:00 +0000 (Fri, 14 Nov 2008) | 1 line
  
  Explicitly specify the template parameters in the unordered container friend, in order to avoid some warnings.
........
  r49756 | danieljames | 2008-11-14 16:11:16 +0000 (Fri, 14 Nov 2008) | 1 line
  
  Use pragmas to suppress a Visual C++ warning.
........
  r49770 | danieljames | 2008-11-15 13:07:29 +0000 (Sat, 15 Nov 2008) | 1 line
  
  Use the new swap library.
........
  r49811 | danieljames | 2008-11-16 23:10:00 +0000 (Sun, 16 Nov 2008) | 1 line
  
  Fix a typo.
........


[SVN r49855]
2008-11-20 22:53:20 +00:00
Daniel James
6ae2b9da78 Add a forwarding header for container_fwd.hpp
[SVN r49662]
2008-11-09 12:11:50 +00:00
Daniel James
058c541da1 Move hash detail headers out of boost/functional/detail.
[SVN r49661]
2008-11-09 12:03:45 +00:00
Michael A. Jackson
bf23bd7ed3 Updating CMake files to latest trunk. Added dependency information for regression tests and a few new macros for internal use.
[SVN r49627]
2008-11-07 17:02:56 +00:00
Daniel James
b6a089242c Merge error messages for old hash headers.
Merged revisions 49339-49341,49541 via svnmerge from 
https://svn.boost.org/svn/boost/trunk

........
  r49339 | danieljames | 2008-10-15 11:25:07 +0100 (Wed, 15 Oct 2008) | 1 line
  
  Note about change in boost 1.37.
........
  r49340 | danieljames | 2008-10-15 11:26:55 +0100 (Wed, 15 Oct 2008) | 4 lines
  
  Changed the warnings in the deprecated headers from 1.34.0 to errors. These
  will be removed in a future version of Boost (probably 1.39.0).
........
  r49341 | danieljames | 2008-10-15 11:34:15 +0100 (Wed, 15 Oct 2008) | 2 lines
  
  Add note about changes to deprecated headers. Refs #2412.
........
  r49541 | danieljames | 2008-11-02 22:32:00 +0000 (Sun, 02 Nov 2008) | 3 lines
  
  Slightly more accurated comment - now that the headers cause errors, they've
  moved past the deprecation stage (I think).
........


[SVN r49597]
2008-11-05 13:30:43 +00:00
Daniel James
d9fd6a499d Slightly more accurated comment - now that the headers cause errors, they've
moved past the deprecation stage (I think).


[SVN r49541]
2008-11-02 22:32:00 +00:00
Michael A. Jackson
cec8e80658 Continuing merge of CMake build system files into trunk with the encouragement of Doug Gregor
[SVN r49510]
2008-11-01 13:15:41 +00:00
Daniel James
3e24330335 Add note about changes to deprecated headers. Refs #2412.
[SVN r49341]
2008-10-15 10:34:15 +00:00
Daniel James
3f1cbcd762 Changed the warnings in the deprecated headers from 1.34.0 to errors. These
will be removed in a future version of Boost (probably 1.39.0).



[SVN r49340]
2008-10-15 10:26:55 +00:00
Daniel James
59f9787c11 Note about change in boost 1.37.
[SVN r49339]
2008-10-15 10:25:07 +00:00
Daniel James
8daec229d2 Revert [49229], it fixes the same problem as [48674].
[SVN r49338]
2008-10-15 09:44:41 +00:00
John Maddock
838100c8fd Merge fixes from Trunk.
Fixes #2392.

Change includes of <cmath> to <boost/config/no_tr1/config.hpp>.

Previously if Boost.TR1 was in the include path then including <cmath> pulls in all the new TR1 math functions, which in turn also requires linking to an external library. With auto-linking support this requires that library to have been built and be present in the library search path, even if the actual library under use is header only. 

[SVN r49314]
2008-10-13 09:00:03 +00:00
John Maddock
dd0632c991 Change includes of <cmath> to <boost/config/no_tr1/config.hpp>.
Previously if Boost.TR1 was in the include path then including <cmath> pulls in all the new TR1 math functions, which in turn also requires linking to an external library.  With auto-linking support this requires that library to have been built and be present in the library search path, even if the actual library under use is header only.

Fixes #2392.


[SVN r49254]
2008-10-10 16:10:00 +00:00
Nicola Musatti
707186737c Small CodeGear specific patch
[SVN r49229]
2008-10-09 22:11:20 +00:00
Daniel James
55663ad285 Always use c99 float function overloads when using Dinkumware with Visual C++,
as it doesn't always have the C++ overloads. Fixes #2264.

Merged revisions 48529,48674 via svnmerge from 
https://svn.boost.org/svn/boost/trunk

........
  r48529 | danieljames | 2008-09-02 11:31:26 +0100 (Tue, 02 Sep 2008) | 1 line
  
  Always use c99 float function overloads on Dinkumware, as it doesn't always
  have the C++ overloads. Refs #2264.
........
  r48674 | danieljames | 2008-09-08 22:06:16 +0100 (Mon, 08 Sep 2008) | 7 lines
  
  Reinstate the old choice of float functions on Dinkumware for all compilers
  other than Visual C++.
  
  It turns out that Borland uses Dinkumware but doesn't have the C99 float
  overloads, so it only seems realistic to assume their existence on Visual C++.
  Refs #2264.
........


[SVN r48739]
2008-09-11 18:28:51 +00:00
Daniel James
b9917c8810 Reinstate the old choice of float functions on Dinkumware for all compilers
other than Visual C++.

It turns out that Borland uses Dinkumware but doesn't have the C99 float
overloads, so it only seems realistic to assume their existence on Visual C++.
Refs #2264.


[SVN r48674]
2008-09-08 21:06:16 +00:00
Daniel James
cc8672de3e Always use c99 float function overloads on Dinkumware, as it doesn't always have the C++ overloads. Refs #2264.
[SVN r48529]
2008-09-02 10:31:26 +00:00
Daniel James
e810954b62 Revert conversion from lightweight test to Boost.Test.
Merged revisions 47545 via svnmerge from 
https://svn.boost.org/svn/boost/trunk

........
  r47545 | danieljames | 2008-07-18 13:31:18 +0100 (Fri, 18 Jul 2008) | 1 line
  
  Revert conversion from lightweight test to Boost.Test.
........


[SVN r47586]
2008-07-19 09:02:10 +00:00
Daniel James
4bb4957dc4 Revert conversion from lightweight test to Boost.Test.
[SVN r47545]
2008-07-18 12:31:18 +00:00
Daniel James
b3e82db752 Merge all hash changes from trunk.
[SVN r46343]
2008-06-12 00:27:13 +00:00
Daniel James
62226713a2 Merge some small documentation fixes from the doc branch, and mark some
previously merged changes as merged.

Merged revisions 44811,45129,45142,45154,45281-45282,45365 via svnmerge from 
https://svn.boost.org/svn/boost/branches/doc

........
  r45129 | danieljames | 2008-05-05 12:36:50 +0100 (Mon, 05 May 2008) | 2 lines
  
  Update navbar links in boostbook.
........
  r45282 | danieljames | 2008-05-11 14:15:31 +0100 (Sun, 11 May 2008) | 2 lines
  
  Group functions in the hash header - requires Frank's free-function-group fix.
........
  r45365 | danieljames | 2008-05-14 21:39:00 +0100 (Wed, 14 May 2008) | 2 lines
  
  Add boost.root to standalone hash documentation.
........


[SVN r45576]
2008-05-20 15:39:25 +00:00
Daniel James
db3e4eee37 Merge changelog updates.
Merged revisions 45156-45157 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/trunk

........
  r45156 | danieljames | 2008-05-05 21:32:40 +0100 (Mon, 05 May 2008) | 1 line
  
  Update the changelog.
........
  r45157 | danieljames | 2008-05-05 21:32:57 +0100 (Mon, 05 May 2008) | 1 line
  
  Add a changelog for unordered.
........


[SVN r45274]
2008-05-11 12:09:07 +00:00
Daniel James
bd9c0e53d7 Use Boost.Test's minimal test library for unordered & hash. It's closer to
Boster.Test which makes it easier to switch to take advantage of Boost.Test's
extra testing facilities.

Merged revisions 44420 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/trunk

........
  r44420 | danieljames | 2008-04-14 19:02:03 +0100 (Mon, 14 Apr 2008) | 1 line
  
  Use Boost.Test's minimal test library.
........


[SVN r44487]
2008-04-17 07:39:24 +00:00
Daniel James
dd854f794b Add the new allocator constructors, use composition instead of inheritance for the implementation and some small fixes.
Merged revisions 43922,43962,43966,43971,43981,43995-43996,44042,44046-44048,44057 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/trunk

........
  r43922 | danieljames | 2008-03-29 14:55:59 +0000 (Sat, 29 Mar 2008) | 1 line
  
  Fix some typos in the reference documentation.
........
  r43962 | danieljames | 2008-03-31 18:29:59 +0100 (Mon, 31 Mar 2008) | 1 line
  
  Add a name variable to the release script, so that I can have different release names in different branches.
........
  r43966 | danieljames | 2008-03-31 18:43:16 +0100 (Mon, 31 Mar 2008) | 1 line
  
  Fix the image directory for standalone docs.
........
  r43971 | danieljames | 2008-03-31 19:17:25 +0100 (Mon, 31 Mar 2008) | 1 line
  
  Fix the unordered stylesheet.
........
  r43981 | danieljames | 2008-04-01 13:31:26 +0100 (Tue, 01 Apr 2008) | 2 lines
  
  Cast the pointer in the Visual C++ 6.5 _Charalloc method.
........
  r43995 | danieljames | 2008-04-02 12:50:27 +0100 (Wed, 02 Apr 2008) | 1 line
  
  Try using the interprocess containers for testing. Compilation is a bit slower but hopefully I'll run into less cross-platform problems.
........
  r43996 | danieljames | 2008-04-02 13:25:49 +0100 (Wed, 02 Apr 2008) | 1 line
  
  Revert my experiment with the interprocess containers. It didn't work out.
........
  r44042 | danieljames | 2008-04-04 20:38:09 +0100 (Fri, 04 Apr 2008) | 1 line
  
  Make hash table data a member of hash table, instead of a base.
........
  r44046 | danieljames | 2008-04-05 12:38:05 +0100 (Sat, 05 Apr 2008) | 1 line
  
  Remove rvalue_ref from Jamfile.v2 - I didn't mean to check it in.
........
  r44047 | danieljames | 2008-04-05 12:39:38 +0100 (Sat, 05 Apr 2008) | 1 line
  
  New constructors with allocators.
........
  r44048 | danieljames | 2008-04-05 12:58:11 +0100 (Sat, 05 Apr 2008) | 1 line
  
  Document the new constructors.
........
  r44057 | danieljames | 2008-04-05 17:08:23 +0100 (Sat, 05 Apr 2008) | 1 line
  
  Fix some bugs in the exception testing code.
........


[SVN r44417]
2008-04-14 15:10:26 +00:00
Daniel James
b1b9907efd Merged revisions 43838-43894 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk

........
  r43840 | danieljames | 2008-03-24 17:25:07 +0000 (Mon, 24 Mar 2008) | 1 line
  
  Fix a g++ warning.
........
  r43844 | danieljames | 2008-03-24 17:56:28 +0000 (Mon, 24 Mar 2008) | 1 line
  
  It's a new-ish year.
........
  r43885 | danieljames | 2008-03-27 20:36:10 +0000 (Thu, 27 Mar 2008) | 1 line
  
  The release script doesn't need to copy images and css - because that's now done in the jamfiles. Also tweak the shell script a tad bit.
........
  r43890 | danieljames | 2008-03-27 23:01:40 +0000 (Thu, 27 Mar 2008) | 1 line
  
  Starting to add a docbook bibliography.
........
  r43894 | danieljames | 2008-03-27 23:24:18 +0000 (Thu, 27 Mar 2008) | 1 line
  
  Redeclare 'data' in iterator_base to help compilers which have trouble with accessing the nested typedef.
........


[SVN r43895]
2008-03-27 23:38:01 +00:00
Daniel James
55acb6d733 Merge new changes to unordered & hash.
- Unordered tests can run lightweight test or Boost.Test (at least
   theoretically).
 - Workaround Open BSD's incorrect numeric_limits.
 - Move the hash extensions in their own file.
 - Various small improvements to the unordered docs.
 - Fix some unordered examples.

Merged revisions 43117-43837 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/trunk


[SVN r43838]
2008-03-24 17:03:15 +00:00
Daniel James
5b34fead70 Remove 'using quickbook' from my documentation jamfiles. It is no longer necessary, and might be harmful.
[SVN r43732]
2008-03-19 18:27:34 +00:00
Daniel James
1cc54e9d62 Fix a link to Boost.Bimap.
[SVN r43417]
2008-02-26 22:04:55 +00:00
Daniel James
56714cf282 Merged revisions 42882-42941 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk

................
  r42887 | danieljames | 2008-01-20 21:32:04 +0000 (Sun, 20 Jan 2008) | 10 lines
  
  Merged revisions 42590-42664,42667-42697,42699-42723,42725-42855,42857-42881 via svnmerge from 
  https://svn.boost.org/svn/boost/trunk
  
  ........
    r42881 | danieljames | 2008-01-20 17:37:21 +0000 (Sun, 20 Jan 2008) | 1 line
    
    Include <new> to get std::bad_alloc.
  ........
................
  r42892 | danieljames | 2008-01-21 13:03:16 +0000 (Mon, 21 Jan 2008) | 1 line
  
  On some compilers the Rogue Wave/Apache stdcxx library doesn't have the normal std::distance, but instead has a variant that takes the result as the third parameter so it doesn't have to work out the type from the iterator.
................
  r42893 | danieljames | 2008-01-21 13:07:58 +0000 (Mon, 21 Jan 2008) | 1 line
  
  Fix a typo in the last commit.
................
  r42895 | danieljames | 2008-01-21 13:33:29 +0000 (Mon, 21 Jan 2008) | 1 line
  
  Remove tabs from the last checkin.
................
  r42896 | danieljames | 2008-01-21 15:51:40 +0000 (Mon, 21 Jan 2008) | 1 line
  
  Use Boost config to tell when we have a std::distance function. Also, no need for a macro.
................
  r42908 | danieljames | 2008-01-21 21:37:04 +0000 (Mon, 21 Jan 2008) | 1 line
  
  Use boost::long_long_type and boost::ulong_long_type.
................
  r42921 | danieljames | 2008-01-23 11:43:35 +0000 (Wed, 23 Jan 2008) | 1 line
  
  Remove some tabs.
................
  r42922 | danieljames | 2008-01-23 11:46:28 +0000 (Wed, 23 Jan 2008) | 2 lines
  
  Add missing include. Refs #1596
................
  r42923 | danieljames | 2008-01-23 11:52:47 +0000 (Wed, 23 Jan 2008) | 2 lines
  
  Always use void const* for the second parameter of allocate. Refs #1596.
................
  r42936 | danieljames | 2008-01-23 22:22:16 +0000 (Wed, 23 Jan 2008) | 1 line
  
  Use Boost style library name in the documentation.
................
  r42937 | danieljames | 2008-01-23 22:22:32 +0000 (Wed, 23 Jan 2008) | 1 line
  
  More tabs.
................
  r42941 | danieljames | 2008-01-23 23:35:01 +0000 (Wed, 23 Jan 2008) | 1 line
  
  Fix all the allocators.
................


[SVN r42943]
2008-01-23 23:39:59 +00:00
Daniel James
038a21dae6 Add Boost.Unordered to Boost.Hash's intro.
[SVN r42530]
2008-01-06 16:49:11 +00:00
Daniel James
110f23f6aa Add more libraries that use Boost.Hash to its intro.
[SVN r42529]
2008-01-06 16:48:36 +00:00
Daniel James
b2d85ea76b Remove the _fpclass code from floating point hash.
[SVN r42416]
2008-01-02 18:08:43 +00:00
Daniel James
f0f19cd688 Only suppress warning for Visual C++ 8 and later. Refs #1509
[SVN r41866]
2007-12-08 12:24:36 +00:00
Daniel James
210ed051dd Try to suppress a Visual C++ warning. Refs #1509
[SVN r41864]
2007-12-08 11:04:40 +00:00
Daniel James
06b83dbce0 Add some parameters to the standalone hash build.
[SVN r41572]
2007-12-02 09:59:15 +00:00
Daniel James
b0d0ec44ec Don't use fpclass because it causes a warning for long doubles. I don't know if the warning is vaild here - but I don't want to disable it as it's useful for checking other function calls.
[SVN r41057]
2007-11-13 11:51:23 +00:00
Daniel James
035b91bdcd New algorithm for hash floating point numbers.
[SVN r40264]
2007-10-21 08:36:47 +00:00
Daniel James
571d7bfd25 Don't test long double in hash_number_test. This is a bit of a cop out, but it's silly to fail this test just because a platform has poor support for long double - hash_long_double_test is thorough enough.
[SVN r40233]
2007-10-21 00:41:01 +00:00
Daniel James
793b9f5eeb Try to only issue deprecation warnings on compilers that support them.
[SVN r40206]
2007-10-20 10:31:58 +00:00
Daniel James
558f92f421 Fix the deprecated warnings on Borland, should also check before using #warning.
[SVN r40180]
2007-10-19 09:55:10 +00:00
Daniel James
1d34150bb9 Merge some minor changes from the development branch to remove some unnecessary differences.
[SVN r40131]
2007-10-17 17:29:46 +00:00
Daniel James
45d409c405 Remove the free-function-groups from the hash reference documentation, they were causing the functions to be listed on the documentation for every specialization of boost::hash<T>, and the functions to be described on the main synopsis page, instead of their own page.
[SVN r40101]
2007-10-16 23:25:37 +00:00
Daniel James
2e6da0ab6d Sun C++ didn't like the function call, so just try inlining the implementation for now.
[SVN r40036]
2007-10-14 21:52:12 +00:00
Daniel James
74a03d1655 Avoid some warnings when compiling the test with Visual C++.
[SVN r40004]
2007-10-14 07:38:49 +00:00
Daniel James
a93b6e3fea Add a trivial test to see if the deprecated hash headers compile okay when included.
[SVN r39994]
2007-10-13 22:43:13 +00:00
Daniel James
d83e6aef2b Clean up the hash tests a little.
[SVN r39993]
2007-10-13 22:30:50 +00:00
Daniel James
81a2c42496 Use a pragma for warnings in Visual C++.
[SVN r39991]
2007-10-13 21:50:05 +00:00
Daniel James
1df7ab54e3 Use quickbook v1.4 for the hash library.
[SVN r39985]
2007-10-13 18:47:41 +00:00
Daniel James
5194d14c25 Fix the copyright line for the hash library.
[SVN r39984]
2007-10-13 18:47:10 +00:00
Daniel James
cc8d3636e8 Add support for complex numbers to Boost.Hash
[SVN r39983]
2007-10-13 18:34:25 +00:00
Daniel James
423d71ae31 Separate the long double hash tests from the test for other float types. On
some platforms the standard library has poor support for long doubles causing
long doubles to fail when the others pass. So this makes it clearer that the
problem is only for long doubles.


[SVN r39979]
2007-10-13 17:47:57 +00:00
Daniel James
d3719996d2 Remove the pointles separation of the float tests into three functions
(probably a throwback to when I used Boost.Test)


[SVN r39977]
2007-10-13 17:35:48 +00:00
Daniel James
ce6543623e New attempt at fixing the function pointer hash on the Sun compilers.
I think I was barking up the wrong tree - it could be that when calling
hash_value with a function pointer the compiler was choosing the
hash_value(bool) overload over the hash_value(T*) overload, so instead I'm
trying to call the correct one by giving it a template parameter. Another
alternative would be to calculate the hash function inside boost::hash.

Unfortunately, if I'm right, this means that other calls to hash_value will go
wrong for function pointers.


[SVN r39972]
2007-10-13 16:34:09 +00:00
Daniel James
26dc8abf25 Fix my botched attempt at supporting function pointers on Sun's compilers.
Also, now only applies the workaround to function pointers, non-function
pointers are treated as before. I might need to apply the special case to
member function pointers as well.


[SVN r39960]
2007-10-12 11:58:34 +00:00
Daniel James
f637c9e8ce Try to fix function pointer hashing for the sun compiler. A bit of a stab in
the dark.


[SVN r39935]
2007-10-11 17:12:24 +00:00
Daniel James
59f532cc68 Output some info about a test failure when hashing function pointers.
[SVN r39833]
2007-10-09 07:19:30 +00:00
Daniel James
d756415eb3 Include the size of function pointers, void* and std::size_t in the output of the function pointer hash test, to give me a clue why it's failling on a platform.
[SVN r39766]
2007-10-07 18:08:35 +00:00
Daniel James
ee28cdbcd5 On Cygwin use a binary based hash function for floating point numbers, as
Cygwin doesn't have decent floating point functions for long doubles.


[SVN r39694]
2007-10-05 09:46:22 +00:00
Daniel James
3b30bda727 Fix an if statement.
[SVN r39692]
2007-10-05 09:43:01 +00:00
Daniel James
48c2728dd5 Add proper support for long longs and unsigned long longs.
[SVN r39014]
2007-08-27 18:16:54 +00:00
Daniel James
58285d414e Comment out -Wextra because it doesn't work on older versions of gcc.
[SVN r39009]
2007-08-27 17:59:54 +00:00
Daniel James
90c422e846 Remove hash_complex_test - it should have been removed when I reverted to 1.34.1
[SVN r38884]
2007-08-24 02:33:43 +00:00
Daniel James
db8825c7d1 Change a comparison in the float hashing code, which can cause a warning on
gcc. Although the warning doesn't currently turn up in this branch, it could
be caused quite easily. Originally reported in:

http://lists.boost.org/Archives/boost/2007/08/126084.php


[SVN r38883]
2007-08-24 02:01:47 +00:00
Daniel James
9211fcba2e Add some missing hash_value documentation for the new overloads.
[SVN r38882]
2007-08-24 01:56:47 +00:00
Daniel James
f15ea62785 Add extra overloads for hash_value to cover all the specializations of boost::hash. Fixes 1095
[SVN r38881]
2007-08-24 01:44:15 +00:00
Daniel James
bd102b0479 Merge some documentation improvements from the development branch.
[SVN r38878]
2007-08-24 01:16:54 +00:00
Daniel James
2ae3f472c1 Remove the errno check when hashing floating point numbers. It's not really
needed and was causing problems on the Microsoft Windows Smarthone Edition
platform. Fixes #1064.



[SVN r38877]
2007-08-24 01:11:33 +00:00
Daniel James
33643fd6b3 Update the copyright in the hash library.
[SVN r38876]
2007-08-24 01:05:36 +00:00
Daniel James
aa7a824c6d 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.


[SVN r38873]
2007-08-24 00:42:19 +00:00
Daniel James
567290d703 Avoid a comparison with zero warning on gcc when compiling with -Wextra.
[SVN r38679]
2007-08-15 14:35:39 +00:00
Daniel James
59064fed23 Test the hash library with warning level 4 on Visual C++ - although there's
still one warning for hashing long doubles.


[SVN r38647]
2007-08-14 09:53:55 +00:00
nobody
8d271da155 Add -Wsign-promo to the hash test compile flags since I'm now trying to avoid the warning. I still need to check that it won't break older versions of gcc.
[SVN r38565]
2007-08-10 11:22:54 +00:00
nobody
4e59762347 Add some missing 'inline's.
[SVN r38564]
2007-08-10 11:08:19 +00:00
nobody
fbe0c3eeca Add overloads of hash_value for more built in types. They're not strictly
needed and aren't in the original specifiction but they avoid a warning. See
ticket #1095 for details.


[SVN r38563]
2007-08-10 10:32:21 +00:00
Daniel James
0728daf92d Drop the v1 Jamfiles.
[SVN r38512]
2007-08-08 18:26:51 +00:00
Daniel James
d25ca5a376 Put the borland workarounds back - it still seems to need them. Will probably
have to do something else on top of this for any problems this causes.


[SVN r37803]
2007-05-27 09:28:50 +00:00
Daniel James
15d9d535a9 Update the copyright in more hash files.
[SVN r37802]
2007-05-27 09:09:28 +00:00
Daniel James
27d2c57873 Update copyright on hash headers.
[SVN r37801]
2007-05-27 09:07:09 +00:00
Daniel James
4ef5d0d98c Full namespace for std::size_t.
[SVN r37779]
2007-05-25 23:58:33 +00:00
Daniel James
e8970a08f3 Another typo.
[SVN r37569]
2007-05-02 21:44:56 +00:00
Daniel James
891112a42f Fix a typo.
[SVN r37568]
2007-05-02 21:43:51 +00:00
Daniel James
718fda8635 Group the functions in the hash reference to make it a little clearer.
[SVN r37567]
2007-05-02 21:39:13 +00:00
Daniel James
f31d7a7613 Add missing bracket.
[SVN r37541]
2007-04-30 20:28:04 +00:00
Daniel James
586c98cb7e Update the copyright in the hash documentation.
[SVN r37518]
2007-04-27 19:46:53 +00:00
Daniel James
74fc58cd13 Add reference documentation for boost::hash<T*>
[SVN r37517]
2007-04-27 19:44:18 +00:00
Daniel James
e5b0a03e57 Merge in the intel gcc workaround from RC_1_34_0.
[SVN r37428]
2007-04-12 20:37:27 +00:00
Daniel James
7438a90198 Remove an unrequired semi-colon.
[SVN r37427]
2007-04-12 20:34:59 +00:00
Daniel James
555fefae20 Try turning off a borland workaround in the new version of borland, as it
seems to be causing problems in the tests.


[SVN r37426]
2007-04-12 20:33:48 +00:00
Dave Abrahams
87a3e4f6f0 Correct testing bugs:
either changing assert(...) or BOOST_ASSERT(...) to BOOST_TEST
    (in my code only)

    or adding "return boost::report_errors();" where it was clearly
    missing (and a pure bug, in anyone's code).


[SVN r37057]
2007-02-24 22:40:59 +00:00
Daniel James
3ebd297644 Rename hash_detail::float_limits => hash_detail::limits, since it's also used
for integers in the tests.


[SVN r35559]
2006-10-11 18:58:40 +00:00
Daniel James
c2d8b6c92e Use boost::hash_detail::float_limits in hash_number_test. This works around
OpenBSD's inaccurate numeric_limits<long double>.


[SVN r35558]
2006-10-11 18:50:59 +00:00
Daniel James
8aa2b19669 Only use the float.h macros on OpenBSD, it seems that on FreeBSD numeric_limits is actually a better option.
[SVN r35501]
2006-10-05 21:22:56 +00:00
Daniel James
64da418fb2 Fix a typo.
[SVN r35500]
2006-10-05 21:21:43 +00:00
Daniel James
a60b7d12f3 Remove checks for float macros, I was being over-paranoid.
[SVN r35349]
2006-09-26 23:28:34 +00:00
Daniel James
a08d42c10f Attempting to work round the dodgy std::numeric_limits<long double> on
some BSDs.


[SVN r35345]
2006-09-26 20:35:58 +00:00
Daniel James
9430503530 Move the hash extensions into their own header, which hopefully makes the
extension implementation a little clearer. It also fixes a problem where the
visual C++ include once pragma was preventing the extensions from being loaded
on the second include.


[SVN r35314]
2006-09-24 20:00:47 +00:00
Daniel James
59643536dd Fixed the use of a deprecated header in a test.
[SVN r35313]
2006-09-24 19:57:34 +00:00
Daniel James
b165afccaa Add copyright comments to the hash documentation source.
[SVN r35288]
2006-09-23 14:48:19 +00:00
Daniel James
64d717dcf5 Add copyright to the hash redirection page.
[SVN r34549]
2006-07-16 07:13:50 +00:00
Daniel James
311bf0d6c5 The Digital Mars workarounds aren't required for the latest version.
[SVN r34510]
2006-07-12 10:13:45 +00:00
Daniel James
46654045d7 Comment out an assert which is giving bogus failures. On platforms where it isn't possible to detect NaN or infinity the full hash computation is performed on them. For NaN the result doesn't matter (since NaN != NaN), for infinity it should always give the same result), so the calculation works but unfortuanately, I don't know how to correctly check that v is what I expect in the assertion.
I could use a different hash function when I don't have fpclassify/fpclass but that shouldn't be necessary.


[SVN r34490]
2006-07-09 22:50:43 +00:00
Daniel James
572d82713b Update copyright details.
[SVN r34390]
2006-06-25 09:59:05 +00:00
Daniel James
4283c17309 Avoid a warning on Visual C++
[SVN r34329]
2006-06-17 21:22:51 +00:00
Daniel James
d8c636ef9f Tweak the float hashing algorithm to perform fewer calls to ldexp for some
types and possibly generate a better hash value.


[SVN r34273]
2006-06-11 15:29:09 +00:00
Daniel James
82cca89876 Improve support for floating point types with radix != 2.
[SVN r34272]
2006-06-11 14:52:55 +00:00
Daniel James
ba4c0abf5d Add reference for boost::hash_value<std::complex>.
[SVN r34209]
2006-06-06 21:03:03 +00:00
Daniel James
6ee55d99e7 Add a test for hashing complex numbers.
[SVN r34208]
2006-06-06 20:52:28 +00:00
Daniel James
a4b51721db Oops again, I checked in the wrong version of hash.hpp, which had a broken
version of boost::hash_value<complex> in it. So fix that.


[SVN r34207]
2006-06-06 20:51:24 +00:00
Daniel James
cae86235d5 Oops, get the test for long long working.
[SVN r34206]
2006-06-06 20:48:01 +00:00
Daniel James
81af8bc170 Document support for long long.
[SVN r34204]
2006-06-06 20:26:25 +00:00
Daniel James
59adb10b3a Add tests for long long to the numeric hash tests.
[SVN r34203]
2006-06-06 20:14:55 +00:00
Daniel James
3b29b95b8e Add support for long long to Boost.Hash.
[SVN r34202]
2006-06-06 20:13:33 +00:00
Daniel James
855ebe6b69 Fix an embarassing typo.
[SVN r34192]
2006-06-06 08:20:04 +00:00
Daniel James
e4b7765da1 Workaround for Visual C++ 7.
[SVN r34191]
2006-06-06 08:14:23 +00:00
Daniel James
f3e6c4e96a Hash workarounds for Digital Mars.
[SVN r33958]
2006-05-07 17:52:38 +00:00
Daniel James
58aec4566a Don't use fpclassify for hashing on OS X.
[SVN r33875]
2006-04-30 19:16:08 +00:00
Daniel James
9cbe356636 Name TR1 properly in the hash introduction.
[SVN r33608]
2006-04-09 09:57:47 +00:00
Daniel James
906f897e4a Fix typo in hash reference documentation and update links to more recent
versions of TR1 and the issue list.


[SVN r33607]
2006-04-09 09:46:46 +00:00
Daniel James
32d68419ec Merge hash reference changes from release branch.
[SVN r33569]
2006-04-06 20:10:57 +00:00
Daniel James
6caa46edab Put the reference documentation overloads of 'hash_value' into a single page.
[SVN r33508]
2006-03-28 17:02:49 +00:00
Daniel James
c81a6bee4e Fix typo in the hash tutorial.
[SVN r33507]
2006-03-28 16:46:49 +00:00
66 changed files with 529 additions and 560 deletions

2
doc/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
message(STATUS "functional/hash docs need love")

View File

@@ -1,9 +1,28 @@
# Copyright 2005 Daniel James.
# Copyright 2005-2008 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)
using quickbook ;
xml hash : hash.qbk ;
boostbook standalone : hash ;
boostbook standalone : hash :
<xsl:param>admon.graphics.path=images/
<xsl:param>navig.graphics.path=images/
<xsl:param>html.stylesheet=boostbook.css
<xsl:param>boost.root=../../../..
<xsl:param>boost.libraries=../../../libraries.htm
<xsl:param>chunk.first.sections=1
<xsl:param>chunk.section.depth=2
<xsl:param>generate.section.toc.level=2
<xsl:param>toc.section.depth=1
<xsl:param>toc.max.depth=1
<dependency>css
<dependency>images
;
install css : [ glob $(BOOST_ROOT)/doc/src/*.css ]
: <location>html ;
install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ]
: <location>html/images ;
explicit css ;
explicit images ;

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]
@@ -9,24 +9,69 @@
* Initial Release
[h2 Changes in Boost 1.33.1]
[h2 Boost 1.33.1]
* Fixed the points example, as pointed out by 沈慧峰.
[h2 Changes in Boost 1.34.0]
[h2 Boost 1.34.0]
* Use declarations for standard classes, so that the library
doesn't need to include all of their headers
* Deprecated the `<boost/functional/hash/*.hpp>` headers. Now a single header,
<[headerref boost/functional/hash.hpp]> is used.
* Add support for the `BOOST_HASH_NO_EXTENSIONS` macro, which
disables the extensions to TR1
disables the extensions to TR1.
* Minor improvements to the hash functions for floating point numbers.
* Update the portable example to hopefully be more generally portable.
[h2 Future Developments]
[h2 Boost 1.34.1]
* A more portable hash function, as described by Daniel Krügler in
[@http://lists.boost.org/boost-users/2005/08/13418.php a post to the boost users list].
* Implement `hash_value` for more classes, including `std::complex`.
* [@http://svn.boost.org/trac/boost/ticket/952 Ticket 952]:
Suppress incorrect 64-bit warning on Visual C++.
[h2 Boost 1.35.0]
* Support for `long long`, `std::complex`.
* Improved algorithm for hashing floating point numbers:
* Improved portablity, as described by Daniel Krügler in
[@http://lists.boost.org/boost-users/2005/08/13418.php
a post to the boost users list].
* Fits more information into each combine loop, which can reduce the
the number of times combine is called and hopefully give a better
quality hash function.
* Improved the algorithm for hashing floating point numbers.
* On Cygwin use a binary hash function for floating point numbers, as
Cygwin doesn't have decent floating point functions for `long double`.
* Never uses `fpclass` which doesn't support `long double`.
* [@http://svn.boost.org/trac/boost/ticket/1064 Ticket 1064]:
Removed unnecessary use of `errno`.
* Explicitly overload for more built in types.
* Minor improvements to the documentation.
* A few bug and warning fixes:
* [@http://svn.boost.org/trac/boost/ticket/1509 Ticket 1509]:
Suppress another Visual C++ warning.
* Some workarounds for the Sun compilers.
[h2 Boost 1.36.0]
* Stop using OpenBSD's dodgy `std::numeric_limits`.
* Using the boost typedefs for `long long` and `unsigned long long`.
* Move the extensions into their own header.
[h2 Boost 1.37.0]
* [@http://svn.boost.org/trac/boost/ticket/2264 Ticket 2264]:
In Visual C++, always use C99 float functions for `long double` and `float` as
the C++ overloads aren't always availables.
[h2 Boost 1.38.0]
* Changed the warnings in the deprecated headers from 1.34.0 to errors. These
will be removed in a future version of Boost.
* Moved detail headers out of `boost/functional/detail`, since they are part of
functional/hash, not functional. `boost/functional/detail/container_fwd.hpp`
has been moved to `boost/detail/container_fwd.hpp` as it's used outside of
this library, the others have been moved to `boost/functional/hash/detail`.
[endsect]

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]

View File

@@ -1,7 +1,7 @@
[library Boost.Functional/Hash
[quickbook 1.4]
[authors [James, Daniel]]
[copyright 2005 2006 2007 Daniel James]
[copyright 2005 2006 2007 2008 Daniel James]
[purpose A TR1 hash function object that can be extended to hash user
defined types]
[category higher-order]

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]
@@ -11,10 +11,13 @@
[def __tr1__
[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf
TR1]]
[def __unordered__ [link unordered Boost.Unordered]]
[def __intrusive__ [link intrusive.unordered_set_unordered_multiset Boost.Intrusive]]
[def __multi-index__ [@../../libs/multi_index/doc/index.html
Boost Multi-Index Containers Library]]
[def __multi-index-short__ [@../../libs/multi_index/doc/index.html
Boost.MultiIndex]]
[def __bimap__ [@../../libs/bimap/index.html Boost.Bimap]]
[def __issues__
[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf
Library Extension Technical Report Issues List]]
@@ -22,8 +25,9 @@
[def __hash-table__ [@http://en.wikipedia.org/wiki/Hash_table hash table]]
[classref boost::hash] is an implementation of the __hash-function__ object
specified by the __tr1-full__ (TR1). It is intended for use as the default hash function
for unordered associative containers, and the __multi-index__'s hash indexes.
specified by the __tr1-full__ (TR1). It is the default hash function for
__unordered__, __intrusive__'s unordered associative containers, and
__multi-index-short__'s hash indicies and __bimap__'s `unordered_set_of`.
As it is compliant with __tr1__, it will work with:

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]

View File

@@ -1,6 +1,6 @@
<!--
Copyright Daniel James 2005-2007
Copyright Daniel James 2005-2008
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)
-->
@@ -406,6 +406,8 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
</method>
</struct-specialization>
<free-function-group name="Support functions (Boost extension).">
<!--
boost::hash_combine
-->
@@ -500,6 +502,10 @@ for(; first != last; ++first)
</para></throws>
</overloaded-function>
</free-function-group>
<free-function-group name="Overloadable hash implementation (Boost extension).">
<!--
boost::hash_value - integers
-->
@@ -797,6 +803,7 @@ return seed;</programlisting></entry>
</informaltable>
</returns>
</overloaded-function>
</free-function-group>
</namespace>
</header>
</library-reference>

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]

View File

@@ -1,5 +1,5 @@
[/ Copyright 2005-2007 Daniel James.
[/ Copyright 2005-2008 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) ]

9
examples/CMakeLists.txt Normal file
View File

@@ -0,0 +1,9 @@
#-------------------------------------------------------------------------
#-- Needed include directories for the tests
boost_additional_test_dependencies(config BOOST_DEPENDS test)
#-------------------------------------------------------------------------
boost_test_run(books)
boost_test_run(point)
boost_test_run(portable)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,95 +1,19 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP)
#define BOOST_DETAIL_CONTAINER_FWD_HPP
// Forwarding header for container_fwd.hpp's new location.
// This header is deprecated, I'll be adding a warning in a future release,
// then converting it to an error and finally removing this header completely.
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#if !defined(BOOST_FUNCTIONAL_DETAIL_CONTAINER_FWD_HPP)
#define BOOST_FUNCTIONAL_DETAIL_CONTAINER_FWD_HPP
#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
#define BOOST_HASH_CHAR_TRAITS string_char_traits
#else
#define BOOST_HASH_CHAR_TRAITS char_traits
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if (defined(__GLIBCXX__) && defined(_GLIBCXX_DEBUG)) \
|| BOOST_WORKAROUND(__BORLANDC__, > 0x551) \
|| BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \
|| (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
#include <deque>
#include <list>
#include <vector>
#include <map>
#include <set>
#include <bitset>
#include <string>
#include <complex>
#else
#include <cstddef>
#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \
defined(__STL_CONFIG_H)
#define BOOST_CONTAINER_FWD_BAD_BITSET
#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG)
#define BOOST_CONTAINER_FWD_BAD_DEQUE
#endif
#endif
#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
#include <deque>
#endif
#if defined(BOOST_CONTAINER_FWD_BAD_BITSET)
#include <bitset>
#endif
#if defined(BOOST_MSVC)
#pragma warning(push)
#pragma warning(disable:4099) // struct/class mismatch in fwd declarations
#endif
namespace std
{
template <class T> class allocator;
template <class charT, class traits, class Allocator> class basic_string;
template <class charT> struct BOOST_HASH_CHAR_TRAITS;
template <class T> class complex;
}
// gcc 3.4 and greater
namespace std
{
#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
template <class T, class Allocator> class deque;
#endif
template <class T, class Allocator> class list;
template <class T, class Allocator> class vector;
template <class Key, class T, class Compare, class Allocator> class map;
template <class Key, class T, class Compare, class Allocator>
class multimap;
template <class Key, class Compare, class Allocator> class set;
template <class Key, class Compare, class Allocator> class multiset;
#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET)
template <size_t N> class bitset;
#endif
template <class T1, class T2> struct pair;
}
#if defined(BOOST_MSVC)
#pragma warning(pop)
#endif
#endif
#include <boost/detail/container_fwd.hpp>
#endif

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
@@ -8,3 +8,4 @@
// issue 6.18.
#include <boost/functional/hash/hash.hpp>

View File

@@ -1,27 +1,7 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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_DEQUE_HPP)
#define BOOST_FUNCTIONAL_HASH_DEQUE_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if defined(__EDG__)
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
#pragma message("Warning: boost/functional/hash/deque.hpp is deprecated, use boost/functional/hash.hpp instead.")
#elif defined(__GNUC__) || defined(__HP_aCC) || \
defined(__SUNPRO_CC) || defined(__IBMCPP__)
#warning "boost/functional/hash/deque.hpp is deprecated, use boost/functional/hash.hpp instead."
#endif
#error "boost/functional/hash/deque.hpp is no longer supported, use boost/functional/hash.hpp instead."
#include <boost/functional/hash.hpp>
#endif

View File

@@ -1,12 +1,12 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
#if !defined(BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP)
#define BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP
#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP)
#define BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP
#include <cmath>
#include <boost/config/no_tr1/cmath.hpp>
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
@@ -61,9 +61,13 @@
// Dinkumware.
#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
// Overloaded float functions were probably introduced in an earlier version
// than this.
# if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 402)
// Some versions of Visual C++ don't seem to have the C++ overloads but they
// all seem to have the c99 float overloads
# if defined(BOOST_MSVC)
# define BOOST_HASH_USE_C99_FLOAT_FUNCS
// On other platforms the C++ overloads seem to have been introduced sometime
// before 402.
# elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 402)
# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
# else
# define BOOST_HASH_USE_C99_FLOAT_FUNCS

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
@@ -7,8 +7,8 @@
// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
// issue 6.18.
#if !defined(BOOST_FUNCTIONAL_DETAIL_HASH_FLOAT_HEADER)
#define BOOST_FUNCTIONAL_DETAIL_HASH_FLOAT_HEADER
#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER)
#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
@@ -22,7 +22,7 @@
#endif
#endif
#include <boost/functional/detail/float_functions.hpp>
#include <boost/functional/hash/detail/float_functions.hpp>
#include <boost/integer/static_log2.hpp>
#include <boost/cstdint.hpp>
#include <boost/limits.hpp>
@@ -38,7 +38,7 @@
// STLport
#elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
// _fpclass and fpclassify aren't good enough on STLport.
// fpclassify aren't good enough on STLport.
// GNU libstdc++ 3
#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
@@ -50,19 +50,47 @@
// Dinkumware Library, on Visual C++
#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
// Not using _fpclass because it causes a warning about a conversion
// from 'long double' to 'double'. Pity.
//
//# if defined(BOOST_MSVC)
//# define BOOST_HASH_USE_FPCLASS
//# endif
// Not using _fpclass because it is only available for double.
#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);
@@ -107,29 +135,28 @@ namespace boost
// sign with the exponent.
if(v < 0) {
v = -v;
exp += std::numeric_limits<T>::max_exponent -
std::numeric_limits<T>::min_exponent;
exp += limits<T>::max_exponent -
limits<T>::min_exponent;
}
// 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.
v -= T(0.5);
v = boost::hash_detail::call_ldexp(v,
std::numeric_limits<std::size_t>::digits + 1);
limits<std::size_t>::digits + 1);
std::size_t seed = static_cast<std::size_t>(v);
v -= seed;
// ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1;
std::size_t const length
= (std::numeric_limits<T>::digits *
boost::static_log2<std::numeric_limits<T>::radix>::value
- 1)
/ std::numeric_limits<std::size_t>::digits;
= (limits<T>::digits *
boost::static_log2<limits<T>::radix>::value - 1)
/ limits<std::size_t>::digits;
for(std::size_t i = 0; i != length; ++i)
{
v = boost::hash_detail::call_ldexp(v,
std::numeric_limits<std::size_t>::digits);
limits<std::size_t>::digits);
std::size_t part = static_cast<std::size_t>(v);
v -= part;
hash_float_combine(seed, part);
@@ -160,28 +187,6 @@ namespace boost
BOOST_ASSERT(0);
return 0;
}
#elif defined(BOOST_HASH_USE_FPCLASS)
switch(_fpclass(v)) {
case _FPCLASS_NZ:
case _FPCLASS_PZ:
return 0;
case _FPCLASS_PINF:
return (std::size_t)(-1);
case _FPCLASS_NINF:
return (std::size_t)(-2);
case _FPCLASS_SNAN:
case _FPCLASS_QNAN:
return (std::size_t)(-3);
case _FPCLASS_NN:
case _FPCLASS_ND:
return float_hash_impl(v);
case _FPCLASS_PD:
case _FPCLASS_PN:
return float_hash_impl(v);
default:
BOOST_ASSERT(0);
return 0;
}
#else
return v == 0 ? 0 : float_hash_impl(v);
#endif

View File

@@ -0,0 +1,182 @@
// Copyright 2005-2008 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

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
@@ -12,8 +12,8 @@
#include <boost/functional/hash_fwd.hpp>
#include <functional>
#include <boost/functional/detail/hash_float.hpp>
#include <boost/functional/detail/container_fwd.hpp>
#include <boost/functional/hash/detail/hash_float.hpp>
#include <boost/detail/container_fwd.hpp>
#include <string>
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
@@ -46,8 +46,8 @@ namespace boost
#endif
#if defined(BOOST_HAS_LONG_LONG)
std::size_t hash_value(long long);
std::size_t hash_value(unsigned long long);
std::size_t hash_value(boost::long_long_type);
std::size_t hash_value(boost::ulong_long_type);
#endif
#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
@@ -58,10 +58,10 @@ namespace boost
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
template< class T, unsigned N >
std::size_t hash_value(const T (&array)[N]);
std::size_t hash_value(const T (&x)[N]);
template< class T, unsigned N >
std::size_t hash_value(T (&array)[N]);
std::size_t hash_value(T (&x)[N]);
#endif
std::size_t hash_value(float v);
@@ -195,12 +195,12 @@ namespace boost
#endif
#if defined(BOOST_HAS_LONG_LONG)
inline std::size_t hash_value(long long v)
inline std::size_t hash_value(boost::long_long_type v)
{
return hash_detail::hash_value_signed(v);
}
inline std::size_t hash_value(unsigned long long v)
inline std::size_t hash_value(boost::ulong_long_type v)
{
return hash_detail::hash_value_unsigned(v);
}
@@ -281,15 +281,15 @@ namespace boost
#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
template< class T, unsigned N >
inline std::size_t hash_value(const T (&array)[N])
inline std::size_t hash_value(const T (&x)[N])
{
return hash_range(array, array + N);
return hash_range(x, x + N);
}
template< class T, unsigned N >
inline std::size_t hash_value(T (&array)[N])
inline std::size_t hash_value(T (&x)[N])
{
return hash_range(array, array + N);
return hash_range(x, x + N);
}
#endif
@@ -518,176 +518,12 @@ namespace boost
}
#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
////////////////////////////////////////////////////////////////////////////////
// Include this outside of the include guards in case the file is included
// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it
// undefined.
#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)
#include <boost/functional/hash/extensions.hpp>
#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

View File

@@ -1,27 +1,7 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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_LIST_HPP)
#define BOOST_FUNCTIONAL_HASH_LIST_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if defined(__EDG__)
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
#pragma message("Warning: boost/functional/hash/list.hpp is deprecated, use boost/functional/hash.hpp instead.")
#elif defined(__GNUC__) || defined(__HP_aCC) || \
defined(__SUNPRO_CC) || defined(__IBMCPP__)
#warning "boost/functional/hash/list.hpp is deprecated, use boost/functional/hash.hpp instead."
#endif
#error "boost/functional/hash/list.hpp is no longer supported, use boost/functional/hash.hpp instead."
#include <boost/functional/hash.hpp>
#endif

View File

@@ -1,27 +1,7 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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_MAP_HPP)
#define BOOST_FUNCTIONAL_HASH_MAP_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if defined(__EDG__)
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
#pragma message("Warning: boost/functional/hash/map.hpp is deprecated, use boost/functional/hash.hpp instead.")
#elif defined(__GNUC__) || defined(__HP_aCC) || \
defined(__SUNPRO_CC) || defined(__IBMCPP__)
#warning "boost/functional/hash/map.hpp is deprecated, use boost/functional/hash.hpp instead."
#endif
#error "boost/functional/hash/map.hpp is no longer supported, use boost/functional/hash.hpp instead."
#include <boost/functional/hash.hpp>
#endif

View File

@@ -1,27 +1,7 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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_PAIR_HPP)
#define BOOST_FUNCTIONAL_HASH_PAIR_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if defined(__EDG__)
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
#pragma message("Warning: boost/functional/hash/pair.hpp is deprecated, use boost/functional/hash.hpp instead.")
#elif defined(__GNUC__) || defined(__HP_aCC) || \
defined(__SUNPRO_CC) || defined(__IBMCPP__)
#warning "boost/functional/hash/pair.hpp is deprecated, use boost/functional/hash.hpp instead."
#endif
#error "boost/functional/hash/pair.hpp is no longer supported, use boost/functional/hash.hpp instead."
#include <boost/functional/hash.hpp>
#endif

View File

@@ -1,27 +1,7 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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_SET_HPP)
#define BOOST_FUNCTIONAL_HASH_SET_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if defined(__EDG__)
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
#pragma message("Warning: boost/functional/hash/set.hpp is deprecated, use boost/functional/hash.hpp instead.")
#elif defined(__GNUC__) || defined(__HP_aCC) || \
defined(__SUNPRO_CC) || defined(__IBMCPP__)
#warning "boost/functional/hash/set.hpp is deprecated, use boost/functional/hash.hpp instead."
#endif
#error "boost/functional/hash/set.hpp is no longer supported, use boost/functional/hash.hpp instead."
#include <boost/functional/hash.hpp>
#endif

View File

@@ -1,27 +1,7 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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_VECTOR_HPP)
#define BOOST_FUNCTIONAL_HASH_VECTOR_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#if defined(__EDG__)
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
#pragma message("Warning: boost/functional/hash/vector.hpp is deprecated, use boost/functional/hash.hpp instead.")
#elif defined(__GNUC__) || defined(__HP_aCC) || \
defined(__SUNPRO_CC) || defined(__IBMCPP__)
#warning "boost/functional/hash/vector.hpp is deprecated, use boost/functional/hash.hpp instead."
#endif
#error "boost/functional/hash/vector.hpp is no longer supported, use boost/functional/hash.hpp instead."
#include <boost/functional/hash.hpp>
#endif

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

51
test/CMakeLists.txt Normal file
View File

@@ -0,0 +1,51 @@
#project hash-tests
# : requirements
# <toolset>gcc:<define>_GLIBCXX_DEBUG
# ;
if (GCC)
ADD_DEFINITIONS(-D_GLIBCXX_DEBUG)
endif(GCC)
# [ run .cpp : : : <test-info>always_show_run_output ]
#-------------------------------------------------------------------------
#-- Needed include directories for the tests
boost_additional_test_dependencies(functional BOOST_DEPENDS test)
#-------------------------------------------------------------------------
SET(tests
hash_float_test
hash_fwd_test_1
hash_fwd_test_2
hash_number_test
hash_pointer_test
hash_function_pointer_test
hash_string_test
hash_range_test
hash_custom_test
hash_global_namespace_test
hash_friend_test
hash_built_in_array_test
hash_value_array_test
hash_vector_test
hash_list_test
hash_deque_test
hash_set_test
hash_map_test
container_fwd_test
hash_no_ext_macro_1
hash_no_ext_macro_2
)
boost_test_run(link_test link_test.cpp link_test_2.cpp)
boost_test_run(link_ext_test link_ext_test.cpp link_no_ext_test.cpp)
foreach(test ${tests})
boost_test_run(${test})
endforeach(test ${tests})
boost_test_compile_fail(hash_no_ext_fail_test)
# build-project ../examples ;

View File

@@ -1,5 +1,5 @@
# Copyright 2005-2007 Daniel James.
# Copyright 2005-2008 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)
@@ -40,7 +40,7 @@ test-suite functional/hash
[ compile-fail hash_no_ext_fail_test.cpp ]
[ run hash_no_ext_macro_1.cpp ]
[ run hash_no_ext_macro_2.cpp ]
[ run hash_deprecated_headers.cpp : : : <test-info>always_show_run_output ]
[ compile-fail hash_deprecated_headers.cpp ]
;
build-project ../examples ;

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2007 Daniel James.
// Copyright 2007-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
@@ -29,12 +29,12 @@ void float_tests(char const* name, T* = 0)
std::cerr<<"\n"
<<"Testing " BOOST_STRINGIZE(HASH_NAMESPACE) "::hash<"<<name<<">\n"
<<"\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"
<<"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"
<<"\n"
;
@@ -55,11 +55,11 @@ void float_tests(char const* name, T* = 0)
#if defined(__BORLANDC__)
std::cerr<<"Not running infinity checks on Borland, as it causes it to crash.\n";
#else
if(std::numeric_limits<T>::has_infinity) {
if(boost::hash_detail::limits<T>::has_infinity) {
T infinity = -log(zero);
T infinity2 = (T) 1. / zero;
T infinity3 = (T) -1. / minus_zero;
T infinity4 = std::numeric_limits<T>::infinity();
T infinity4 = boost::hash_detail::limits<T>::infinity();
T minus_infinity = log(zero);
T minus_infinity2 = (T) -1. / zero;
@@ -89,26 +89,26 @@ void float_tests(char const* name, T* = 0)
// This should really be 'has_denorm == denorm_present' but some
// compilers don't have 'denorm_present'. See also a later use.
if(std::numeric_limits<T>::has_denorm) {
if(x1(std::numeric_limits<T>::denorm_min()) == x1(infinity)) {
if(boost::hash_detail::limits<T>::has_denorm) {
if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(infinity)) {
std::cerr<<"x1(denorm_min) == x1(infinity) == "<<x1(infinity)<<"\n";
}
if(x1(std::numeric_limits<T>::denorm_min()) == x1(minus_infinity)) {
if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(minus_infinity)) {
std::cerr<<"x1(denorm_min) == x1(-infinity) == "<<x1(minus_infinity)<<"\n";
}
}
if(std::numeric_limits<T>::has_quiet_NaN) {
if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(infinity)) {
if(boost::hash_detail::limits<T>::has_quiet_NaN) {
if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(infinity)) {
std::cerr<<"x1(quiet_NaN) == x1(infinity) == "<<x1(infinity)<<"\n";
}
if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(minus_infinity)) {
if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(minus_infinity)) {
std::cerr<<"x1(quiet_NaN) == x1(-infinity) == "<<x1(minus_infinity)<<"\n";
}
}
}
#endif
T max = (std::numeric_limits<T>::max)();
T max = (boost::hash_detail::limits<T>::max)();
T half_max = max / 2;
T quarter_max = max / 4;
T three_quarter_max = max - quarter_max;
@@ -142,50 +142,50 @@ void float_tests(char const* name, T* = 0)
BOOST_TEST(x1(v2) == HASH_NAMESPACE::hash_value(v2));
#endif
BOOST_TEST(x1(std::numeric_limits<T>::epsilon()) ==
HASH_NAMESPACE::hash_value(std::numeric_limits<T>::epsilon()));
BOOST_TEST(x1(boost::hash_detail::limits<T>::epsilon()) ==
HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::epsilon()));
BOOST_TEST(std::numeric_limits<T>::epsilon() != (T) 0);
if(x1(std::numeric_limits<T>::epsilon()) == x1((T) 0))
BOOST_TEST(boost::hash_detail::limits<T>::epsilon() != (T) 0);
if(x1(boost::hash_detail::limits<T>::epsilon()) == x1((T) 0))
std::cerr<<"x1(epsilon) == x1(0) == "<<x1((T) 0)<<"\n";
BOOST_TEST(-std::numeric_limits<T>::epsilon() != (T) 0);
if(x1(-std::numeric_limits<T>::epsilon()) == x1((T) 0))
BOOST_TEST(-boost::hash_detail::limits<T>::epsilon() != (T) 0);
if(x1(-boost::hash_detail::limits<T>::epsilon()) == x1((T) 0))
std::cerr<<"x1(-epsilon) == x1(0) == "<<x1((T) 0)<<"\n";
BOOST_TEST((T) 1 + std::numeric_limits<T>::epsilon() != (T) 1);
if(x1((T) 1 + std::numeric_limits<T>::epsilon()) == x1((T) 1))
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))
std::cerr<<"x1(1 + epsilon) == x1(1) == "<<x1((T) 1)<<"\n";
BOOST_TEST((T) 1 - std::numeric_limits<T>::epsilon() != (T) 1);
if(x1((T) 1 - std::numeric_limits<T>::epsilon()) == x1((T) 1))
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))
std::cerr<<"x1(1 - epsilon) == x1(1) == "<<x1((T) 1)<<"\n";
BOOST_TEST((T) -1 + std::numeric_limits<T>::epsilon() != (T) -1);
if(x1((T) -1 + std::numeric_limits<T>::epsilon()) == x1((T) -1))
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))
std::cerr<<"x1(-1 + epsilon) == x1(-1) == "<<x1((T) -1)<<"\n";
BOOST_TEST((T) -1 - std::numeric_limits<T>::epsilon() != (T) -1);
if(x1((T) -1 - std::numeric_limits<T>::epsilon()) == x1((T) -1))
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))
std::cerr<<"x1(-1 - epsilon) == x1(-1) == "<<x1((T) -1)<<"\n";
// As before.
if(std::numeric_limits<T>::has_denorm) {
if(x1(std::numeric_limits<T>::denorm_min()) == x1(zero)) {
if(boost::hash_detail::limits<T>::has_denorm) {
if(x1(boost::hash_detail::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 std::numeric_limits::denorm_min() for long
// specialization of boost::hash_detail::limits::denorm_min() for long
// doubles which causes this test to fail.
if(x1(std::numeric_limits<T>::denorm_min()) !=
HASH_NAMESPACE::hash_value(std::numeric_limits<T>::denorm_min()))
if(x1(boost::hash_detail::limits<T>::denorm_min()) !=
HASH_NAMESPACE::hash_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()) = "
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()) = "
<< HASH_NAMESPACE::hash_value(
std::numeric_limits<T>::denorm_min())
boost::hash_detail::limits<T>::denorm_min())
<< "\nx1(0) = "<<x1(0)<<"\n";
}
#endif
@@ -193,12 +193,12 @@ void float_tests(char const* name, T* = 0)
// NaN also causes borland to crash.
#if !defined(__BORLANDC__)
if(std::numeric_limits<T>::has_quiet_NaN) {
if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(1.0)) {
if(boost::hash_detail::limits<T>::has_quiet_NaN) {
if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(1.0)) {
std::cerr<<"x1(quiet_NaN) == x1(1.0) == "<<x1(1.0)<<"\n";
}
BOOST_TEST(x1(std::numeric_limits<T>::quiet_NaN()) ==
HASH_NAMESPACE::hash_value(std::numeric_limits<T>::quiet_NaN()));
BOOST_TEST(x1(boost::hash_detail::limits<T>::quiet_NaN()) ==
HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::quiet_NaN()));
}
#endif
}

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)
@@ -31,7 +31,7 @@
template <class T>
void numeric_test(T*)
{
typedef std::numeric_limits<T> limits;
typedef boost::hash_detail::limits<T> limits;
compile_time_tests((T*) 0);
@@ -55,7 +55,7 @@ void numeric_test(T*)
if (limits::is_integer)
{
if(limits::is_signed || limits::digits <= std::numeric_limits<std::size_t>::digits)
if(limits::is_signed || limits::digits <= boost::hash_detail::limits<std::size_t>::digits)
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));
@@ -67,7 +67,7 @@ void numeric_test(T*)
template <class T>
void limits_test(T*)
{
typedef std::numeric_limits<T> limits;
typedef boost::hash_detail::limits<T> limits;
if(limits::is_specialized)
{
@@ -98,7 +98,7 @@ void limits_test(T*)
template <class T>
void poor_quality_tests(T*)
{
typedef std::numeric_limits<T> limits;
typedef boost::hash_detail::limits<T> limits;
HASH_NAMESPACE::hash<T> x1;
HASH_NAMESPACE::hash<T> x2;
@@ -150,8 +150,8 @@ int main()
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)
NUMERIC_TEST_NO_LIMITS(boost::long_long_type, long_long)
NUMERIC_TEST_NO_LIMITS(boost::ulong_long_type, ulong_long)
#endif
NUMERIC_TEST(float, float)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2006-2007 Daniel James.
// Copyright 2006-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)

View File

@@ -1,5 +1,5 @@
// Copyright 2005-2007 Daniel James.
// Copyright 2005-2008 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)