---
name: "ACE_Future_Set"
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_Future_Set"
---

# ACE\_Future\_Set(3)

This class implements a mechanism which allows the values of a collections of ACE\_Future objects to be accessed by reader threads as they become available.

## NAME

ACE\_Future\_Set -  This class implements a mechanism which allows the values of a collections of ACE\_Future objects to be accessed by reader threads as they become available.

## SYNOPSIS

```
#include <ace/Future_Set.h>
template<class T>
class ACE_Future_Set : public ACE_Future_Observer<T>
{
  public:
    ACE_Future_Set (
        ACE_Message_Queue<ACE_SYNCH> *future_notification_queue_ = 0
        );
    ~ACE_Future_Set (void);
    int is_empty (void) const;
    int insert (ACE_Future<T> &future);
    int next_readable (ACE_Future<T> &result, ACE_Time_Value *tv = 0);
    virtual void update (const ACE_Future<T> &future);
    ACE_ALLOC_HOOK_DECLARE;
  private:
    inline ACE_UNIMPLEMENTED_FUNC (
        void operator= (const ACE_Future_Set<T> &)
        );
    typedef ACE_Future<T> FUTURE;
    typedef ACE_Future_Rep<T> FUTURE_REP;
    typedef ACE_Future_Holder<T> FUTURE_HOLDER;
    typedef ACE_Pointer_Hash<FUTURE_REP *> FUTURE_REP_HASH;
    typedef ACE_Equal_To<FUTURE_REP *> FUTURE_REP_COMPARE;
        typedef ACE_Hash_Map_Manager_Ex<FUTURE_REP *, FUTURE_HOLDER *, FUTURE_REP_HASH, FUTURE_REP_COMPARE, ACE_Null_Mutex> FUTURE_HASH_MAP;

    FUTURE_HASH_MAP future_map_;
    ACE_Message_Queue<ACE_SYNCH> *future_notification_queue_;
    int delete_queue_;
};
```

## Initialization and termination methods.

```
ACE_Future_Set (
    ACE_Message_Queue<ACE_SYNCH> *future_notification_queue_ = 0
    );
```

Constructor.

```
~ACE_Future_Set (void);
```

Destructor.

```
int is_empty (void) const;
```

Return 1 if their are no ACE\_Future objects left on its queue and 0 otherwise

```
int insert (ACE_Future<T> &future);
```

Enqueus the given ACE\_Future into this objects queue when it is readable.

Returns 0 if the future is successfully inserted, 1 if the future is already inserted, and -1 if failures occur.

```
int next_readable (ACE_Future<T> &result, ACE_Time_Value *tv = 0);
```

Wait up to tv time to get the value.  Note that tv must be specified in absolute time rather than relative time.); get the next ACE\_Future that is readable.  If tv = 0, the will block forever.

If a readable future becomes available, then the input result will be assigned with it and 1 will will be returned.  If the set is empty, then 0 is returned.

```
virtual void update (const ACE_Future<T> &future);
```

Called by the ACE\_Future subject in which we are subscribed to when its value is written to.

```
ACE_ALLOC_HOOK_DECLARE;
```

Declare the dynamic allocation hooks.

## Disallow these operations.

```
inline ACE_UNIMPLEMENTED_FUNC (
    void operator= (const ACE_Future_Set<T> &)
    );
```

```
typedef ACE_Future<T> FUTURE;
```

```
typedef ACE_Future_Rep<T> FUTURE_REP;
```

```
typedef ACE_Future_Holder<T> FUTURE_HOLDER;
```

```
typedef ACE_Pointer_Hash<FUTURE_REP *> FUTURE_REP_HASH;
```

```
typedef ACE_Equal_To<FUTURE_REP *> FUTURE_REP_COMPARE;
```

```
    typedef ACE_Hash_Map_Manager_Ex<FUTURE_REP *, FUTURE_HOLDER *, FUTURE_REP_HASH, FUTURE_REP_COMPARE, ACE_Null_Mutex> FUTURE_HASH_MAP;

```

```
FUTURE_HASH_MAP future_map_;
```

Map of ACE\_Futures, subjects, which have not been written to by client's writer thread.

```
ACE_Message_Queue<ACE_SYNCH> *future_notification_queue_;
```

Message queue for notifying the reader thread of ACE\_Futures which have been written to by client's writer thread.

```
int delete_queue_;
```

Keeps track of whether we need to delete the message queue.

## AUTHOR (S)

John Tucker jtucker@infoglide.com

## LIBRARY

ace
