#include <ace/Timer_Hash_T.h>
template<class TYPE, class FUNCTOR, class ACE_LOCK, class BUCKET> class ACE_Timer_Hash_T : public ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> {
public:
typedef ACE_Timer_Hash_Iterator_T<TYPE, FUNCTOR, ACE_LOCK, BUCKET> HASH_ITERATOR; friend class ACE_Timer_Hash_Iterator_T<TYPE, FUNCTOR, ACE_LOCK, BUCKET>;typedef ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK> INHERITED;
ACE_Timer_Hash_T ( size_t table_size, FUNCTOR *upcall_functor = 0, ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0 );
ACE_Timer_Hash_T ( FUNCTOR *upcall_functor = 0, ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0 );
virtual ~ACE_Timer_Hash_T (void);
virtual int is_empty (void) const;
virtual const ACE_Time_Value &earliest_time (void) const;
virtual long schedule ( const TYPE &type, const void *act, const ACE_Time_Value &delay, const ACE_Time_Value &interval = ACE_Time_Value::zero );
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 expire (void);
virtual int expire (const ACE_Time_Value ¤t_time);
virtual ACE_Timer_Queue_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> &iter ( void );
virtual ACE_Timer_Node_T<TYPE> *remove_first (void);
virtual void dump (void) const;
virtual ACE_Timer_Node_T<TYPE> *get_first (void);
private:
virtual void reschedule (ACE_Timer_Node_T<TYPE> *);
void find_new_earliest (void);
size_t size_;
BUCKET **table_;
size_t table_size_;
ACE_Timer_Hash_Upcall<TYPE, FUNCTOR, ACE_LOCK> table_functor_;
size_t earliest_position_;
HASH_ITERATOR *iterator_;
inline ACE_UNIMPLEMENTED_FUNC ( ACE_Timer_Hash_T (const ACE_Timer_Hash_T<TYPE, FUNCTOR, ACE_LOCK, BUCKET> &) );
};
ACE_Timer_Hash_T (
size_t table_size,
FUNCTOR *upcall_functor = 0,
ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0
);
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.
ACE_Timer_Hash_T (
FUNCTOR *upcall_functor = 0,
ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0
);
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.
virtual ~ACE_Timer_Hash_T (void);
virtual int is_empty (void) const;
virtual const ACE_Time_Value &earliest_time (void) const;
ACE_Timer_Hash
.
virtual long schedule (
const TYPE &type,
const void *act,
const ACE_Time_Value &delay,
const ACE_Time_Value &interval = ACE_Time_Value::zero
);
type
that will expire after delay
amount of 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. 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.
virtual int cancel (const TYPE &type, int dont_call_handle_close = 1);
type
. If dont_call
is 0
then the functor
will be invoked. Returns number of timers
cancelled.
virtual int cancel (
long timer_id,
const void **act = 0,
int dont_call_handle_close = 1
);
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
is
0 then the functor
will be invoked. Returns 1 if cancellation
succeeded and 0 if the timer_id
wasn't found.
virtual int expire (void);
functor
for all timers whose values are =
ACE_OS::gettimeofday
. Also accounts for timer_skew
. Returns
the number of timers canceled.
virtual int expire (const ACE_Time_Value ¤t_time);
functor
for all timers whose values are = cur_time
.
This does not account for timer_skew
. Returns the number of
timers canceled.
virtual ACE_Timer_Queue_Iterator_T<TYPE, FUNCTOR, ACE_LOCK> &iter (
void
);
ACE_Timer_Queue
's iterator.
virtual ACE_Timer_Node_T<TYPE> *remove_first (void);
virtual void dump (void) const;
virtual ACE_Timer_Node_T<TYPE> *get_first (void);
inline ACE_UNIMPLEMENTED_FUNC (
ACE_Timer_Hash_T (const ACE_Timer_Hash_T<TYPE, FUNCTOR, ACE_LOCK, BUCKET> &)
);
brunsch@cs.wustl.edu
BUCKET
s as an implementation for
a timer queue.