NAME

ACE_Stream - This class is the primary abstraction for the ASX framework. It is moduled after System V Stream.

SYNOPSIS

#include <ace/Stream.h>

template<ACE_SYNCH_DECL> class ACE_Stream { public: friend class ACE_Stream_Iterator<ACE_SYNCH_USE>; enum{ M_DELETE = 3 }; ACE_Stream ( void *arg = 0, ACE_Module<ACE_SYNCH_USE> *head = 0, ACE_Module<ACE_SYNCH_USE> *tail = 0 ); virtual int open ( void *arg, ACE_Module<ACE_SYNCH_USE> *head = 0, ACE_Module<ACE_SYNCH_USE> *tail = 0 ); virtual int close (int flags = M_DELETE); virtual ~ACE_Stream (void); virtual int push (ACE_Module<ACE_SYNCH_USE> *mod); virtual int pop (int flags = M_DELETE); virtual int top (ACE_Module<ACE_SYNCH_USE> *&mod); virtual int remove (const ASYS_TCHAR *mod, int flags = M_DELETE); virtual ACE_Module<ACE_SYNCH_USE> *head (void); virtual ACE_Module<ACE_SYNCH_USE> *tail (void); virtual ACE_Module<ACE_SYNCH_USE> *find (const ASYS_TCHAR *mod); virtual int link (ACE_Stream<ACE_SYNCH_USE> &); virtual int unlink (void); virtual int put ( ACE_Message_Block *mb, ACE_Time_Value *timeout = 0 ); virtual int get ( ACE_Message_Block *&mb, ACE_Time_Value *timeout = 0 ); virtual int control ( ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds cmd, void *args ); virtual int wait (void); virtual void dump (void) const; ACE_ALLOC_HOOK_DECLARE; private: int unlink_i (void); int link_i (ACE_Stream<ACE_SYNCH_USE> &); int push_module ( ACE_Module<ACE_SYNCH_USE> *, ACE_Module<ACE_SYNCH_USE> * = 0, ACE_Module<ACE_SYNCH_USE> * = 0 ); ACE_Module<ACE_SYNCH_USE> *stream_head_; ACE_Module<ACE_SYNCH_USE> *stream_tail_; ACE_Stream<ACE_SYNCH_USE> *linked_us_; ACE_SYNCH_MUTEX_T lock_; ACE_SYNCH_CONDITION_T final_close_; };

DESCRIPTION

A Stream consists of a stack of ACE_Modules, each of which contains two ACE_Tasks. Even though the methods in this class are virtual, this class isn't really intended for subclassing unless you know what you are doing. In particular, the ACE_Stream destructor calls close, which won't be overridden properly unless you call it in a subclass destructor.

Initializatation and termination methods.

ACE_Stream (
    void *arg = 0,
    ACE_Module<ACE_SYNCH_USE> *head = 0,
    ACE_Module<ACE_SYNCH_USE> *tail = 0
    );

virtual int open (
    void *arg,
    ACE_Module<ACE_SYNCH_USE> *head = 0,
    ACE_Module<ACE_SYNCH_USE> *tail = 0
    );

virtual int close (int flags = M_DELETE);

virtual ~ACE_Stream (void);

ACE_Stream plumbing operations

virtual int push (ACE_Module<ACE_SYNCH_USE> *mod);

virtual int pop (int flags = M_DELETE);

virtual int top (ACE_Module<ACE_SYNCH_USE> *&mod);

virtual int remove (const ASYS_TCHAR *mod, int flags = M_DELETE);

virtual ACE_Module<ACE_SYNCH_USE> *head (void);

virtual ACE_Module<ACE_SYNCH_USE> *tail (void);

virtual ACE_Module<ACE_SYNCH_USE> *find (const ASYS_TCHAR *mod);

virtual int link (ACE_Stream<ACE_SYNCH_USE> &);

virtual int unlink (void);

Blocking data transfer operations

virtual int put (ACE_Message_Block *mb, ACE_Time_Value *timeout = 0);

virtual int get (ACE_Message_Block *&mb, ACE_Time_Value *timeout = 0);

virtual int control (
    ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds cmd,
    void *args
    );

virtual int wait (void);

virtual void dump (void) const;

ACE_ALLOC_HOOK_DECLARE;

Synchronization objects used for thread-safe streams.

ACE_SYNCH_MUTEX_T lock_;

ACE_SYNCH_CONDITION_T final_close_;

AUTHOR

Doug Schmidt

LIBRARY

ace