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_1>
class ACE_Stream
{
public:
friend class ACE_Stream_Iterator<ACE_SYNCH_2>;
enum{ M_DELETE = 1 };
ACE_Stream (
void *arg = 0,
ACE_Module<ACE_SYNCH_2> *head = 0,
ACE_Module<ACE_SYNCH_2> *tail = 0
);
int open (
void *arg,
ACE_Module<ACE_SYNCH_2> *head = 0,
ACE_Module<ACE_SYNCH_2> *tail = 0
);
int close (u_long flags = M_DELETE);
~ACE_Stream (void);
int push (ACE_Module<ACE_SYNCH_2> *mod);
int pop (u_long flags = M_DELETE);
int top (ACE_Module<ACE_SYNCH_2> *&mod);
int remove (const char *mod, u_long flags = M_DELETE);
ACE_Module<ACE_SYNCH_2> *head (void);
ACE_Module<ACE_SYNCH_2> *tail (void);
ACE_Module<ACE_SYNCH_2> *find (const char *mod);
int link (ACE_Stream<ACE_SYNCH_2> &);
int unlink (void);
int put (ACE_Message_Block *mb, ACE_Time_Value *timeout);
int get (ACE_Message_Block *&mb, ACE_Time_Value *timeout);
int control (ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds cmd, void *args);
int wait (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
private:
int unlink_i (void);
int link_i (ACE_Stream<ACE_SYNCH_2> &);
int push_module (
ACE_Module<ACE_SYNCH_2> *,
ACE_Module<ACE_SYNCH_2> * = 0,
ACE_Module<ACE_SYNCH_2> * = 0
);
ACE_Module<ACE_SYNCH_2> *stream_head_;
ACE_Module<ACE_SYNCH_2> *stream_tail_;
ACE_Stream<ACE_SYNCH_2> *linked_us_;
ACE_SYNCH_MUTEX lock_;
ACE_SYNCH_CONDITION final_close_;
};
DESCRIPTION
A Stream consists of a stack of ACE_Modules, each of which
contains two ACE_Tasks.
Initializatation and termination methods.
ACE_Stream (
void *arg = 0,
ACE_Module<ACE_SYNCH_2> *head = 0,
ACE_Module<ACE_SYNCH_2> *tail = 0
);
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.
int open (
void *arg,
ACE_Module<ACE_SYNCH_2> *head = 0,
ACE_Module<ACE_SYNCH_2> *tail = 0
);
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.
int close (u_long flags = M_DELETE);
Close down the stream and release all the resources.
~ACE_Stream (void);
Close down the stream and release all the resources.
ACE_Stream plumbing operations
int push (ACE_Module<ACE_SYNCH_2> *mod);
Add a new module mod right below the Stream head.
int pop (u_long flags = M_DELETE);
Remove the mod right below the Stream head and close it down.
int top (ACE_Module<ACE_SYNCH_2> *&mod);
Return the top module on the stream (right below the stream
head).
int remove (const char *mod, u_long flags = M_DELETE);
Remove the named module mod from the stream. This bypasses the
strict LIFO ordering of push() and pop().
ACE_Module<ACE_SYNCH_2> *head (void);
Return current stream head.
ACE_Module<ACE_SYNCH_2> *tail (void);
Return current stream tail.
ACE_Module<ACE_SYNCH_2> *find (const char *mod);
Find a particular ACE_Module.
int link (ACE_Stream<ACE_SYNCH_2> &);
Create a pipe between two Streams.
int unlink (void);
Remove a pipe formed between two Streams.
Blocking data transfer operations
int put (ACE_Message_Block *mb, ACE_Time_Value *timeout);
Send the message mb down the stream, starting at the Module
below the Stream head. Wait for upto timeout amount of time
for the operation to complete (or block forever if timeout ==
0).
int get (ACE_Message_Block *&mb, ACE_Time_Value *timeout);
Read the message mb that is stored in the the stream head.
Wait for upto timeout amount of time for the operation to
complete (or block forever if timeout == 0).
int control (ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds cmd, void *args);
Send control message down the stream.
int wait (void);
Synchronize with the final close of the stream.
void dump (void) const;
Dump the state of an object.
ACE_ALLOC_HOOK_DECLARE;
Declare the dynamic allocation hooks.
Synchronization objects used for thread-safe streams.
ACE_SYNCH_MUTEX lock_;
Protect the stream against race conditions.
ACE_SYNCH_CONDITION final_close_;
Use to tell all threads waiting on the close that we are done.
AUTHOR
Doug Schmidt
LIBRARY
ace