int TAO_Muxed_TMS::clear_cache_i (void) { if (this->dispatcher_table_.current_size () == 0) return -1; REQUEST_DISPATCHER_TABLE::ITERATOR const end = this->dispatcher_table_.end (); ACE_Unbounded_Stack <ACE_Intrusive_Auto_Ptr<TAO_Reply_Dispatcher> > ubs; for (REQUEST_DISPATCHER_TABLE::ITERATOR i = this->dispatcher_table_.begin (); i != end; ++i) { ubs.push ((*i).int_id_); } this->dispatcher_table_.unbind_all (); size_t const sz = ubs.size (); for (size_t k = 0 ; k != sz ; ++k) { ACE_Intrusive_Auto_Ptr<TAO_Reply_Dispatcher> rd(0); if (ubs.pop (rd) == 0) { rd->connection_closed (); } } return 0; }
int StackExample::runUnboundedStack (void) { ACE_TRACE (ACE_TEXT ("StackExample::runUnboundedStack")); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Using an unbounded stack\n"))); ACE_Unbounded_Stack<DataElement*> ustack; for (int m = 0; m < 100; m++) { DataElement *elem; ACE_NEW_RETURN(elem, DataElement (m), -1); // Push the element on both stacks. ustack.push (elem); privateStack_.push (elem); } // Oddly enough, you can actually iterate through an // unbounded stack! This is because underneath the covers // the unbounded stack is a linked list. // This will cause the elements in the private stack to // also disappear! ACE_Unbounded_Stack_Iterator<DataElement*> iter (ustack); for (iter.first (); !iter.done (); iter.advance ()) { DataElement** elem = 0; iter.next (elem); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%d:"), (*elem)->getData ())); delete (*elem); } return 0; }
// Listing 1 // Listing 2 code/ch05 int StackExample::runUnboundedStack (ACE_Allocator* allocator) { ACE_TRACE ("StackExample::runUnboundedStack"); // Pass in an allocator during construction. ACE_Unbounded_Stack<DataElement> ustack (allocator); for (int m = 0; m < 100; m++) { DataElement elem (m); int result = ustack.push (elem); if (result == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("Push Next Element")), -1); } void* furtherMemory = 0; furtherMemory = allocator->malloc (sizeof(ACE_Node<DataElement>)); ACE_ASSERT (furtherMemory == 0); // No memory left.. ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%p\n"), ACE_TEXT ("No memory.."))); // Free up some memory in the allocator. DataElement e; for (int n = 0; n < 10; n++) { ustack.pop (e); } furtherMemory = allocator->malloc (sizeof (ACE_Node<DataElement>)); ACE_ASSERT (furtherMemory != 0); return 0; }