C++ Library Reference

Interface Changes to the iostream Library

This section describes the interface changes made to the iostream library to make it MT-safe.

New Classes

The following table lists the new classes added to the libC interfaces.


Example 4-7 New Classes

	stream_MT
	stream_locker
	unsafe_ios
	unsafe_istream
	unsafe_ostream
	unsafe_iostream
	unsafe_fstreambase
	unsafe_strstreambase

New Class Hierarchy

The following table lists the new class hierarchy added to the iostream interfaces.


Example 4-8 New Class Hierarchy

 
class streambuf : public stream_MT { ... };
class unsafe_ios { ... };
class ios : virtual public unsafe_ios, public stream_MT  { ... };
class unsafe_fstreambase : virtual public unsafe_ios { ... };
class fstreambase : virtual public ios, public unsafe_fstreambase 
  { ... };class unsafe_strstreambase : virtual public unsafe_ios
{ ... };
class strstreambase : virtual public ios, public unsafe_strstreambase
{ ... };
class unsafe_istream : virtual public unsafe_ios  { ... };
class unsafe_ostream : virtual public unsafe_ios  { ... };
class istream : virtual public ios, public unsafe_istream { ...
};
class ostream : virtual public ios, public unsafe_ostream { ...
};
class unsafe_iostream : public unsafe_istream, public unsafe_ostream
{ ... };

New Functions

The following table lists the new functions added to the iostream interfaces.


Example 4-9 New Functions

 class streambuf {
 public:
   int sgetc_unlocked();				
   void sgetn_unlocked(char *, int);
   int snextc_unlocked();
   int sbumpc_unlocked();
   void stossc_unlocked();
   int in_avail_unlocked();
   int sputbackc_unlocked(char);
   int sputc_unlocked(int);
   int sputn_unlocked(const char *, int);
   int out_waiting_unlocked();
 protected:
   char* base_unlocked();
   char* ebuf_unlocked();
   int blen_unlocked();
   char* pbase_unlocked();
   char* eback_unlocked();
   char* gptr_unlocked();
   char* egptr_unlocked();
   char* pptr_unlocked();
   void setp_unlocked(char*, char*);
   void setg_unlocked(char*, char*, char*);
   void pbump_unlocked(int);
   void gbump_unlocked(int);
   void setb_unlocked(char*, char*, int);
   int unbuffered_unlocked();
   char *epptr_unlocked();
   void unbuffered_unlocked(int);
   int allocate_unlocked(int);
 };

 class filebuf : public streambuf {
 public:
  int is_open_unlocked();
  filebuf* close_unlocked();
  filebuf* open_unlocked(const char*, int, int = 
    filebuf::openprot);
 
  filebuf* attach_unlocked(int);
 };

 class strstreambuf : public streambuf {
 public:
  int freeze_unlocked();
  char* str_unlocked();
 };

 
 unsafe_ostream& endl(unsafe_ostream&);
 unsafe_ostream& ends(unsafe_ostream&);
 unsafe_ostream& flush(unsafe_ostream&);
 unsafe_istream& ws(unsafe_istream&);
 unsafe_ios& dec(unsafe_ios&);
 unsafe_ios& hex(unsafe_ios&);
 unsafe_ios& oct(unsafe_ios&);

 char* dec_r (char* buf, int buflen, long num, int width)
 char* hex_r (char* buf, int buflen, long num, int width)
 char* oct_r (char* buf, int buflen, long num, int width) 
 char* chr_r (char* buf, int buflen, long chr, int width)
 char* str_r (char* buf, int buflen, const char* format, int width 
    = 0);
 char* form_r (char* buf, int buflen, const char* format, ...)