summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/interprocess/test/set_test.hpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/interprocess/test/set_test.hpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/interprocess/test/set_test.hpp')
-rw-r--r--src/boost/libs/interprocess/test/set_test.hpp594
1 files changed, 594 insertions, 0 deletions
diff --git a/src/boost/libs/interprocess/test/set_test.hpp b/src/boost/libs/interprocess/test/set_test.hpp
new file mode 100644
index 00000000..44b0b66e
--- /dev/null
+++ b/src/boost/libs/interprocess/test/set_test.hpp
@@ -0,0 +1,594 @@
+////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2004-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+////////////////////////////////////////
+
+#ifndef BOOST_INTERPROCESS_TEST_SET_TEST_HEADER
+#define BOOST_INTERPROCESS_TEST_SET_TEST_HEADER
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include "check_equal_containers.hpp"
+#include "print_container.hpp"
+#include <boost/move/utility_core.hpp>
+#include "get_process_id_name.hpp"
+
+#include <functional>
+
+namespace boost{
+namespace interprocess{
+namespace test{
+
+template<class ManagedSharedMemory
+ ,class MyShmSet
+ ,class MyStdSet
+ ,class MyShmMultiSet
+ ,class MyStdMultiSet>
+int set_test ()
+{
+ typedef typename MyShmSet::value_type IntType;
+ const int memsize = 65536;
+ const char *const shMemName = test::get_process_id_name();
+ const int max = 100;
+
+ try{
+ //Create shared memory
+ shared_memory_object::remove(shMemName);
+ ManagedSharedMemory segment(create_only, shMemName, memsize);
+
+ segment.reserve_named_objects(100);
+
+ //Shared memory allocator must be always be initialized
+ //since it has no default constructor
+ MyShmSet *shmset =
+ segment.template construct<MyShmSet>("MyShmSet")
+ (std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdSet *stdset = new MyStdSet;
+
+ MyShmMultiSet *shmmultiset =
+ segment.template construct<MyShmMultiSet>("MyShmMultiSet")
+ (std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdMultiSet *stdmultiset = new MyStdMultiSet;
+
+ //Test construction from a range
+ {
+ IntType aux_vect[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(i/2);
+ aux_vect[i] = boost::move(move_me);
+ }
+ int aux_vect2[50];
+ for(int i = 0; i < 50; ++i){
+ aux_vect2[i] = i/2;
+ }
+ IntType aux_vect3[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(i/2);
+ aux_vect3[i] = boost::move(move_me);
+ }
+
+ MyShmSet *shmset2 =
+ segment.template construct<MyShmSet>("MyShmSet2")
+ ( ::boost::make_move_iterator(&aux_vect[0])
+ , ::boost::make_move_iterator(aux_vect + 50)
+ , std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdSet *stdset2 = new MyStdSet(aux_vect2, aux_vect2 + 50);
+
+ MyShmMultiSet *shmmultiset2 =
+ segment.template construct<MyShmMultiSet>("MyShmMultiSet2")
+ ( ::boost::make_move_iterator(&aux_vect3[0])
+ , ::boost::make_move_iterator(aux_vect3 + 50)
+ , std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdMultiSet *stdmultiset2 = new MyStdMultiSet(aux_vect2, aux_vect2 + 50);
+ if(!CheckEqualContainers(shmset2, stdset2)){
+ std::cout << "Error in construct<MyShmSet>(MyShmSet2)" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset2, stdmultiset2)){
+ std::cout << "Error in construct<MyShmMultiSet>(MyShmMultiSet2)" << std::endl;
+ return 1;
+ }
+
+ //ordered range insertion
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(i);
+ aux_vect[i] = boost::move(move_me);
+ }
+
+ for(int i = 0; i < 50; ++i){
+ aux_vect2[i] = i;
+ }
+
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(i);
+ aux_vect3[i] = boost::move(move_me);
+ }
+
+ MyShmSet *shmset3 =
+ segment.template construct<MyShmSet>("MyShmSet3")
+ ( ordered_unique_range
+ , ::boost::make_move_iterator(&aux_vect[0])
+ , ::boost::make_move_iterator(aux_vect + 50)
+ , std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdSet *stdset3 = new MyStdSet(aux_vect2, aux_vect2 + 50);
+
+ MyShmMultiSet *shmmultiset3 =
+ segment.template construct<MyShmMultiSet>("MyShmMultiSet3")
+ ( ordered_range
+ , ::boost::make_move_iterator(&aux_vect3[0])
+ , ::boost::make_move_iterator(aux_vect3 + 50)
+ , std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdMultiSet *stdmultiset3 = new MyStdMultiSet(aux_vect2, aux_vect2 + 50);
+
+ if(!CheckEqualContainers(shmset3, stdset3)){
+ std::cout << "Error in construct<MyShmSet>(MyShmSet3)" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset3, stdmultiset3)){
+ std::cout << "Error in construct<MyShmMultiSet>(MyShmMultiSet3)" << std::endl;
+ return 1;
+ }
+
+ segment.destroy_ptr(shmset2);
+ segment.destroy_ptr(shmmultiset2);
+ delete stdset2;
+ delete stdmultiset2;
+
+ segment.destroy_ptr(shmset3);
+ segment.destroy_ptr(shmmultiset3);
+ delete stdset3;
+ delete stdmultiset3;
+ }
+
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(boost::move(move_me)" << std::endl;
+ return 1;
+ }
+
+ for(int i = 0; i < max/2; ++i){
+ IntType move_me(i);
+ shmset->insert(boost::move(move_me));
+ stdset->insert(i);
+ IntType move_me2(i);
+ shmmultiset->insert(boost::move(move_me2));
+ stdmultiset->insert(i);
+
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(boost::move(move_me)" << std::endl;
+ return 1;
+ }
+ //
+ shmset->insert(IntType(i));
+ stdset->insert(i);
+ shmmultiset->insert(IntType(i));
+ stdmultiset->insert(i);
+
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(boost::move(move_me)" << std::endl;
+ return 1;
+ }
+
+ }
+
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(boost::move(move_me)" << std::endl;
+ return 1;
+ }
+
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(boost::move(move_me)" << std::endl;
+ return 1;
+ }
+
+ typename MyShmSet::iterator it;
+ typename MyShmSet::const_iterator cit = it;
+ (void)cit;
+
+ shmset->erase(shmset->begin()++);
+ stdset->erase(stdset->begin()++);
+ shmmultiset->erase(shmmultiset->begin()++);
+ stdmultiset->erase(stdmultiset->begin()++);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->erase(shmset->begin()++)" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->erase(shmmultiset->begin()++)" << std::endl;
+ return 1;
+ }
+
+ shmset->erase(shmset->begin());
+ stdset->erase(stdset->begin());
+ shmmultiset->erase(shmmultiset->begin());
+ stdmultiset->erase(stdmultiset->begin());
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->erase(shmset->begin())" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->erase(shmmultiset->begin())" << std::endl;
+ return 1;
+ }
+
+ //Swapping test
+ std::less<IntType> lessfunc;
+ MyShmSet tmpshmeset2 (lessfunc, segment.get_segment_manager());
+ MyStdSet tmpstdset2;
+ MyShmMultiSet tmpshmemultiset2(lessfunc, segment.get_segment_manager());
+ MyStdMultiSet tmpstdmultiset2;
+ shmset->swap(tmpshmeset2);
+ stdset->swap(tmpstdset2);
+ shmmultiset->swap(tmpshmemultiset2);
+ stdmultiset->swap(tmpstdmultiset2);
+ shmset->swap(tmpshmeset2);
+ stdset->swap(tmpstdset2);
+ shmmultiset->swap(tmpshmemultiset2);
+ stdmultiset->swap(tmpstdmultiset2);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->swap(tmpshmeset2)" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->swap(tmpshmemultiset2)" << std::endl;
+ return 1;
+ }
+
+ //Insertion from other container
+ //Initialize values
+ {
+ IntType aux_vect[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(-1);
+ aux_vect[i] = boost::move(move_me);
+ }
+ int aux_vect2[50];
+ for(int i = 0; i < 50; ++i){
+ aux_vect2[i] = -1;
+ }
+ IntType aux_vect3[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(-1);
+ aux_vect3[i] = boost::move(move_me);
+ }
+
+ shmset->insert(::boost::make_move_iterator(&aux_vect[0]), ::boost::make_move_iterator(aux_vect + 50));
+ stdset->insert(aux_vect2, aux_vect2 + 50);
+ shmmultiset->insert(::boost::make_move_iterator(&aux_vect3[0]), ::boost::make_move_iterator(aux_vect3 + 50));
+ stdmultiset->insert(aux_vect2, aux_vect2 + 50);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(::boost::make_move_iterator(&aux_vect[0])..." << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(::boost::make_move_iterator(&aux_vect3[0]), ..." << std::endl;
+ return 1;
+ }
+
+ for(int i = 0, j = static_cast<int>(shmset->size()); i < j; ++i){
+ IntType erase_me(i);
+ shmset->erase(erase_me);
+ stdset->erase(i);
+ shmmultiset->erase(erase_me);
+ stdmultiset->erase(i);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->erase(erase_me)" << shmset->size() << " " << stdset->size() << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->erase(erase_me)" << std::endl;
+ return 1;
+ }
+ }
+ }
+ {
+ IntType aux_vect[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(-1);
+ aux_vect[i] = boost::move(move_me);
+ }
+ int aux_vect2[50];
+ for(int i = 0; i < 50; ++i){
+ aux_vect2[i] = -1;
+ }
+ IntType aux_vect3[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(-1);
+ aux_vect3[i] = boost::move(move_me);
+ }
+
+ IntType aux_vect4[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(-1);
+ aux_vect4[i] = boost::move(move_me);
+ }
+
+ IntType aux_vect5[50];
+ for(int i = 0; i < 50; ++i){
+ IntType move_me(-1);
+ aux_vect5[i] = boost::move(move_me);
+ }
+
+ shmset->insert(::boost::make_move_iterator(&aux_vect[0]), ::boost::make_move_iterator(aux_vect + 50));
+ shmset->insert(::boost::make_move_iterator(&aux_vect3[0]), ::boost::make_move_iterator(aux_vect3 + 50));
+ stdset->insert(aux_vect2, aux_vect2 + 50);
+ stdset->insert(aux_vect2, aux_vect2 + 50);
+ shmmultiset->insert(::boost::make_move_iterator(&aux_vect4[0]), ::boost::make_move_iterator(aux_vect4 + 50));
+ shmmultiset->insert(::boost::make_move_iterator(&aux_vect5[0]), ::boost::make_move_iterator(aux_vect5 + 50));
+ stdmultiset->insert(aux_vect2, aux_vect2 + 50);
+ stdmultiset->insert(aux_vect2, aux_vect2 + 50);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(::boost::make_move_iterator(&aux_vect3[0])..." << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(::boost::make_move_iterator(&aux_vect5[0])..." << std::endl;
+ return 1;
+ }
+
+ shmset->erase(*shmset->begin());
+ stdset->erase(*stdset->begin());
+ shmmultiset->erase(*shmmultiset->begin());
+ stdmultiset->erase(*stdmultiset->begin());
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->erase(*shmset->begin())" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->erase(*shmmultiset->begin())" << std::endl;
+ return 1;
+ }
+ }
+
+ for(int i = 0; i < max/2; ++i){
+ IntType move_me(i);
+ shmset->insert(shmset->begin(), boost::move(move_me));
+ stdset->insert(stdset->begin(), i);
+ IntType move_me2(i);
+ shmmultiset->insert(shmmultiset->begin(), boost::move(move_me2));
+ stdmultiset->insert(stdmultiset->begin(), i);
+ //
+ shmset->insert(shmset->begin(), IntType(i));
+ stdset->insert(stdset->begin(), i);
+ shmmultiset->insert(shmmultiset->begin(), IntType(i));
+ stdmultiset->insert(stdmultiset->begin(), i);
+ }
+
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(boost::move(move_me)) try 2" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(boost::move(move_me2)) try 2" << std::endl;
+ return 1;
+ }
+
+ for(int i = 0; i < max; ++i){
+ {
+ IntType move_me(i);
+ shmset->insert(shmset->begin(), boost::move(move_me));
+ stdset->insert(stdset->begin(), i);
+ //PrintContainers(shmset, stdset);
+ IntType move_me2(i);
+ shmmultiset->insert(shmmultiset->begin(), boost::move(move_me2));
+ stdmultiset->insert(stdmultiset->begin(), i);
+ //PrintContainers(shmmultiset, stdmultiset);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(shmset->begin(), boost::move(move_me))" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(shmmultiset->begin(), boost::move(move_me2))" << std::endl;
+ return 1;
+ }
+
+ IntType move_me3(i);
+ shmset->insert(shmset->end(), boost::move(move_me3));
+ stdset->insert(stdset->end(), i);
+ IntType move_me4(i);
+ shmmultiset->insert(shmmultiset->end(), boost::move(move_me4));
+ stdmultiset->insert(stdmultiset->end(), i);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(shmset->end(), boost::move(move_me3))" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(shmmultiset->end(), boost::move(move_me4))" << std::endl;
+ return 1;
+ }
+ }
+ {
+ IntType move_me(i);
+ shmset->insert(shmset->upper_bound(move_me), boost::move(move_me));
+ stdset->insert(stdset->upper_bound(i), i);
+ //PrintContainers(shmset, stdset);
+ IntType move_me2(i);
+ shmmultiset->insert(shmmultiset->upper_bound(move_me2), boost::move(move_me2));
+ stdmultiset->insert(stdmultiset->upper_bound(i), i);
+ //PrintContainers(shmmultiset, stdmultiset);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(shmset->upper_bound(move_me), boost::move(move_me))" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(shmmultiset->upper_bound(move_me2), boost::move(move_me2))" << std::endl;
+ return 1;
+ }
+ }
+ {
+ IntType move_me(i);
+ IntType move_me2(i);
+ shmset->insert(shmset->lower_bound(move_me), boost::move(move_me2));
+ stdset->insert(stdset->lower_bound(i), i);
+ //PrintContainers(shmset, stdset);
+ move_me2 = i;
+ shmmultiset->insert(shmmultiset->lower_bound(move_me2), boost::move(move_me2));
+ stdmultiset->insert(stdmultiset->lower_bound(i), i);
+ //PrintContainers(shmmultiset, stdmultiset);
+ if(!CheckEqualContainers(shmset, stdset)){
+ std::cout << "Error in shmset->insert(shmset->lower_bound(move_me), boost::move(move_me2))" << std::endl;
+ return 1;
+ }
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)){
+ std::cout << "Error in shmmultiset->insert(shmmultiset->lower_bound(move_me2), boost::move(move_me2))" << std::endl;
+ return 1;
+ }
+ }
+ }
+
+ //Compare count with std containers
+ for(int i = 0; i < max; ++i){
+ IntType count_me(i);
+ if(shmset->count(count_me) != stdset->count(i)){
+ return -1;
+ }
+ if(shmmultiset->count(count_me) != stdmultiset->count(i)){
+ return -1;
+ }
+ }
+
+ //Now do count exercise
+ shmset->erase(shmset->begin(), shmset->end());
+ shmmultiset->erase(shmmultiset->begin(), shmmultiset->end());
+ shmset->clear();
+ shmmultiset->clear();
+
+ for(int j = 0; j < 3; ++j)
+ for(int i = 0; i < 100; ++i){
+ IntType move_me(i);
+ shmset->insert(boost::move(move_me));
+ IntType move_me2(i);
+ shmmultiset->insert(boost::move(move_me2));
+ IntType count_me(i);
+ if(shmset->count(count_me) != typename MyShmMultiSet::size_type(1)){
+ std::cout << "Error in shmset->count(count_me)" << std::endl;
+ return 1;
+ }
+ if(shmmultiset->count(count_me) != typename MyShmMultiSet::size_type(j+1)){
+ std::cout << "Error in shmmultiset->count(count_me)" << std::endl;
+ return 1;
+ }
+ }
+
+ segment.template destroy<MyShmSet>("MyShmSet");
+ delete stdset;
+ segment.destroy_ptr(shmmultiset);
+ delete stdmultiset;
+ segment.shrink_to_fit_indexes();
+
+ if(!segment.all_memory_deallocated()){
+ std::cout << "Error in segment.all_memory_deallocated()" << std::endl;
+ return 1;
+ }
+ }
+ catch(...){
+ shared_memory_object::remove(shMemName);
+ throw;
+ }
+ shared_memory_object::remove(shMemName);
+ return 0;
+}
+
+template<class ManagedSharedMemory
+ ,class MyShmSet
+ ,class MyStdSet
+ ,class MyShmMultiSet
+ ,class MyStdMultiSet>
+int set_test_copyable ()
+{
+ typedef typename MyShmSet::value_type IntType;
+ const int memsize = 65536;
+ const char *const shMemName = test::get_process_id_name();
+ const int max = 100;
+
+ try{
+ //Create shared memory
+ shared_memory_object::remove(shMemName);
+ ManagedSharedMemory segment(create_only, shMemName, memsize);
+
+ segment.reserve_named_objects(100);
+
+ //Shared memory allocator must be always be initialized
+ //since it has no default constructor
+ MyShmSet *shmset =
+ segment.template construct<MyShmSet>("MyShmSet")
+ (std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdSet *stdset = new MyStdSet;
+
+ MyShmMultiSet *shmmultiset =
+ segment.template construct<MyShmMultiSet>("MyShmMultiSet")
+ (std::less<IntType>(), segment.get_segment_manager());
+
+ MyStdMultiSet *stdmultiset = new MyStdMultiSet;
+
+ for(int i = 0; i < max; ++i){
+ IntType move_me(i);
+ shmset->insert(boost::move(move_me));
+ stdset->insert(i);
+ IntType move_me2(i);
+ shmmultiset->insert(boost::move(move_me2));
+ stdmultiset->insert(i);
+ }
+ if(!CheckEqualContainers(shmset, stdset)) return 1;
+ if(!CheckEqualContainers(shmmultiset, stdmultiset)) return 1;
+
+ {
+ //Now, test copy constructor
+ MyShmSet shmsetcopy(*shmset);
+ MyStdSet stdsetcopy(*stdset);
+
+ if(!CheckEqualContainers(&shmsetcopy, &stdsetcopy))
+ return 1;
+
+ MyShmMultiSet shmmsetcopy(*shmmultiset);
+ MyStdMultiSet stdmsetcopy(*stdmultiset);
+
+ if(!CheckEqualContainers(&shmmsetcopy, &stdmsetcopy))
+ return 1;
+
+ //And now assignment
+ shmsetcopy = *shmset;
+ stdsetcopy = *stdset;
+
+ if(!CheckEqualContainers(&shmsetcopy, &stdsetcopy))
+ return 1;
+
+ shmmsetcopy = *shmmultiset;
+ stdmsetcopy = *stdmultiset;
+
+ if(!CheckEqualContainers(&shmmsetcopy, &stdmsetcopy))
+ return 1;
+ }
+ segment.destroy_ptr(shmset);
+ segment.destroy_ptr(shmmultiset);
+ delete stdset;
+ delete stdmultiset;
+ segment.shrink_to_fit_indexes();
+ if(!segment.all_memory_deallocated())
+ return 1;
+ }
+ catch(...){
+ shared_memory_object::remove(shMemName);
+ throw;
+ }
+ shared_memory_object::remove(shMemName);
+ return 0;
+}
+
+} //namespace test{
+} //namespace interprocess{
+} //namespace boost{
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif