]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/interprocess/example/doc_multi_index.cpp
df4fd720a13d9e879d72d9e0206e6d20168dd6af
1 //////////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2006-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 //////////////////////////////////////////////////////////////////////////////
10 #include <boost/interprocess/detail/config_begin.hpp>
11 #include <boost/interprocess/detail/workaround.hpp>
13 #include <boost/interprocess/managed_shared_memory.hpp>
14 #include <boost/interprocess/allocators/allocator.hpp>
15 #include <boost/interprocess/containers/string.hpp>
18 //Shield against external warnings
19 #include <boost/interprocess/detail/config_external_begin.hpp>
22 #include <boost/multi_index_container.hpp>
23 #include <boost/multi_index/member.hpp>
24 #include <boost/multi_index/ordered_index.hpp>
27 #include <boost/interprocess/detail/config_external_end.hpp>
28 #include "../test/get_process_id_name.hpp"
31 using namespace boost::interprocess
;
32 namespace bmi
= boost::multi_index
;
34 typedef managed_shared_memory::allocator
<char>::type char_allocator
;
35 typedef basic_string
<char, std::char_traits
<char>, char_allocator
>shm_string
;
37 //Data to insert in shared memory
46 , const char_allocator
&a
)
47 : id(id_
), age(age_
), name(name_
, a
)
56 // Define a multi_index_container of employees with following indices:
57 // - a unique index sorted by employee::int,
58 // - a non-unique index sorted by employee::name,
59 // - a non-unique index sorted by employee::age.
60 typedef bmi::multi_index_container
<
64 <bmi::tag
<id
>, bmi::member
<employee
,int,&employee::id
> >,
65 bmi::ordered_non_unique
<
66 bmi::tag
<name
>, bmi::member
<employee
,shm_string
,&employee::name
> >,
67 bmi::ordered_non_unique
68 <bmi::tag
<age
>, bmi::member
<employee
,int,&employee::age
> > >,
69 managed_shared_memory::allocator
<employee
>::type
74 //Remove shared memory on construction and destruction
79 shm_remove() { shared_memory_object::remove(test::get_process_id_name()); }
80 ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); }
83 shm_remove() { shared_memory_object::remove("MySharedMemory"); }
84 ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
93 //Create shared memory
96 managed_shared_memory
segment(create_only
,test::get_process_id_name(), 65536);
99 managed_shared_memory
segment(create_only
,"MySharedMemory", 65536);
104 //Construct the multi_index in shared memory
105 employee_set
*es
= segment
.construct
<employee_set
>
106 ("My MultiIndex Container") //Container's name in shared memory
107 ( employee_set::ctor_args_list()
108 , segment
.get_allocator
<employee
>()); //Ctor parameters
110 //Now insert elements
111 char_allocator
ca(segment
.get_allocator
<char>());
112 es
->insert(employee(0,31, "Joe", ca
));
113 es
->insert(employee(1,27, "Robert", ca
));
114 es
->insert(employee(2,40, "John", ca
));
118 #include <boost/interprocess/detail/config_end.hpp>