ACE_Stream< ACE_SYNCH_DECL > 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< ACE_SYNCH_DECL >:

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

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_SYNCH_DECL >::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_SYNCH_DECL >::~ACE_Stream ( void   )  [inline, virtual]

Close down the stream and release all the resources.


Member Function Documentation

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

Close down the stream and release all the resources.

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

Send control message down the stream.

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

Dump the state of an object.

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

Find a particular ACE_Module.

template<ACE_SYNCH_DECL >
int ACE_Stream< ACE_SYNCH_DECL >::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 >
ACE_Module< ACE_SYNCH_USE > * ACE_Stream< ACE_SYNCH_DECL >::head ( void   )  [inline, virtual]

Return current stream head.

template<ACE_SYNCH_DECL >
int ACE_Stream< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::link ( ACE_Stream< ACE_SYNCH_USE > &  us  )  [inline, virtual]

Create a pipe between two Streams.

template<ACE_SYNCH_DECL >
int ACE_Stream< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::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.

template<ACE_SYNCH_DECL >
int ACE_Stream< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::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 >
int ACE_Stream< ACE_SYNCH_DECL >::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 >
ACE_Module< ACE_SYNCH_USE > * ACE_Stream< ACE_SYNCH_DECL >::tail ( void   )  [inline, virtual]

Return current stream tail.

template<ACE_SYNCH_DECL >
int ACE_Stream< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::unlink ( void   )  [inline, virtual]

Remove a pipe formed between two Streams.

template<ACE_SYNCH_DECL >
int ACE_Stream< ACE_SYNCH_DECL >::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< ACE_SYNCH_DECL >::wait ( void   )  [inline, virtual]

Synchronize with the final close of 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_SYNCH_DECL >::ACE_ALLOC_HOOK_DECLARE

Declare the dynamic allocation hooks.

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

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

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

Pointer to an adjoining linked stream.

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

Protect the stream against race conditions.

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

Pointer to the head of the stream.

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

Pointer to the tail of the stream.


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

Generated on Mon Jul 13 16:13:16 2009 for ACE by  doxygen 1.5.8