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