Advertisement
Guest User

interprocessWeakVectorTest.cc

a guest
Nov 30th, 2010
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 KB | None | 0 0
  1. #include <iostream>
  2. #include <boost/interprocess/managed_shared_memory.hpp>
  3. #include <boost/interprocess/smart_ptr/shared_ptr.hpp>
  4. #include <boost/interprocess/smart_ptr/weak_ptr.hpp>
  5. #include <boost/interprocess/containers/vector.hpp>
  6. #include <boost/interprocess/allocators/allocator.hpp>
  7.  
  8. using namespace boost::interprocess;
  9.  
  10. struct Foo {
  11.         Foo( int _x ) : x(_x) {}
  12.         int x;
  13. };
  14.  
  15. typedef managed_shared_ptr<Foo, fixed_managed_shared_memory>::type                              FooSharedPtrType;
  16. typedef managed_weak_ptr  <Foo, fixed_managed_shared_memory>::type                              FooWeakPtrType;
  17. typedef allocator<FooWeakPtrType, fixed_managed_shared_memory::segment_manager>                 FooWeakPtrAllocatorType;
  18. typedef allocator<FooSharedPtrType, fixed_managed_shared_memory::segment_manager>               FooSharedPtrAllocatorType;
  19. typedef vector<FooWeakPtrType , FooWeakPtrAllocatorType>                                        FooWeakPtrVectorType;
  20. typedef vector<FooSharedPtrType , FooSharedPtrAllocatorType>                                    FooSharedPtrVectorType;
  21.  
  22. struct FooWeakPtrOp{
  23.         void operator()( const FooWeakPtrType & a ) { std::cout << a.lock()->x << "\n"; }
  24. };
  25.  
  26. struct FooSharedPtrOp{
  27.         void operator()( const FooSharedPtrType & a ){ std::cout << a->x << "\n"; }
  28. };
  29.  
  30. int main()
  31. {
  32.         //Remove existing segment
  33.         shared_memory_object::remove("MySharedMemory");
  34.  
  35.         //Create a new segment with given name and size
  36.         fixed_managed_shared_memory segment(create_only, "MySharedMemory", 65536);
  37.  
  38.         //Initialize shared memory STL-compatible allocator
  39.         const FooWeakPtrAllocatorType alloc_inst_weak (segment.get_segment_manager());
  40.         const FooSharedPtrAllocatorType alloc_inst_shared (segment.get_segment_manager());
  41.  
  42.         //Construct a vector named "MyVector" in shared memory with argument alloc_inst
  43.         FooWeakPtrVectorType *foo_weak_vector = segment.construct<FooWeakPtrVectorType>("MyWeakVector")(alloc_inst_weak);
  44.         FooSharedPtrVectorType *foo_shared_vector = segment.construct<FooSharedPtrVectorType>("MySharedVector")(alloc_inst_shared);
  45.  
  46.         FooSharedPtrType foo_ptr1 = make_managed_shared_ptr(segment.construct<Foo>(anonymous_instance)(1), segment);
  47.         FooSharedPtrType foo_ptr2 = make_managed_shared_ptr(segment.construct<Foo>(anonymous_instance)(2), segment);
  48.         FooSharedPtrType foo_ptr3 = make_managed_shared_ptr(segment.construct<Foo>(anonymous_instance)(3), segment);
  49.  
  50.         foo_weak_vector->push_back(foo_ptr1);
  51.         foo_weak_vector->push_back(foo_ptr2);
  52.         foo_weak_vector->push_back(foo_ptr3);
  53.  
  54.         foo_shared_vector->push_back(foo_ptr1);
  55.         foo_shared_vector->push_back(foo_ptr2);
  56.         foo_shared_vector->push_back(foo_ptr3);
  57.  
  58.         foo_weak_vector->erase(foo_weak_vector->begin()+1);
  59.         foo_shared_vector->erase(foo_shared_vector->begin()+1);
  60.  
  61.         std::cout << "foo_shared_vector:" << std::endl;
  62.         std::for_each( foo_shared_vector->begin(), foo_shared_vector->end(), FooSharedPtrOp() );
  63.  
  64.         std::cout << "foo_weak_vector:" << std::endl;
  65.         std::for_each( foo_weak_vector->begin(), foo_weak_vector->end(), FooWeakPtrOp() );
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement