summaryrefslogtreecommitdiff
path: root/ace/IOStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/IOStream.h')
-rw-r--r--ace/IOStream.h281
1 files changed, 19 insertions, 262 deletions
diff --git a/ace/IOStream.h b/ace/IOStream.h
index 7603553178d..1a9ac2886a5 100644
--- a/ace/IOStream.h
+++ b/ace/IOStream.h
@@ -7,7 +7,7 @@
// ace
//
// = FILENAME
-// iostream.h
+// IOStream.h
//
// = AUTHOR
// James CE Johnson <jcej@lads.com>
@@ -20,7 +20,7 @@
/*
Changes 4/5/97
- ACE_Streambuf_T
+ ACE_Streambuf
New public functions added
@@ -62,26 +62,27 @@
Constructor changed
Initialization of the get/put buffers was moved here from
- the derived class/template ACE_Streambuf<...>
+ the derived class/template ACE_Streambuf_T<...>
At the same time, the new functions reset_get/put_buffer
are now used instead of the previous monolithic function.
- ACE_Streambuf<...>
+ ACE_Streambuf_T<...>
Constructor changed:
Initialization of the get/put buffers has been moved to the
- baseclass ACE_Streambuf_T. This will reduce template bloat
+ baseclass ACE_Streambuf. This will reduce template bloat
as well as giving us more functionality as described above.
*/
#if !defined (ACE_IOSTREAM_H)
#define ACE_IOSTREAM_H
+#if !defined (ACE_LACKS_ACE_IOSTREAM)
+
#include "ace/INET_Addr.h"
#include "ace/Handle_Set.h"
-#include <iomanip.h>
#if defined (ACE_HAS_STRING_CLASS)
#if defined (ACE_WIN32)
@@ -104,15 +105,15 @@ public:
inline QuotedString (void) { *this = ""; }
inline QuotedString (const char * c) { *this = ACE_IOStream_String (c); }
inline QuotedString (const ACE_IOStream_String& s) { *this = s; }
- inline QuotedString& operator= (const ACE_IOStream_String& s)
+ inline QuotedString& operator= (const ACE_IOStream_String& s)
{
return (QuotedString&) ACE_IOStream_String::operator= (s);
}
inline QuotedString & operator = (const char c) {
- return (QuotedString&) ACE_IOStream_String::operator= (c);
+ return (QuotedString&) ACE_IOStream_String::operator= (c);
}
- inline QuotedString & operator = (const char* c) {
- return (QuotedString&) ACE_IOStream_String::operator= (c);
+ inline QuotedString & operator = (const char* c) {
+ return (QuotedString&) ACE_IOStream_String::operator= (c);
}
inline bool operator < (const QuotedString& s) const {
return *(ACE_IOStream_String *) this < (ACE_IOStream_String) s;
@@ -126,7 +127,7 @@ public:
///////////////////////////////////////////////////////////////////////////
-class ACE_Export ACE_Streambuf_T : public streambuf
+class ACE_Export ACE_Streambuf : public streambuf
// = TITLE
// Create your custom streambuf by providing and ACE_*_Stream
// object to this template. I have tested it with
@@ -190,7 +191,7 @@ class ACE_Export ACE_Streambuf_T : public streambuf
{
public:
- virtual ~ACE_Streambuf_T (void);
+ virtual ~ACE_Streambuf (void);
// If the default allocation strategey were used the common buffer
// would be deleted when the object destructs. Since we are
// providing separate read/write buffers, it is up to us to manage
@@ -232,7 +233,7 @@ public:
// Query the streambuf for the size of it's buffers.
protected:
- ACE_Streambuf_T (u_int streambuf_size, int io_mode);
+ ACE_Streambuf (u_int streambuf_size, int io_mode);
virtual int sync (void);
// Sync both input and output. See syncin/syncout below for
@@ -322,47 +323,6 @@ protected:
///////////////////////////////////////////////////////////////////////////
-template <class STREAM>
-class ACE_Streambuf : public ACE_Streambuf_T
-{
-public:
- ACE_Streambuf (STREAM * peer, u_int streambuf_size = ACE_STREAMBUF_SIZE, int io_mode = ios::in | ios::out);
- // We will be given a STREAM by the iostream object which creates
- // us. See the ACE_IOStream template for how that works. Like
- // other streambuf objects, we can be input-only, output-only or
- // both.
-
- virtual ssize_t send ( char * buf, ssize_t len )
- {
- return peer_->send_n(buf,len);
- }
- virtual ssize_t recv ( char * buf, ssize_t len, ACE_Time_Value * tv = NULL )
- {
- return this->recv( buf, len, 0, tv );
- }
- virtual ssize_t recv ( char * buf, ssize_t len, int flags, ACE_Time_Value * tv = NULL )
- {
- ssize_t rval = peer_->recv(buf,len,flags,tv);
- return rval;
- }
- virtual ssize_t recv_n( char * buf, ssize_t len, int flags = 0, ACE_Time_Value * tv = NULL )
- {
- ssize_t rval = peer_->recv_n(buf,len,flags,tv);
- return rval;
- }
-
-protected:
- STREAM * peer_;
- // This will be our ACE_SOCK_Stream or similar object.
-
- virtual ACE_HANDLE get_handle(void)
- {
- return peer_ ? peer_->get_handle() : 0 ;
- }
-};
-
-///////////////////////////////////////////////////////////////////////////
-
// These typedefs are provided by G++ (on some systems?) without the
// trailing '_'. Since we can't count on 'em, I've defined them to
// what GNU wants here.
@@ -442,8 +402,8 @@ typedef ostream& (*__omanip_)(ostream&);
PUT_PROT(MT,char,CODE) \
PUT_PROT(MT,u_char,CODE) \
PUT_PROT(MT,const char *,CODE) \
- PUT_PROT(MT,const u_char *,CODE) \
- PUT_PROT(MT,const void *,CODE) \
+ PUT_PROT(MT,u_char *,CODE) \
+ PUT_PROT(MT,void *,CODE) \
inline virtual MT& operator<<(__omanip_ func) CODE2 \
inline virtual MT& operator<<(__manip_ func) CODE2
@@ -478,212 +438,9 @@ typedef ostream& (*__omanip_)(ostream&);
///////////////////////////////////////////////////////////////////////////
-template <class STREAM>
-class ACE_IOStream : public iostream, public STREAM
- // = TITLE
- // A template adapter for creating an iostream-like object using
- // an ACE IPC Stream for the actual I/O. Iostreams use an
- // underlying streambuf object for the IO interface. The
- // iostream class and derivatives provide you with a host of
- // convenient operators that access the streambuf.
- //
- // = DESCRIPTION
- // We inherit all characteristics of iostream and your <STREAM>
- // class. When you create a new class from this template, you
- // can use it anywhere you would have used your original
- // <STREAM> class.
- //
- // To create an iostream for your favorite ACE IPC class (e.g.,
- // <ACE_SOCK_Stream>), feed that class to this template's
- // <STREAM> parameter, e.g.,
- //
- // typedef ACE_Svc_Handler<ACE_SOCK_iostream,
- // ACE_INET_Addr, ACE_NULL_SYNCH>
- // Service_Handler;
- //
- // Because the operators in the iostream class are not virtual,
- // you cannot easily provide overloads in your custom
- // ACE_IOStream classes. To make these things work correctly,
- // you need to overload ALL operators of the ACE_IOStream you
- // create. I've attempted to do that here to make things easier
- // for you but there are no guarantees.
- //
- // In the iostream.cpp file is an example of why it is necessary
- // to overload all of the get/put operators when you want to
- // customize only one or two.
-{
-public:
- ACE_IOStream (STREAM & stream, u_int streambuf_size = ACE_STREAMBUF_SIZE);
- ACE_IOStream (u_int streambuf_size = ACE_STREAMBUF_SIZE);
- // The default constructor. This will initiailze your STREAM and
- // then setup the iostream baseclass to use a custom streambuf based
- // on STREAM.
-
- virtual ~ACE_IOStream (void);
- // We have to get rid of the streambuf_ ourselves since we gave it
- // to iostream();
-
- virtual int close (void);
- // The only ambituity in the multiple inheritance is the close()
- // function.
-
-#if defined (ACE_HAS_STRING_CLASS)
- virtual ACE_IOStream<STREAM> & operator>>(ACE_IOStream_String & v);
- // A simple string operator. The base iostream has 'em for char*
- // but that isn't always the best thing for a String. If we don't
- // provide our own here, we may not get what we want.
-
- virtual ACE_IOStream<STREAM> & operator<<(ACE_IOStream_String & v);
- // The converse of the String put operator.
+// Include the templates here.
+#include "ace/IOStream_T.h"
- virtual ACE_IOStream<STREAM> & operator>>(QuotedString &v);
- // A more clever operator that handles quoted strings so that we
- // can get strings containing whitespace!
-
- virtual ACE_IOStream<STREAM> & operator<<(QuotedString &v);
- // The converse of the QuotedString put operator.
-#endif /* ACE_HAS_STRING_CLASS */
-
- // = Using the macros to provide get/set operators.
-#if !defined (ACE_LACKS_IOSTREAM_SETGET)
- GETPUT_FUNC_SET (ACE_IOStream<STREAM>)
-#endif /* ACE_LACKS_IOSTREAM_SETSET */
-
-#if defined (ACE_LACKS_IOSTREAM_FX)
- virtual int ipfx (int need = 0) { return good(); }
- virtual int ipfx0(void) { return good(); } // Optimized ipfx(0)
- virtual int ipfx1(void) { return good(); } // Optimized ipfx(1)
- virtual void isfx (void) { return; }
- virtual int opfx (void) { return good(); }
- virtual void osfx (void) { put(' '); return; }
-#else
-#if defined (__GNUC__)
- virtual int ipfx0(void) { return(iostream::ipfx0()); } // Optimized ipfx(0)
- virtual int ipfx1(void) { return(iostream::ipfx1()); } // Optimized ipfx(1)
-#else
- virtual int ipfx0(void) { return(iostream::ipfx(0)); }
- virtual int ipfx1(void) { return(iostream::ipfx(1)); }
-#endif
- virtual int ipfx (int need = 0) { return(iostream::ipfx(need)); }
- virtual void isfx (void) { iostream::isfx(); return; }
- virtual int opfx (void) { return(iostream::opfx()); }
- virtual void osfx (void) { iostream::osfx(); return; }
-#endif /* ACE_LACKS_IOSTREAM_FX */
-
- ACE_IOStream<STREAM> & operator>>(ACE_Time_Value *&tv);
- // Allow the programmer to provide a timeout for read operations.
- // Give it a pointer to NULL to block forever.
-
-protected:
-
- ACE_Streambuf<STREAM> *streambuf_;
- // This is where all of the action takes place. The
- // streambuf_ is the interface to the underlying STREAM.
-
-private:
- // We move these into the private section so that they cannot
- // be used by the application programmer. This is necessary
- // because streambuf_ will be buffering IO on the STREAM
- // object. If these functions were used in your program,
- // there is a danger of getting the datastream out of sync.
- ssize_t send (...);
- ssize_t recv (...);
- ssize_t send_n (...);
- ssize_t recv_n (...);
-};
-
-///////////////////////////////////////////////////////////////////////////
-
-template <class STREAM>
-class ACE_SOCK_Dgram_SC : public STREAM
-// Datagrams don't have the notion of a "peer". Each send and receive
-// on a datagram can go to a different peer if you want. If you're
-// using datagrams for stream activity, you probably want 'em all to
-// go to (and come from) the same place. That's what this class is
-// for. BTW: 'Dgram_SC' is short for 'Datagram-Self-Contained'.
-// Here, we keep an address object so that we can remember who last
-// sent us data. When we write back, we're then able to write back to
-// that same address.
-{
-protected:
- ACE_INET_Addr peer_;
-
-public:
- ACE_SOCK_Dgram_SC (void)
- {
- }
-
- ACE_SOCK_Dgram_SC (STREAM &source, ACE_INET_Addr &dest)
- : STREAM (source), peer_ (dest)
- {
- }
-
- inline ssize_t send_n (char *buf, ssize_t len)
- {
- return STREAM::send (buf, len, peer_);
- }
-
- inline ssize_t recv (char * buf, ssize_t len, ACE_Time_Value * tv = NULL)
- {
- return recv (buf, len, 0, tv);
- }
-
- inline ssize_t recv (char * buf, ssize_t len, int flags, ACE_Time_Value * tv = NULL)
- {
- if (tv != 0)
- {
- ACE_HANDLE handle = this->get_handle ();
- ACE_Handle_Set handle_set;
-
- handle_set.set_bit (handle);
-
- switch (ACE_OS::select (int (handle) + 1,
- (fd_set *) handle_set, // read_fds.
- (fd_set *) 0, // write_fds.
- (fd_set *) 0, // exception_fds.
- tv))
- {
- case 0:
- errno = ETIME;
- case -1:
- return -1;
- default:
- ; // Do the 'recv' below
- }
- }
-
- int rval = STREAM::recv (buf, len, peer_, flags);
-#ifdef WIN32
- if (rval == SOCKET_ERROR)
- if (WSAGetLastError() == WSAEMSGSIZE)
- if (flags & MSG_PEEK)
- rval = len;
-#endif
-
- return rval < len ? rval : len;
- }
- inline ssize_t recv_n (char * buf,
- ssize_t len, int flags = 0,
- ACE_Time_Value * tv = NULL)
- {
- int rval = this->recv (buf, len, flags, tv);
- return rval;
- }
-
- inline int get_remote_addr (ACE_INET_Addr &addr) const
- {
- addr = peer_;
- return 0;
- }
-
-};
-
-#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
-# if ! defined( ACE_IOSTREAM_C )
-# define ACE_IOSTREAM_BUILDING_TEMPLATE
-# endif
-# include "ace/IOStream.cpp"
-#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+#endif /* !ACE_LACKS_ACE_IOSTREAM */
#endif /* ACE_IOSTREAM_H */
-