int main ()
{
   //We will create a buffer of 1000 bytes to store a list
   managed_heap_memory heap_memory(1000);

   MyList * mylist = heap_memory.construct<MyList>("MyList")
                        (heap_memory.get_segment_manager());

   //Obtain handle, that identifies the list in the buffer
   managed_heap_memory::handle_t list_handle = heap_memory.get_handle_from_address(mylist);

   //Fill list until there is no more memory in the buffer
   try{
      while(1) {
         mylist->insert(mylist->begin(), 0);
      }
   }
   catch(const bad_alloc &){
      //memory is full
   }
   //Let's obtain the size of the list
   MyList::size_type old_size = mylist->size();
   //<-
   (void)old_size;
   //->

   //To make the list bigger, let's increase the heap buffer
   //in 1000 bytes more.
   heap_memory.grow(1000);

   //If memory has been reallocated, the old pointer is invalid, so
   //use previously obtained handle to find the new pointer.
   mylist = static_cast<MyList *>
               (heap_memory.get_address_from_handle(list_handle));

   //Fill list until there is no more memory in the buffer
   try{
      while(1) {
         mylist->insert(mylist->begin(), 0);
      }
   }
   catch(const bad_alloc &){
      //memory is full
   }

   //Let's obtain the new size of the list
   MyList::size_type new_size = mylist->size();
   //<-
   (void)new_size;
   //->

   assert(new_size > old_size);

   //Destroy list
   heap_memory.destroy_ptr(mylist);

   return 0;
}
int main()
{
	MyList<int> list;
	
	list.insert(1);
	list.insert(2);
	list.insert(3);
	list.insert(4);
	list.insert(5);
	list.insert(6);
	list.insert(7);
	list.insert(8);
	list.traverse(print_int);
	cout << endl;

	cout << "reverse list..." << endl;
	//list.reverse();
	list.traverse(print_int);
	cout << endl;
}
示例#3
0
int main() {
	MyList<int> ml;
	int choose;
	int pos, entry;
	while (1) {
		cout << "1.insert  2.remove  3. replace  4.size  5.empty  6.retrive  7.display" << endl;
		cin >> choose;
		switch (choose) {
		case 1:
			cin >> pos >> entry;
			ml.insert(pos, entry);
			break;
		case 2:
			cin >> pos;
			ml.remove(pos, entry);
			cout << entry << endl;
			break;
		case 3:
			cin >> pos >> entry;
			ml.replace(pos, entry);
			break;
		case 4:
			cout << ml.size() << endl;
			break;
		case 5:
			cout << ml.empty() << endl;
			break;
		case 6:
			cin >> pos;
			ml.retrieve(pos, entry);
			cout << entry << endl;
			break;
		case 7:
			ml.display();
		}
	}
}
int main ()
{
   const char *FileName       = "file_mapping";
   const std::size_t FileSize = 1000;
   file_mapping::remove(FileName);
   try{
      std::size_t old_size = 0;
      managed_mapped_file::handle_t list_handle;
      {
         managed_mapped_file mfile_memory(create_only, FileName, FileSize);
         MyList *mylist = mfile_memory.construct<MyList>("MyList")
                              (mfile_memory.get_segment_manager());

         //Obtain handle, that identifies the list in the buffer
         list_handle = mfile_memory.get_handle_from_address(mylist);

         //Fill list until there is no more room in the file
         try{
            while(1) {
               mylist->insert(mylist->begin(), 0);
            }
         }
         catch(const bad_alloc &){
            //mapped file is full
         }
         //Let's obtain the size of the list
         old_size = mylist->size();
      }
      //To make the list bigger, let's increase the mapped file
      //in FileSize bytes more.
      managed_mapped_file::grow(FileName, FileSize*2);

      {
         managed_mapped_file mfile_memory(open_only, FileName);


         //If mapping address has changed, the old pointer is invalid,
         //so use previously obtained handle to find the new pointer.
         MyList *mylist = static_cast<MyList *>
                           (mfile_memory.get_address_from_handle(list_handle));
         
         //Fill list until there is no more room in the file
         try{
            while(1) {
               mylist->insert(mylist->begin(), 0);
            }
         }
         catch(const bad_alloc &){
            //mapped file is full
         }

         //Let's obtain the new size of the list      
         std::size_t new_size = mylist->size();

         assert(new_size > old_size);

         //Destroy list
         mfile_memory.destroy_ptr(mylist);
      }
   }
   catch(...){
      file_mapping::remove(FileName);
      throw;
   }
   file_mapping::remove(FileName);
   return 0;
}