ACE_Stream<> Class Template Reference

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

#include <Stream.h>

Collaboration diagram for ACE_Stream<>:

Collaboration graph
[legend]

List of all members.

Public Types

enum  { M_DELETE = 3 }

Public Member Functions

 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)
 Close down the stream and release all the resources.
virtual ~ACE_Stream (void)
 Close down the stream and release all the resources.
virtual int push (ACE_Module< ACE_SYNCH_USE > *mod)
virtual int pop (int flags=M_DELETE)
 Remove the <mod> right below the Stream head and close it down.
virtual int top (ACE_Module< ACE_SYNCH_USE > *&mod)
virtual int insert (const ACE_TCHAR *prev_name, ACE_Module< ACE_SYNCH_USE > *mod)
 Insert a new module <mod> below the named module <prev_name>.
virtual int replace (const ACE_TCHAR *replace_name, ACE_Module< ACE_SYNCH_USE > *mod, int flags=M_DELETE)
 Replace the named module <replace_name> with a new module <mod>.
virtual int remove (const ACE_TCHAR *mod, int flags=M_DELETE)
virtual ACE_Module
< ACE_SYNCH_USE > * 
head (void)
 Return current stream head.
virtual ACE_Module
< ACE_SYNCH_USE > * 
tail (void)
 Return current stream tail.
virtual ACE_Module
< ACE_SYNCH_USE > * 
find (const ACE_TCHAR *mod)
 Find a particular ACE_Module.
virtual int link (ACE_Stream< ACE_SYNCH_USE > &)
 Create a pipe between two Streams.
virtual int unlink (void)
 Remove a pipe formed between two Streams.
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)
 Send control message down the stream.
virtual int wait (void)
 Synchronize with the final close of the stream.
virtual void dump (void) const
 Dump the state of an object.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Private Member Functions

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)
 Must a new module onto the Stream.

Private Attributes

ACE_Module< ACE_SYNCH_USE > * stream_head_
 Pointer to the head of the stream.
ACE_Module< ACE_SYNCH_USE > * stream_tail_
 Pointer to the tail of the stream.
ACE_Stream< ACE_SYNCH_USE > * linked_us_
 Pointer to an adjoining linked stream.
ACE_SYNCH_MUTEX_T lock_
 Protect the stream against race conditions.
ACE_SYNCH_CONDITION_T final_close_
 Use to tell all threads waiting on the close that we are done.

Friends

class ACE_Stream_Iterator< ACE_SYNCH_USE >


Detailed Description

template<ACE_SYNCH_DECL>
class ACE_Stream<>

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

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.


Member Enumeration Documentation

template<ACE_SYNCH_DECL >
anonymous enum

Enumerator:
M_DELETE  Indicates that <close> deletes the Tasks. Don't change this value without updating the same enum in class ACE_Module...


Constructor & Destructor Documentation

template<ACE_SYNCH_DECL >
ACE_Stream<>::ACE_Stream ( void *  arg = 0,
ACE_Module< ACE_SYNCH_USE > *  head = 0,
ACE_Module< ACE_SYNCH_USE > *  tail = 0 
) [inline]

Create a Stream consisting of <head> and <tail> as the Stream head and Stream tail, respectively. If these are 0 then the <ACE_Stream_Head> and <ACE_Stream_Tail> are used, respectively. <arg> is the value past in to the <open> methods of the tasks.

template<ACE_SYNCH_DECL >
ACE_Stream<>::~ACE_Stream ( void   )  [inline, virtual]

Close down the stream and release all the resources.


Member Function Documentation

template<ACE_SYNCH_DECL >
int ACE_Stream<>::open ( void *  arg,
ACE_Module< ACE_SYNCH_USE > *  head = 0,
ACE_Module< ACE_SYNCH_USE > *  tail = 0 
) [inline, virtual]

Create a Stream consisting of <head> and <tail> as the Stream head and Stream tail, respectively. If these are 0 then the <ACE_Stream_Head> and <ACE_Stream_Tail> are used, respectively. <arg> is the value past in to the <open> methods of the tasks.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::close ( int  flags = M_DELETE  )  [inline, virtual]

Close down the stream and release all the resources.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::push ( ACE_Module< ACE_SYNCH_USE > *  mod  )  [inline, virtual]

Add a new module <mod> right below the Stream head. The <open()> hook methods of the <ACE_Tasks> in this ACE_Module are invoked to initialize the tasks.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::pop ( int  flags = M_DELETE  )  [inline, virtual]

Remove the <mod> right below the Stream head and close it down.

are invoked to cleanup the tasks.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::top ( ACE_Module< ACE_SYNCH_USE > *&  mod  )  [inline, virtual]

Return the top module on the stream (right below the stream head).

template<ACE_SYNCH_DECL >
int ACE_Stream<>::insert ( const ACE_TCHAR prev_name,
ACE_Module< ACE_SYNCH_USE > *  mod 
) [inline, virtual]

Insert a new module <mod> below the named module <prev_name>.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::replace ( const ACE_TCHAR replace_name,
ACE_Module< ACE_SYNCH_USE > *  mod,
int  flags = M_DELETE 
) [inline, virtual]

Replace the named module <replace_name> with a new module <mod>.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::remove ( const ACE_TCHAR mod,
int  flags = M_DELETE 
) [inline, virtual]

Remove the named module <mod> from the stream. This bypasses the strict LIFO ordering of <push> and <pop>.

template<ACE_SYNCH_DECL >
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE ACE_Module< ACE_SYNCH_USE > * ACE_Stream<>::head ( void   )  [inline, virtual]

Return current stream head.

template<ACE_SYNCH_DECL >
ACE_INLINE ACE_Module< ACE_SYNCH_USE > * ACE_Stream<>::tail ( void   )  [inline, virtual]

Return current stream tail.

template<ACE_SYNCH_DECL >
ACE_Module< ACE_SYNCH_USE > * ACE_Stream<>::find ( const ACE_TCHAR mod  )  [inline, virtual]

Find a particular ACE_Module.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::link ( ACE_Stream< ACE_SYNCH_USE > &  us  )  [inline, virtual]

Create a pipe between two Streams.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::unlink ( void   )  [inline, virtual]

Remove a pipe formed between two Streams.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::put ( ACE_Message_Block mb,
ACE_Time_Value timeout = 0 
) [inline, virtual]

Send the message mb down the stream, starting at the Module below the Stream head. Wait for upto timeout amount of absolute time for the operation to complete (or block forever if timeout == 0).

template<ACE_SYNCH_DECL >
int ACE_Stream<>::get ( ACE_Message_Block *&  mb,
ACE_Time_Value timeout = 0 
) [inline, virtual]

Read the message mb that is stored in the stream head. Wait for upto timeout amount of absolute time for the operation to complete (or block forever if timeout == 0).

template<ACE_SYNCH_DECL >
int ACE_Stream<>::control ( ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds  cmd,
void *  args 
) [inline, virtual]

Send control message down the stream.

template<ACE_SYNCH_DECL >
ACE_INLINE int ACE_Stream<>::wait ( void   )  [inline, virtual]

Synchronize with the final close of the stream.

template<ACE_SYNCH_DECL >
ACE_BEGIN_VERSIONED_NAMESPACE_DECL void ACE_Stream<>::dump ( void   )  const [inline, virtual]

Dump the state of an object.

template<ACE_SYNCH_DECL >
int ACE_Stream<>::unlink_i ( void   )  [inline, private]

Actually perform the unlinking of two Streams (must be called with locks held).

template<ACE_SYNCH_DECL >
int ACE_Stream<>::link_i ( ACE_Stream< ACE_SYNCH_USE > &  us  )  [inline, private]

Actually perform the linking of two Streams (must be called with locks held).

template<ACE_SYNCH_DECL >
int ACE_Stream<>::push_module ( ACE_Module< ACE_SYNCH_USE > *  new_top,
ACE_Module< ACE_SYNCH_USE > *  current_top = 0,
ACE_Module< ACE_SYNCH_USE > *  head = 0 
) [inline, private]

Must a new module onto the Stream.


Friends And Related Function Documentation

template<ACE_SYNCH_DECL >
friend class ACE_Stream_Iterator< ACE_SYNCH_USE > [friend]


Member Data Documentation

template<ACE_SYNCH_DECL >
ACE_Stream<>::ACE_ALLOC_HOOK_DECLARE

Declare the dynamic allocation hooks.

template<ACE_SYNCH_DECL >
ACE_Module<ACE_SYNCH_USE>* ACE_Stream<>::stream_head_ [private]

Pointer to the head of the stream.

template<ACE_SYNCH_DECL >
ACE_Module<ACE_SYNCH_USE>* ACE_Stream<>::stream_tail_ [private]

Pointer to the tail of the stream.

template<ACE_SYNCH_DECL >
ACE_Stream<ACE_SYNCH_USE>* ACE_Stream<>::linked_us_ [private]

Pointer to an adjoining linked stream.

template<ACE_SYNCH_DECL >
ACE_SYNCH_MUTEX_T ACE_Stream<>::lock_ [private]

Protect the stream against race conditions.

template<ACE_SYNCH_DECL >
ACE_SYNCH_CONDITION_T ACE_Stream<>::final_close_ [private]

Use to tell all threads waiting on the close that we are done.


The documentation for this class was generated from the following files:

Generated on Wed Apr 23 02:41:57 2008 for ACE by  doxygen 1.5.5