ACE  6.3.4
Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY > Class Template Reference

Provides a hash table of BUCKETs as an implementation for a timer queue. More...

#include <Timer_Hash_T.h>

Inheritance diagram for ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >:
Inheritance graph
[legend]
Collaboration diagram for ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >:
Collaboration graph
[legend]

Public Types

typedef ACE_Timer_Hash_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY > HASH_ITERATOR
 Type of iterator. More...
 
typedef ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY > Base_Timer_Queue
 Type inherited from. More...
 
- Public Types inherited from ACE_Abstract_Timer_Queue< TYPE >
typedef ACE_Timer_Queue_Iterator_T< TYPE > ITERATOR
 Type of Iterator. More...
 

Public Member Functions

 ACE_Timer_Hash_T (size_t table_size, FUNCTOR *upcall_functor=0, ACE_Free_List< ACE_Timer_Node_T< TYPE > > *freelist=0, TIME_POLICY const &time_policy=TIME_POLICY())
 
 ACE_Timer_Hash_T (FUNCTOR *upcall_functor=0, ACE_Free_List< ACE_Timer_Node_T< TYPE > > *freelist=0, TIME_POLICY const &time_policy=TIME_POLICY())
 
virtual ~ACE_Timer_Hash_T (void)
 Destructor. More...
 
virtual bool is_empty (void) const
 True if queue is empty, else false. More...
 
virtual const ACE_Time_Valueearliest_time (void) const
 
virtual int reset_interval (long timer_id, const ACE_Time_Value &interval)
 
virtual int cancel (const TYPE &type, int dont_call_handle_close=1)
 
virtual int cancel (long timer_id, const void **act=0, int dont_call_handle_close=1)
 
virtual int close (void)
 
virtual int expire (void)
 
virtual int expire (const ACE_Time_Value &current_time)
 
virtual ACE_Timer_Queue_Iterator_T< TYPE > & iter (void)
 Returns a pointer to this ACE_Timer_Queue's iterator. More...
 
virtual ACE_Timer_Node_T< TYPE > * remove_first (void)
 Removes the earliest node from the queue and returns it. More...
 
virtual void dump (void) const
 Dump the state of an object. More...
 
virtual ACE_Timer_Node_T< TYPE > * get_first (void)
 Reads the earliest node from the queue and returns it. More...
 
- Public Member Functions inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >
 ACE_Timer_Queue_T (FUNCTOR *upcall_functor=0, ACE_Free_List< ACE_Timer_Node_T< TYPE > > *freelist=0, TIME_POLICY const &time_policy=TIME_POLICY())
 
virtual ~ACE_Timer_Queue_T (void)
 
virtual long schedule (const TYPE &type, const void *act, const ACE_Time_Value &future_time, const ACE_Time_Value &interval=ACE_Time_Value::zero)
 
virtual int dispatch_info (const ACE_Time_Value &current_time, ACE_Timer_Node_Dispatch_Info_T< TYPE > &info)
 
virtual void gettimeofday (ACE_Time_Value(*gettimeofday)(void))
 
ACE_Time_Value gettimeofday_static ()
 
void set_time_policy (TIME_POLICY const &time_policy)
 
void timer_skew (const ACE_Time_Value &skew)
 Set the timer skew for the Timer_Queue. More...
 
const ACE_Time_Valuetimer_skew (void) const
 Get the timer skew for the Timer_Queue. More...
 
ACE_LOCK & mutex (void)
 Synchronization variable used by the queue. More...
 
virtual void return_node (ACE_Timer_Node_T< TYPE > *)
 
void preinvoke (ACE_Timer_Node_Dispatch_Info_T< TYPE > &info, const ACE_Time_Value &cur_time, const void *&upcall_act)
 This method will call the preinvoke() on <functor>. More...
 
void upcall (ACE_Timer_Node_Dispatch_Info_T< TYPE > &info, const ACE_Time_Value &cur_time)
 This method will call the timeout() on <functor>. More...
 
void postinvoke (ACE_Timer_Node_Dispatch_Info_T< TYPE > &info, const ACE_Time_Value &cur_time, const void *upcall_act)
 This method will call the postinvoke() on <functor>. More...
 
virtual int expire_single (ACE_Command_Base &pre_dispatch_command)
 
virtual ACE_Time_Value gettimeofday (void)
 
virtual ACE_Time_Valuecalculate_timeout (ACE_Time_Value *max)
 
virtual ACE_Time_Valuecalculate_timeout (ACE_Time_Value *max, ACE_Time_Value *the_timeout)
 
virtual ACE_Time_Value current_time ()
 
- Public Member Functions inherited from ACE_Timer_Queue_Upcall_Base< TYPE, FUNCTOR >
 ACE_Timer_Queue_Upcall_Base (FUNCTOR *upcall_functor=0)
 
virtual ~ACE_Timer_Queue_Upcall_Base (void)
 Destructor. More...
 
FUNCTOR & upcall_functor (void)
 Accessor to the upcall functor. More...
 
- Public Member Functions inherited from ACE_Abstract_Timer_Queue< TYPE >
virtual ~ACE_Abstract_Timer_Queue (void)=0
 Destructor. More...
 

Protected Member Functions

virtual void free_node (ACE_Timer_Node_T< TYPE > *)
 Factory method that frees a previously allocated node. More...
 
- Protected Member Functions inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >
virtual ACE_Timer_Node_T< TYPE > * alloc_node (void)
 Factory method that allocates a new node. More...
 
void recompute_next_abs_interval_time (ACE_Timer_Node_T< TYPE > *expired, const ACE_Time_Value &cur_time)
 Recompute when the next time is that this interval timer should fire. More...
 

Private Member Functions

virtual long schedule_i (const TYPE &type, const void *act, const ACE_Time_Value &future_time, const ACE_Time_Value &interval)
 
virtual int dispatch_info_i (const ACE_Time_Value &current_time, ACE_Timer_Node_Dispatch_Info_T< TYPE > &info)
 Non-locking version of dispatch_info () More...
 
virtual void reschedule (ACE_Timer_Node_T< TYPE > *)
 Reschedule an "interval" ACE_Timer_Node. More...
 
void find_new_earliest (void)
 Finds the earliest node. More...
 
 ACE_Timer_Hash_T (const ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET > &)
 
void operator= (const ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET > &)
 

Private Attributes

size_t size_
 Keeps track of the size of the queue. More...
 
BUCKET ** table_
 Table of BUCKETS. More...
 
size_t table_size_
 Keeps track of the size of table_. More...
 
ACE_Timer_Hash_Upcall< TYPE, FUNCTOR, ACE_LOCK > table_functor_
 Functor used for the table's timer queues. More...
 
size_t earliest_position_
 Index to the position with the earliest entry. More...
 
HASH_ITERATORiterator_
 Iterator used to expire timers. More...
 
ACE_Locked_Free_List< Hash_Token< TYPE >, ACE_Null_Mutextoken_list_
 

Friends

class ACE_Timer_Hash_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >
 Iterator is a friend. More...
 

Additional Inherited Members

- Protected Attributes inherited from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >
ACE_LOCK mutex_
 
ACE_Free_List< ACE_Timer_Node_T< TYPE > > * free_list_
 Class that implements a free list. More...
 
TIME_POLICY time_policy_
 The policy to return the current time of day. More...
 
bool const delete_free_list_
 Flag to delete only if the class created the <free_list_> More...
 
- Protected Attributes inherited from ACE_Timer_Queue_Upcall_Base< TYPE, FUNCTOR >
FUNCTOR * upcall_functor_
 Upcall functor. More...
 
bool const delete_upcall_functor_
 To delete or not to delete is the question? More...
 

Detailed Description

template<class TYPE, class FUNCTOR, class ACE_LOCK, class BUCKET, typename TIME_POLICY = ACE_Default_Time_Policy>
class ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >

Provides a hash table of BUCKETs as an implementation for a timer queue.

This implementation uses a hash table of BUCKETs. The hash is based on the time_value of the event. Unlike other Timer Queues, ACE_Timer_Hash does not expire events in strict order, i.e., all events are expired after their deadline. But two events may expired out of order as defined by their deadlines.

Member Typedef Documentation

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
typedef ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY> ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::Base_Timer_Queue

Type inherited from.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
typedef ACE_Timer_Hash_Iterator_T<TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY> ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::HASH_ITERATOR

Type of iterator.

Constructor & Destructor Documentation

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::ACE_Timer_Hash_T ( size_t  table_size,
FUNCTOR *  upcall_functor = 0,
ACE_Free_List< ACE_Timer_Node_T< TYPE > > *  freelist = 0,
TIME_POLICY const &  time_policy = TIME_POLICY() 
)

Default constructor. table_size determines the size of the hash table. upcall_functor is the instance of the FUNCTOR to be used by the buckets. If upcall_functor is 0, a default FUNCTOR will be created.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::ACE_Timer_Hash_T ( FUNCTOR *  upcall_functor = 0,
ACE_Free_List< ACE_Timer_Node_T< TYPE > > *  freelist = 0,
TIME_POLICY const &  time_policy = TIME_POLICY() 
)

Default constructor. upcall_functor is the instance of the FUNCTOR to be used by the queue. If upcall_functor is 0, Timer Hash will create a default FUNCTOR. freelist the freelist of timer nodes. If 0, then a default freelist will be created. The default size will be ACE_DEFAULT_TIMERS and there will be no preallocation.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::~ACE_Timer_Hash_T ( void  )
virtual

Destructor.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::ACE_Timer_Hash_T ( const ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET > &  )
private

Member Function Documentation

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::cancel ( const TYPE &  type,
int  dont_call_handle_close = 1 
)
virtual

Cancel all timer associated with type. If <dont_call> is 0 then the <functor> will be invoked. Returns number of timers cancelled. If any valid timer is not cancelled before destruction of this instance of ACE_Timer_Hash_T then user will get a memory leak.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::cancel ( long  timer_id,
const void **  act = 0,
int  dont_call_handle_close = 1 
)
virtual

Cancel the single timer that matches the timer_id value (which was returned from the <schedule> method). If act is non-NULL then it will be set to point to the ``magic cookie'' argument passed in when the timer was registered. This makes it possible to free up the memory and avoid memory leaks. If dont_call_handle_close is 0 then the <functor> will be invoked. Returns 1 if cancellation succeeded and 0 if the timer_id wasn't found. If any valid timer is not cancelled before destruction of this instance of ACE_Timer_Hash_T then user will get a memory leak.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::close ( void  )
virtual

Destroy timer queue. Cancels all timers.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::dispatch_info_i ( const ACE_Time_Value current_time,
ACE_Timer_Node_Dispatch_Info_T< TYPE > &  info 
)
privatevirtual

Non-locking version of dispatch_info ()

Reimplemented from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
void ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::dump ( void  ) const
virtual

Dump the state of an object.

Reimplemented from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
const ACE_Time_Value & ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::earliest_time ( void  ) const
virtual

Returns the time of the earlier node in the <ACE_Timer_Hash>. Must be called on a non-empty queue.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::expire ( void  )
virtual

Run the <functor> for all timers whose values are <= gettimeofday. Also accounts for <timer_skew>. Returns the number of timers canceled.

Reimplemented from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::expire ( const ACE_Time_Value current_time)
virtual

Run the <functor> for all timers whose values are <= current_time. This does not account for <timer_skew>. Returns the number of timers canceled.

Reimplemented from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
void ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::find_new_earliest ( void  )
private

Finds the earliest node.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
void ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::free_node ( ACE_Timer_Node_T< TYPE > *  node)
protectedvirtual

Factory method that frees a previously allocated node.

Reimplemented from ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
ACE_Timer_Node_T< TYPE > * ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::get_first ( void  )
virtual

Reads the earliest node from the queue and returns it.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
bool ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::is_empty ( void  ) const
virtual

True if queue is empty, else false.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
ACE_Timer_Queue_Iterator_T< TYPE > & ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::iter ( void  )
virtual

Returns a pointer to this ACE_Timer_Queue's iterator.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
void ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::operator= ( const ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET > &  )
private
template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
ACE_Timer_Node_T< TYPE > * ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::remove_first ( void  )
virtual

Removes the earliest node from the queue and returns it.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
void ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::reschedule ( ACE_Timer_Node_T< TYPE > *  expired)
privatevirtual

Reschedule an "interval" ACE_Timer_Node.

Implements ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
int ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::reset_interval ( long  timer_id,
const ACE_Time_Value interval 
)
virtual

Resets the interval of the timer represented by timer_id to interval, which is specified in relative time to the current <gettimeofday>. If interval is equal to ACE_Time_Value::zero, the timer will become a non-rescheduling timer. Returns 0 if successful, -1 if not.

Implements ACE_Abstract_Timer_Queue< TYPE >.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY >
long ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::schedule_i ( const TYPE &  type,
const void *  act,
const ACE_Time_Value future_time,
const ACE_Time_Value interval 
)
privatevirtual

Schedule type that will expire at future_time, which is specified in absolute time. If it expires then act is passed in as the value to the <functor>. If interval is != to ACE_Time_Value::zero then it is used to reschedule the type automatically, using relative time to the current <gettimeofday>. This method returns a <timer_id> that is a pointer to a token which stores information about the event. This <timer_id> can be used to cancel the timer before it expires. Returns -1 on failure.

Implements ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY >.

Friends And Related Function Documentation

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
friend class ACE_Timer_Hash_Iterator_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >
friend

Iterator is a friend.

Member Data Documentation

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
size_t ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::earliest_position_
private

Index to the position with the earliest entry.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
HASH_ITERATOR* ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::iterator_
private

Iterator used to expire timers.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
size_t ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::size_
private

Keeps track of the size of the queue.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
BUCKET** ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::table_
private

Table of BUCKETS.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
ACE_Timer_Hash_Upcall<TYPE, FUNCTOR, ACE_LOCK> ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::table_functor_
private

Functor used for the table's timer queues.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
size_t ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::table_size_
private

Keeps track of the size of table_.

template<class TYPE , class FUNCTOR , class ACE_LOCK , class BUCKET , typename TIME_POLICY = ACE_Default_Time_Policy>
ACE_Locked_Free_List<Hash_Token<TYPE>, ACE_Null_Mutex> ACE_Timer_Hash_T< TYPE, FUNCTOR, ACE_LOCK, BUCKET, TIME_POLICY >::token_list_
private

Hash_Token is usually allocated in schedule but its deallocation is problematic and token_list_ helps with this.


The documentation for this class was generated from the following files: