00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 #ifndef ACE_IOSTREAM_H
00015 #define ACE_IOSTREAM_H
00016 #include  "ace/pre.h"
00017 
00018 #include  "ace/ACE_export.h"
00019 
00020 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00021 # pragma once
00022 #endif 
00023 
00024 
00025 
00026 #include "ace/streams.h"
00027 
00028 
00029 
00030 
00031 
00032 
00033 #if defined (ACE_HAS_STANDARD_CPP_LIBRARY) && (ACE_HAS_STANDARD_CPP_LIBRARY == 1)
00034 #  if !defined (ACE_USES_OLD_IOSTREAMS) && !defined (ACE_LACKS_ACE_IOSTREAM)
00035 #    define ACE_LACKS_ACE_IOSTREAM
00036 #  endif 
00037 #endif 
00038 
00039 #if !defined (ACE_LACKS_ACE_IOSTREAM)
00040 
00041 #  if defined (ACE_HAS_STRING_CLASS)
00042 #    if defined (ACE_WIN32) && defined (_MSC_VER)
00043 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00044 typedef CString ACE_IOStream_String;
00045 ACE_END_VERSIONED_NAMESPACE_DECL
00046 #    else
00047 #      if !defined (ACE_HAS_STDCPP_STL_INCLUDES)
00048 #include  <String.h>
00049 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00050 typedef String ACE_IOStream_String;
00051 ACE_END_VERSIONED_NAMESPACE_DECL
00052 #      else
00053 #        include  <string>
00054 
00055 #        if defined(ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB)
00056 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00057 typedef std::string ACE_IOStream_String;
00058 ACE_END_VERSIONED_NAMESPACE_DECL
00059 #        else
00060 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00061 typedef string ACE_IOStream_String;
00062 ACE_END_VERSIONED_NAMESPACE_DECL
00063 #        endif 
00064 #      endif 
00065 #    endif 
00066 
00067 #    if defined (__DECCXX_VER)
00068 #      if __DECCXX_VER < 50700000
00069 #        include  <stl_macros>
00070 #      else
00071 #        include  <stdcomp>
00072 #      endif 
00073 #    endif 
00074 
00075 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00076 
00077 class ACE_Export ACE_Quoted_String : public ACE_IOStream_String
00078 {
00079 public:
00080   inline ACE_Quoted_String (void) { *this = ""; }
00081   inline ACE_Quoted_String (const char *c) { *this = ACE_IOStream_String (c); }
00082   inline ACE_Quoted_String (const ACE_IOStream_String &s) { *this = s; }
00083   inline ACE_Quoted_String &operator= (const ACE_IOStream_String& s)
00084   {
00085     return (ACE_Quoted_String &) ACE_IOStream_String::operator= (s);
00086   }
00087   inline ACE_Quoted_String &operator = (const char c) {
00088     return (ACE_Quoted_String &) ACE_IOStream_String::operator= (c);
00089   }
00090   inline ACE_Quoted_String &operator = (const char *c) {
00091     return (ACE_Quoted_String &) ACE_IOStream_String::operator= (c);
00092   }
00093   inline bool operator < (const ACE_Quoted_String &s) const {
00094     return *(ACE_IOStream_String *) this < (ACE_IOStream_String) s;
00095   }
00096 #    if defined (ACE_WIN32) && defined (_MSC_VER)
00097   inline int length (void) { return this->GetLength (); }
00098 #    endif 
00099 };
00100 
00101 ACE_END_VERSIONED_NAMESPACE_DECL
00102 
00103 #  endif 
00104 
00105 #  include "ace/Time_Value.h"
00106 #  include "ace/os_include/sys/os_types.h"
00107 
00108 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00109 
00110 
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 
00142 
00143 
00144 
00145 
00146 
00147 
00148 
00149 
00150 
00151 
00152 
00153 
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162 class ACE_Export ACE_Streambuf : public streambuf
00163 {
00164 public:
00165 
00166 
00167 
00168 
00169 
00170 
00171 
00172   virtual ~ACE_Streambuf (void);
00173 
00174 
00175   ACE_Time_Value *recv_timeout (ACE_Time_Value *tv = 0);
00176 
00177 
00178 
00179 
00180 
00181 
00182 
00183 
00184 
00185 
00186   char *reset_put_buffer (char *newBuffer = 0,
00187                           u_int _streambuf_size = 0,
00188                           u_int _pptr = 0 );
00189 
00190 
00191 
00192   u_int put_avail (void);
00193 
00194 
00195 
00196 
00197 
00198 
00199 
00200 
00201 
00202 
00203   char *reset_get_buffer (char *newBuffer = 0,
00204                           u_int _streambuf_size = 0,
00205                           u_int _gptr = 0,
00206                           u_int _egptr = 0);
00207 
00208 
00209 
00210   u_int get_waiting (void);
00211 
00212 
00213 
00214   u_int get_avail (void);
00215 
00216 
00217   u_int streambuf_size (void);
00218 
00219 
00220 
00221   u_char timeout (void);
00222 
00223 protected:
00224   ACE_Streambuf (u_int streambuf_size,
00225                  int io_mode);
00226 
00227 
00228 
00229   virtual int sync (void);
00230 
00231   
00232   virtual int underflow (void);
00233 
00234 
00235 
00236   virtual int overflow (int c = EOF);
00237 
00238 
00239 
00240   void reset_base (void);
00241 
00242 protected:
00243   
00244   char *eback_saved_;
00245   char *gptr_saved_;
00246   char *egptr_saved_;
00247   char *pbase_saved_;
00248   char *pptr_saved_;
00249   char *epptr_saved_;
00250 
00251   
00252 
00253   
00254   u_char cur_mode_;
00255   const u_char get_mode_;
00256   const u_char put_mode_;
00257 
00258 
00259 
00260   int mode_;
00261 
00262 
00263 
00264   const u_int streambuf_size_;
00265 
00266 
00267   u_char timeout_;
00268 
00269 
00270 
00271   ACE_Time_Value recv_timeout_value_;
00272   ACE_Time_Value *recv_timeout_;
00273 
00274 
00275 
00276 
00277 
00278 
00279 
00280 
00281 
00282 
00283   int syncin (void);
00284 
00285 
00286 
00287   int syncout (void);
00288 
00289 
00290 
00291   int flushbuf (void);
00292 
00293 
00294 
00295 
00296 
00297 
00298   int fillbuf (void);
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306   virtual int get_one_byte (void);
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314   virtual ssize_t send (char *buf,
00315                         ssize_t len) = 0;
00316   virtual ssize_t recv (char *buf,
00317                         ssize_t len,
00318                         ACE_Time_Value *tv = 0) = 0;
00319   virtual ssize_t recv (char *buf,
00320                         ssize_t len,
00321                         int flags,
00322                         ACE_Time_Value *tv = 0) = 0;
00323   virtual ssize_t recv_n (char *buf,
00324                           ssize_t len,
00325                           int flags = 0,
00326                           ACE_Time_Value *tv = 0) = 0;
00327 
00328   virtual ACE_HANDLE get_handle (void);
00329 
00330 #  if defined (ACE_HAS_STANDARD_CPP_LIBRARY) && (ACE_HAS_STANDARD_CPP_LIBRARY != 0) && !defined (ACE_USES_OLD_IOSTREAMS)
00331   char *base (void) const
00332     {
00333       return cur_mode_ == get_mode_ ? eback_saved_
00334         : cur_mode_ == put_mode_ ? pbase_saved_
00335         : 0;
00336     }
00337   char *ebuf (void) const
00338     {
00339       return cur_mode_ == 0 ? 0 : base () + streambuf_size_;
00340     }
00341 
00342   int blen (void) const
00343     {
00344       return streambuf_size_;
00345     }
00346 
00347   void setb (char* b, char* eb, int =0)
00348     {
00349       setbuf (b, (eb - b));
00350     }
00351 
00352   int out_waiting (void)
00353     {
00354       return pptr () - pbase ();
00355     }
00356 #  endif 
00357 };
00358 
00359 ACE_END_VERSIONED_NAMESPACE_DECL
00360 
00361 
00362 
00363 
00364 
00365 
00366 
00367 typedef ios& (*__manip_)(ios&);
00368 typedef istream& (*__imanip_)(istream&);
00369 typedef ostream& (*__omanip_)(ostream&);
00370 
00371 
00372 
00373 
00374 
00375 
00376 
00377 
00378 
00379 
00380 #define GET_SIG(MT,DT)          inline virtual MT& operator>> (DT v)
00381 #  if (defined (__SUNPRO_CC) && __SUNPRO_CC > 0x510)
00382 #define GET_CODE {                      \
00383         if (ipfx (0))                                   \
00384         {                                               \
00385                 (*((istream*)this)) >> (v);             \
00386         }                                               \
00387         isfx ();                                        \
00388         return *this;                                   \
00389         }
00390 #  else
00391 #define GET_CODE {                      \
00392         if (ipfx (0))                                   \
00393         {                                               \
00394                 iostream::operator>> (v);               \
00395         }                                               \
00396         isfx ();                                        \
00397         return *this;                                   \
00398         }
00399 #  endif
00400 #define GET_PROT(MT,DT,CODE)    GET_SIG(MT,DT)  CODE
00401 #define GET_FUNC(MT,DT)         GET_PROT(MT,DT,GET_CODE)
00402 
00403 
00404 
00405 
00406 
00407 #define PUT_SIG(MT,DT)          inline virtual MT& operator<< (DT v)
00408 #  if (defined (__SUNPRO_CC) && __SUNPRO_CC > 0x510)
00409 #define PUT_CODE {                      \
00410         if (opfx ())                                    \
00411         {                                               \
00412                 (*((ostream *) this)) << (v);            \
00413         }                                               \
00414         osfx ();                                        \
00415         return *this;                                   \
00416         }
00417 #  else
00418 #define PUT_CODE {                      \
00419         if (opfx ())                                    \
00420         {                                               \
00421                 iostream::operator<< (v);               \
00422         }                                               \
00423         osfx ();                                        \
00424         return *this;                                   \
00425         }
00426 #  endif
00427 #define PUT_PROT(MT,DT,CODE)    PUT_SIG(MT,DT)  CODE
00428 #define PUT_FUNC(MT,DT)         PUT_PROT(MT,DT,PUT_CODE)
00429 
00430 
00431 
00432 
00433 
00434 #  if defined (ACE_LACKS_CHAR_RIGHT_SHIFTS)
00435 #define GET_FUNC_SET0(MT,CODE,CODE2) \
00436         GET_PROT(MT,short &,CODE) \
00437         GET_PROT(MT,u_short &,CODE) \
00438         GET_PROT(MT,int &,CODE) \
00439         GET_PROT(MT,u_int &,CODE) \
00440         GET_PROT(MT,long &,CODE) \
00441         GET_PROT(MT,u_long &,CODE) \
00442         GET_PROT(MT,float &,CODE) \
00443         GET_PROT(MT,double &,CODE) \
00444         inline virtual MT& operator>>(__omanip_ func) CODE2 \
00445         inline virtual MT& operator>>(__manip_ func)  CODE2
00446 #  else
00447 #define GET_FUNC_SET0(MT,CODE,CODE2) \
00448         GET_PROT(MT,short &,CODE) \
00449         GET_PROT(MT,u_short &,CODE) \
00450         GET_PROT(MT,int &,CODE) \
00451         GET_PROT(MT,u_int &,CODE) \
00452         GET_PROT(MT,long &,CODE) \
00453         GET_PROT(MT,u_long &,CODE) \
00454         GET_PROT(MT,float &,CODE) \
00455         GET_PROT(MT,double &,CODE) \
00456         GET_PROT(MT,char &,CODE) \
00457         GET_PROT(MT,u_char &,CODE) \
00458         GET_PROT(MT,char *,CODE) \
00459         GET_PROT(MT,u_char *,CODE) \
00460         inline virtual MT& operator>>(__omanip_ func) CODE2 \
00461         inline virtual MT& operator>>(__manip_ func)  CODE2
00462 #  endif
00463 
00464 #define PUT_FUNC_SET0(MT,CODE,CODE2) \
00465         PUT_PROT(MT,short,CODE) \
00466         PUT_PROT(MT,u_short,CODE) \
00467         PUT_PROT(MT,int,CODE) \
00468         PUT_PROT(MT,u_int,CODE) \
00469         PUT_PROT(MT,long,CODE) \
00470         PUT_PROT(MT,u_long,CODE) \
00471         PUT_PROT(MT,float,CODE) \
00472         PUT_PROT(MT,double,CODE) \
00473         PUT_PROT(MT,char,CODE) \
00474         PUT_PROT(MT,u_char,CODE) \
00475         PUT_PROT(MT,const char *,CODE) \
00476         PUT_PROT(MT,u_char *,CODE) \
00477         PUT_PROT(MT,void *,CODE) \
00478         inline virtual MT& operator<<(__omanip_ func) CODE2 \
00479         inline virtual MT& operator<<(__manip_ func)  CODE2
00480 
00481 #  if defined (ACE_LACKS_SIGNED_CHAR)
00482   #define GET_FUNC_SET1(MT,CODE,CODE2) GET_FUNC_SET0(MT,CODE,CODE2)
00483   #define PUT_FUNC_SET1(MT,CODE,CODE2) PUT_FUNC_SET0(MT,CODE,CODE2)
00484 #  else
00485   #define GET_FUNC_SET1(MT,CODE,CODE2) \
00486           GET_PROT(MT,signed char &,CODE) \
00487           GET_PROT(MT,signed char *,CODE) \
00488           GET_FUNC_SET0(MT,CODE,CODE2)
00489 
00490   #define PUT_FUNC_SET1(MT,CODE,CODE2) \
00491           PUT_FUNC(MT,signed char) \
00492           PUT_FUNC(MT,const signed char *) \
00493           PUT_FUNC_SET0(MT,CODE,CODE2)
00494 #  endif 
00495 
00496 #define GET_MANIP_CODE  { if (ipfx ()) { (*func) (*this); } isfx (); return *this; }
00497 #define PUT_MANIP_CODE  { if (opfx ()) { (*func) (*this); } osfx (); return *this; }
00498 
00499 #define GET_FUNC_SET(MT)        GET_FUNC_SET1(MT,GET_CODE,GET_MANIP_CODE)
00500 #define PUT_FUNC_SET(MT)        PUT_FUNC_SET1(MT,PUT_CODE,PUT_MANIP_CODE)
00501 #define GETPUT_FUNC_SET(MT)     GET_FUNC_SET(MT) PUT_FUNC_SET(MT)
00502 
00503 #define GET_SIG_SET(MT)         GET_FUNC_SET1(MT,= 0;,= 0;)
00504 #define PUT_SIG_SET(MT)         PUT_FUNC_SET1(MT,= 0;,= 0;)
00505 #define GETPUT_SIG_SET(MT)      GET_SIG_SET(MT) PUT_SIG_SET(MT)
00506 
00507 
00508 #  include "ace/IOStream_T.h"
00509 #endif 
00510 
00511 #include  "ace/post.h"
00512 #endif