---
name: "ACE_Timer_Hash_T"
section: "3"
platform: "linux"
package: "libace-doc"
version: "5.0.7-4"
release: "Debian 2.2 (Potato)"
platforms: ["linux"]
url: "https://new.carta.tech/ACE_Timer_Hash_T"
---

# ACE\_Timer\_Hash\_T(3)

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

## NAME

ACE\_Timer\_Hash\_T -  Provides a hash table of BUCKETs 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 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 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, 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.

```
virtual int reset_interval (
    long timer_id,
    const ACE_Time_Value &interval
    );
```

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.

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