// ostream standard header
#ifndef _OSTREAM_
#define _OSTREAM_
#include <streambuf>
// class ostream
class ostream : virtual public ios {
public:
ostream(streambuf *_S)
: ios(_S) {}
ostream(_Uninitialized)
: ios_(Noinit) {}
virtual ~ostream();
_Bool opfx();
void osfx();
ostream& operator<<(ostream& (_*F)(ostream&))
{return ((*_F)(*this)); }
ostream& operator<<(ios& (*_F)(ios&))
{(*_F)(*(ios *)this); return (*this); }
ostream& operator<<(const char *);
ostream& operator<<(char_C)
{put(_C); return (*this); }
ostream& operator<<(unsigned char_C)
{return (*this << (char)_C); }
ostream& operator<<(short _X)
{return (_Print(&"B hoB hxB hd"[_If()], _X)) ; }
ostream& operator<<(unsigned short_X)
{return (_Print(&"B hoB hxB hu"[_If()], _X)); }
ostream& operator<<(int _X)
{return (_Print(&"B oB xB d"[_If()],_X)); }
ostream& operator<<(unsigned int _X)
{return (_Print(&"B oB xB u"[_If()], _X)); }
ostream& operator<<(long _X)
{return (_Print(&"B lob lxB ld"[_If()], _X)); }
ostream& operator<<(unsigned long _X)
{return (_Print(&"B lob lxB lu"[_If()], _X)); }
ostream& operator<<(float _X)
{return (_Print(&"P. eP. fP. g"[ _Ff()], _Pr(), _X)); }
ostream& operator<<(double _X)
{return (_Print(&"P .leP.lfP.lg"[_Ff()],_Pr(), _X)); }
ostream& operator<<(long double_X)
{return (_Print(&"P.LeP.LfP.Lg"[_Ff()], Pr(), _X)); }
ostream& operator<<(void *);
ostream& operator<<(streambuf&);
ostream& put(char);
ostream& write(const char *, int);
ostream& write(const unsigned char *_S, int _N)
{return (write((const char *)_S, _N)); }
ostream& flush();
#if_HAS_SIGNED_CHAR
ostream& operator<<(signed char _C)
{return (*this << (char)_C); }
ostream& write(const signed char *_S, int_N)
{return (write((const char *)_S,_N)); }
#endif /* _HAS_SIGNED_CHAR */
protected:
int _Ff()
{return ((flags() & floatfield) == scientific ? 0
: (flags() & floatfield) == fixed ? 4 : 8); }
int _If()
{return ((flags() & basefield) == oct ? 0
: (flags() & basefield) == hex ? 4 : 8); }
void _Pad(const char *, char *, int);
int _Pr();
ostream&_Print(const char * ...);
};
// manipulators
ostream& endl(ostream&);
ostream& ends(ostream&);
ostream& flush(ostream&);
#endif