## NAME

ACE_Timer_Hash_T - Provides a hash table of `BUCKET`s as an implementation for a timer queue.

## SYNOPSIS

    #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 &current_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> &)
            );
    };

## DESCRIPTION

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 order.

## Initialization and termination methods.

    ACE_Timer_Hash_T (
        size_t table_size,
        FUNCTOR *upcall_functor = 0,
        ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0
        );

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.

    ACE_Timer_Hash_T (
        FUNCTOR *upcall_functor = 0,
        ACE_Free_List<ACE_Timer_Node_T <TYPE> > *freelist = 0
        );

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.

    virtual ~ACE_Timer_Hash_T (void);

Destructor

    virtual int is_empty (void) const;

True if queue is empty, else false.

    virtual const ACE_Time_Value &earliest_time (void) const;

Returns the time of the earlier node in the `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
        );

Schedule `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);

Cancel all timer associated with `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
        );

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` 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);

Run the `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 &current_time);

Run the `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
        );

Returns a pointer to this `ACE_Timer_Queue`'s iterator.

    virtual ACE_Timer_Node_T<TYPE> *remove_first (void);

Removes the earliest node from the queue and returns it

    virtual void dump (void) const;

Dump the state of an object.

    virtual ACE_Timer_Node_T<TYPE> *get_first (void);

Reads the earliest node from the queue and returns it.

## Don't allow these operations for now.

    inline ACE_UNIMPLEMENTED_FUNC (
        ACE_Timer_Hash_T (const ACE_Timer_Hash_T<TYPE, FUNCTOR, ACE_LOCK, BUCKET> &)
        );

## AUTHOR

Darrell Brunsch `brunsch@cs.wustl.edu`

## LIBRARY

ace