]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/interprocess/test/unordered_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / interprocess / test / unordered_test.cpp
1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
4 // Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // See http://www.boost.org/libs/interprocess for documentation.
8 //
9 //////////////////////////////////////////////////////////////////////////////
10
11 #include <boost/interprocess/detail/config_begin.hpp>
12 #include <boost/interprocess/managed_shared_memory.hpp>
13 #include <boost/interprocess/allocators/allocator.hpp>
14 #include "get_process_id_name.hpp"
15
16 //<-
17 //Shield against external warnings
18 #include <boost/interprocess/detail/config_external_begin.hpp>
19 //->
20
21 #include <boost/unordered_map.hpp>
22 #include <boost/unordered_set.hpp>
23
24 //<-
25 #include <boost/interprocess/detail/config_external_end.hpp>
26 //->
27
28 #include <functional> //std::equal_to
29 #include <boost/functional/hash.hpp> //boost::hash
30
31 namespace bip = boost::interprocess;
32
33 typedef bip::allocator<int, bip::managed_shared_memory::segment_manager> ShmemAllocator;
34 typedef boost::unordered_set<int, boost::hash<int>, std::equal_to<int>, ShmemAllocator> MyUnorderedSet;
35 typedef boost::unordered_multiset<int, boost::hash<int>, std::equal_to<int>, ShmemAllocator> MyUnorderedMultiSet;
36
37 int main()
38 {
39 //Remove any other old shared memory from the system
40 bip::shared_memory_object::remove(bip::test::get_process_id_name());
41 try {
42 bip::managed_shared_memory shm(bip::create_only, bip::test::get_process_id_name(), 65536);
43
44 //Elements to be inserted in unordered containers
45 const int elements[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
46 const int elements_size = sizeof(elements)/sizeof(elements[0]);
47
48 MyUnorderedSet *myset =
49 shm.construct<MyUnorderedSet>(bip::anonymous_instance)
50 ( elements_size
51 , MyUnorderedSet::hasher()
52 , MyUnorderedSet::key_equal()
53 , shm.get_allocator<int>());
54 MyUnorderedMultiSet *mymset =
55 shm.construct<MyUnorderedMultiSet>(bip::anonymous_instance)
56 ( elements_size
57 , MyUnorderedSet::hasher()
58 , MyUnorderedSet::key_equal()
59 , shm.get_allocator<int>());
60
61 //Insert elements and check sizes
62 myset->insert((&elements[0]), (&elements[elements_size]));
63 myset->insert((&elements[0]), (&elements[elements_size]));
64 mymset->insert((&elements[0]), (&elements[elements_size]));
65 mymset->insert((&elements[0]), (&elements[elements_size]));
66
67 if(myset->size() != (unsigned int)elements_size)
68 return 1;
69 if(mymset->size() != (unsigned int)elements_size*2)
70 return 1;
71
72 //Destroy elements and check sizes
73 myset->clear();
74 mymset->clear();
75
76 if(!myset->empty())
77 return 1;
78 if(!mymset->empty())
79 return 1;
80
81 //Destroy elements and check if memory has been deallocated
82 shm.destroy_ptr(myset);
83 shm.destroy_ptr(mymset);
84
85 shm.shrink_to_fit_indexes();
86 if(!shm.all_memory_deallocated())
87 return 1;
88
89 }
90 catch(...){
91 //Remove shared memory from the system
92 bip::shared_memory_object::remove(bip::test::get_process_id_name());
93 throw;
94 }
95 //Remove shared memory from the system
96 bip::shared_memory_object::remove(bip::test::get_process_id_name());
97 return 0;
98 }
99
100 #include <boost/interprocess/detail/config_end.hpp>