]>
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/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"
17 //Shield against external warnings
18 #include <boost/interprocess/detail/config_external_begin.hpp>
21 #include <boost/unordered_map.hpp>
22 #include <boost/unordered_set.hpp>
25 #include <boost/interprocess/detail/config_external_end.hpp>
28 #include <functional> //std::equal_to
29 #include <boost/functional/hash.hpp> //boost::hash
31 namespace bip
= boost::interprocess
;
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
;
39 //Remove any other old shared memory from the system
40 bip::shared_memory_object::remove(bip::test::get_process_id_name());
42 bip::managed_shared_memory
shm(bip::create_only
, bip::test::get_process_id_name(), 65536);
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]);
48 MyUnorderedSet
*myset
=
49 shm
.construct
<MyUnorderedSet
>(bip::anonymous_instance
)
51 , MyUnorderedSet::hasher()
52 , MyUnorderedSet::key_equal()
53 , shm
.get_allocator
<int>());
54 MyUnorderedMultiSet
*mymset
=
55 shm
.construct
<MyUnorderedMultiSet
>(bip::anonymous_instance
)
57 , MyUnorderedSet::hasher()
58 , MyUnorderedSet::key_equal()
59 , shm
.get_allocator
<int>());
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
]));
67 if(myset
->size() != (unsigned int)elements_size
)
69 if(mymset
->size() != (unsigned int)elements_size
*2)
72 //Destroy elements and check sizes
81 //Destroy elements and check if memory has been deallocated
82 shm
.destroy_ptr(myset
);
83 shm
.destroy_ptr(mymset
);
85 shm
.shrink_to_fit_indexes();
86 if(!shm
.all_memory_deallocated())
91 //Remove shared memory from the system
92 bip::shared_memory_object::remove(bip::test::get_process_id_name());
95 //Remove shared memory from the system
96 bip::shared_memory_object::remove(bip::test::get_process_id_name());
100 #include <boost/interprocess/detail/config_end.hpp>