Public Types | Public Member Functions | Private Member Functions | Private Attributes

ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK > Class Template Reference

Functor for Timer_Queues. More...

#include <Timer_Queue_T.h>

List of all members.

Public Types

typedef ACE_Timer_Queue_T
< ACE_Event_Handler
*, ACE_Event_Handler_Handle_Timeout_Upcall
< ACE_LOCK >, ACE_LOCK > 
TIMER_QUEUE

Public Member Functions

 ACE_Event_Handler_Handle_Timeout_Upcall (void)
 Constructor.
 ~ACE_Event_Handler_Handle_Timeout_Upcall (void)
 Destructor.
int registration (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, const void *arg)
 This method is called when a timer is registered.
int preinvoke (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, const void *arg, int recurring_timer, const ACE_Time_Value &cur_time, const void *&upcall_act)
 This method is called before the timer expires.
int timeout (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, const void *arg, int recurring_timer, const ACE_Time_Value &cur_time)
 This method is called when the timer expires.
int postinvoke (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, const void *arg, int recurring_timer, const ACE_Time_Value &cur_time, const void *upcall_act)
 This method is called after the timer expires.
int cancel_type (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, int dont_call, int &requires_reference_counting)
 This method is called when a handler is cancelled.
int cancel_timer (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, int dont_call, int requires_reference_counting)
 This method is called when a timer is cancelled.
int deletion (TIMER_QUEUE &timer_queue, ACE_Event_Handler *handler, const void *arg)

Private Member Functions

 ACE_Event_Handler_Handle_Timeout_Upcall (const ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK > &)
void operator= (const ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK > &)

Private Attributes

int requires_reference_counting_

Detailed Description

template<class ACE_LOCK>
class ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >

Functor for Timer_Queues.

This class implements the functor required by the Timer Queue to call <handle_timeout> on ACE_Event_Handlers.

Definition at line 479 of file Timer_Queue_T.h.


Member Typedef Documentation

Definition at line 485 of file Timer_Queue_T.h.


Constructor & Destructor Documentation

template<class ACE_LOCK >
ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::ACE_Event_Handler_Handle_Timeout_Upcall ( void   ) 

Constructor.

Definition at line 396 of file Timer_Queue_T.cpp.

{
}

template<class ACE_LOCK >
ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::~ACE_Event_Handler_Handle_Timeout_Upcall ( void   ) 

Destructor.

Definition at line 401 of file Timer_Queue_T.cpp.

{
}

template<class ACE_LOCK>
ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::ACE_Event_Handler_Handle_Timeout_Upcall ( const ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK > &   )  [private]

Member Function Documentation

template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::cancel_timer ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
int  dont_call,
int  requires_reference_counting 
)

This method is called when a timer is cancelled.

Definition at line 505 of file Timer_Queue_T.cpp.

{
  if (requires_reference_counting)
    event_handler->remove_reference ();

  return 0;
}

template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::cancel_type ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
int  dont_call,
int &  requires_reference_counting 
)

This method is called when a handler is cancelled.

Definition at line 487 of file Timer_Queue_T.cpp.

{
  requires_reference_counting =
    event_handler->reference_counting_policy ().value () ==
    ACE_Event_Handler::Reference_Counting_Policy::ENABLED;

  // Upcall to the <handler>s handle_close method
  if (dont_call == 0)
    event_handler->handle_close (ACE_INVALID_HANDLE,
                                 ACE_Event_Handler::TIMER_MASK);

  return 0;
}

template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::deletion ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
const void *  arg 
)

This method is called when the timer queue is destroyed and the timer is still contained in it

Definition at line 517 of file Timer_Queue_T.cpp.

{
  int requires_reference_counting = 0;

  this->cancel_type (timer_queue,
                     event_handler,
                     0,
                     requires_reference_counting);

  this->cancel_timer (timer_queue,
                      event_handler,
                      0,
                      requires_reference_counting);

  return 0;
}

template<class ACE_LOCK>
void ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::operator= ( const ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK > &   )  [private]
template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::postinvoke ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
const void *  arg,
int  recurring_timer,
const ACE_Time_Value cur_time,
const void *  upcall_act 
)

This method is called after the timer expires.

Definition at line 437 of file Timer_Queue_T.cpp.

{
  if (upcall_act == &this->requires_reference_counting_)
    {
      event_handler->remove_reference ();
    }

  return 0;
}

template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::preinvoke ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
const void *  arg,
int  recurring_timer,
const ACE_Time_Value cur_time,
const void *&  upcall_act 
)

This method is called before the timer expires.

Definition at line 415 of file Timer_Queue_T.cpp.

{
  bool const requires_reference_counting =
    event_handler->reference_counting_policy ().value () ==
    ACE_Event_Handler::Reference_Counting_Policy::ENABLED;

  if (requires_reference_counting)
    {
      event_handler->add_reference ();

      upcall_act = &this->requires_reference_counting_;
    }

  return 0;
}

template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::registration ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
const void *  arg 
)

This method is called when a timer is registered.

Definition at line 406 of file Timer_Queue_T.cpp.

{
  event_handler->add_reference ();
  return 0;
}

template<class ACE_LOCK >
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::timeout ( TIMER_QUEUE timer_queue,
ACE_Event_Handler handler,
const void *  arg,
int  recurring_timer,
const ACE_Time_Value cur_time 
)

This method is called when the timer expires.

Definition at line 453 of file Timer_Queue_T.cpp.

{
  int requires_reference_counting = 0;

  if (!recurring_timer)
    {
      requires_reference_counting =
        event_handler->reference_counting_policy ().value () ==
        ACE_Event_Handler::Reference_Counting_Policy::ENABLED;
    }

  // Upcall to the <handler>s handle_timeout method.
  if (event_handler->handle_timeout (cur_time, act) == -1)
    {
      if (event_handler->reactor_timer_interface ())
        event_handler->reactor_timer_interface ()->cancel_timer (event_handler, 0);
      else
        timer_queue.cancel (event_handler, 0); // 0 means "call handle_close()".
    }

  if (!recurring_timer &&
      requires_reference_counting)
    {
      event_handler->remove_reference ();
    }

  return 0;
}


Member Data Documentation

template<class ACE_LOCK>
int ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::requires_reference_counting_ [private]

Flag indicating that reference counting is required for this event handler upcall.

Definition at line 544 of file Timer_Queue_T.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines