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>