]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/interprocess/test/unordered_test.cpp
1 //////////////////////////////////////////////////////////////////////////////
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)
7 // See http://www.boost.org/libs/interprocess for documentation.
9 //////////////////////////////////////////////////////////////////////////////
11 #include <boost/interprocess/managed_shared_memory.hpp>
12 #include <boost/interprocess/allocators/allocator.hpp>
13 #include "get_process_id_name.hpp"
16 //Shield against external warnings
17 #include <boost/interprocess/detail/config_external_begin.hpp>
20 #include <boost/unordered_map.hpp>
21 #include <boost/unordered_set.hpp>
24 #include <boost/interprocess/detail/config_external_end.hpp>
27 #include <functional> //std::equal_to
28 #include <boost/container_hash/hash.hpp> //boost::hash
30 namespace bip
= boost::interprocess
;
32 typedef bip::allocator
<int, bip::managed_shared_memory::segment_manager
> ShmemAllocator
;
33 typedef boost::unordered_set
<int, boost::hash
<int>, std::equal_to
<int>, ShmemAllocator
> MyUnorderedSet
;
34 typedef boost::unordered_multiset
<int, boost::hash
<int>, std::equal_to
<int>, ShmemAllocator
> MyUnorderedMultiSet
;
38 //Remove any other old shared memory from the system
39 bip::shared_memory_object::remove(bip::test::get_process_id_name());
41 bip::managed_shared_memory
shm(bip::create_only
, bip::test::get_process_id_name(), 65536);
43 //Elements to be inserted in unordered containers
44 const int elements
[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
45 const std::size_t elements_size
= sizeof(elements
)/sizeof(elements
[0]);
47 MyUnorderedSet
*myset
=
48 shm
.construct
<MyUnorderedSet
>(bip::anonymous_instance
)
50 , MyUnorderedSet::hasher()
51 , MyUnorderedSet::key_equal()
52 , shm
.get_allocator
<int>());
53 MyUnorderedMultiSet
*mymset
=
54 shm
.construct
<MyUnorderedMultiSet
>(bip::anonymous_instance
)
56 , MyUnorderedSet::hasher()
57 , MyUnorderedSet::key_equal()
58 , shm
.get_allocator
<int>());
60 //Insert elements and check sizes
61 myset
->insert((&elements
[0]), (&elements
[std::ptrdiff_t(elements_size
)]));
62 myset
->insert((&elements
[0]), (&elements
[std::ptrdiff_t(elements_size
)]));
63 mymset
->insert((&elements
[0]), (&elements
[std::ptrdiff_t(elements_size
)]));
64 mymset
->insert((&elements
[0]), (&elements
[std::ptrdiff_t(elements_size
)]));
66 if(myset
->size() != elements_size
)
68 if(mymset
->size() != elements_size
*2u)
71 //Destroy elements and check sizes
80 //Destroy elements and check if memory has been deallocated
81 shm
.destroy_ptr(myset
);
82 shm
.destroy_ptr(mymset
);
84 shm
.shrink_to_fit_indexes();
85 if(!shm
.all_memory_deallocated())
90 //Remove shared memory from the system
91 bip::shared_memory_object::remove(bip::test::get_process_id_name());
94 //Remove shared memory from the system
95 bip::shared_memory_object::remove(bip::test::get_process_id_name());