]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/functional/hash/examples/point.cpp
bump version to 12.2.12-pve1
[ceph.git] / ceph / src / boost / libs / functional / hash / examples / point.cpp
CommitLineData
7c673cae
FG
1
2// Copyright 2005 Daniel James.
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6// Force use of assert.
7#if defined(NDEBUG)
8#undef NDEBUG
9#endif
10
11#include <boost/functional/hash.hpp>
12#include <cassert>
13
14// This example illustrates how to use boost::hash_combine to generate a hash
15// value from the different members of a class. For full details see the hash
16// tutorial.
17
18class point
19{
20 int x;
21 int y;
22public:
23 point() : x(0), y(0) {}
24 point(int x, int y) : x(x), y(y) {}
25
26 bool operator==(point const& other) const
27 {
28 return x == other.x && y == other.y;
29 }
30
31 friend std::size_t hash_value(point const& p)
32 {
33 std::size_t seed = 0;
34 boost::hash_combine(seed, p.x);
35 boost::hash_combine(seed, p.y);
36
37 return seed;
38 }
39};
40
41int main()
42{
43 boost::hash<point> point_hasher;
44
45 point p1(0, 0);
46 point p2(1, 2);
47 point p3(4, 1);
48 point p4 = p1;
49
50 assert(point_hasher(p1) == point_hasher(p4));
51
52 // These tests could legally fail, but if they did it'd be a pretty bad
53 // hash function.
54 assert(point_hasher(p1) != point_hasher(p2));
55 assert(point_hasher(p1) != point_hasher(p3));
56
57 return 0;
58}
59