⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iostream.cpp

📁 vxworks源码源码解读是学习vxworks的最佳途径
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    char fill_char = stream.fill();    if (padding > 0	&& pad_kind != (ios::fmtflags)ios::left	&& pad_kind != (ios::fmtflags)ios::internal) // Default (right) adjust.	if (_IO_padn(sbuf, fill_char, padding) < padding)	  goto failed;    if (sign < 0 || show_pos)      {	char ch = sign < 0 ? '-' : '+';	if (sbuf->sputc(ch) < 0)	  goto failed;      }    if (show_base_len)	if (_IO_sputn(sbuf, show_base, show_base_len) <= 0)	  goto failed;    if (pad_kind == (ios::fmtflags)ios::internal && padding > 0)      if (_IO_padn(sbuf, fill_char, padding) < padding)	goto failed;    if (_IO_sputn (sbuf, buf_ptr, buf_len) != buf_len)      goto failed;    if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment      if (_IO_padn(sbuf, fill_char, padding) < padding)	goto failed;    stream.osfx();    return;  failed:    stream.set(ios::badbit);    stream.osfx();}ostream& ostream::operator<<(int n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	int sign = 1;	unsigned int abs_n = (unsigned)n;	if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)	    abs_n = -((unsigned)n), sign = -1;	write_int(*this, abs_n, sign);	_IO_cleanup_region_end (0);    }    return *this;}ostream& ostream::operator<<(unsigned int n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	write_int(*this, n, 0);	_IO_cleanup_region_end (0);    }    return *this;}ostream& ostream::operator<<(long n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	int sign = 1;	unsigned long abs_n = (unsigned long)n;	if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)	    abs_n = -((unsigned long)n), sign = -1;	write_int(*this, abs_n, sign);	_IO_cleanup_region_end (0);    }    return *this;}ostream& ostream::operator<<(unsigned long n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	write_int(*this, n, 0);	_IO_cleanup_region_end (0);    }    return *this;}#if defined(__GNUC__) && !defined(__STRICT_ANSI__)ostream& ostream::operator<<(long long n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	int sign = 1;	unsigned long long abs_n = (unsigned long long)n;	if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)	    abs_n = -((unsigned long long)n), sign = -1;	write_int(*this, abs_n, sign);	_IO_cleanup_region_end (0);    }    return *this;}ostream& ostream::operator<<(unsigned long long n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	write_int(*this, n, 0);	_IO_cleanup_region_end (0);    }    return *this;}#endif /*__GNUC__*/ostream& ostream::operator<<(double n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	// Uses __cvt_double (renamed from static cvt), in Chris Torek's	// stdio implementation.  The setup code uses the same logic	// as in __vsbprintf.C (also based on Torek's code).	int format_char;	if ((flags() & ios::floatfield) == ios::fixed)	    format_char = 'f';	else if ((flags() & ios::floatfield) == ios::scientific)	    format_char = flags() & ios::uppercase ? 'E' : 'e';	else	    format_char = flags() & ios::uppercase ? 'G' : 'g';	int prec = precision();	if (prec <= 0 && !(flags() & ios::fixed))	  prec = 6; /* default */	// Do actual conversion.#if _G_HAVE_PRINTF_FP	{	  struct printf_info info = { prec: prec,				      width: width(0),				      spec: format_char,				      is_long_double: 0,				      is_short: 0,				      is_long: 0,				      alt: (flags() & ios::showpoint) != 0,				      space: 0,				      left: (flags() & ios::left) != 0,				      showsign: (flags() & ios::showpos) != 0,				      group: 0,				      pad: fill()#if defined __GLIBC__ && __GLIBC__ >= 2				      , extra: 0#endif	  };	  const void *ptr = (const void *) &n;	  if (__printf_fp (rdbuf(), &info, &ptr) < 0)	    set(ios::badbit|ios::failbit);	}#elif defined  _IO_USE_DTOA	if (_IO_outfloat(n, rdbuf(), format_char, width(0),			 prec, flags(),			 flags() & ios::showpos ? '+' : 0,			 fill()) < 0)	    set(ios::badbit|ios::failbit); // ??#else	int fpprec = 0; // 'Extra' (suppressed) floating precision.	if (prec > MAXFRACT) {	    if (flags() & (ios::fixed|ios::scientific) & ios::showpos)		fpprec = prec - MAXFRACT;	    prec = MAXFRACT;	}	int negative;	char buf[BUF];	int sign = '\0';	char *cp = buf;	*cp = 0;	int size = __cvt_double(n, prec,				flags() & ios::showpoint ? 0x80 : 0,				&negative,				format_char, cp, buf + sizeof(buf));	if (negative) sign = '-';	else if (flags() & ios::showpos) sign = '+';	if (*cp == 0)	    cp++;	// Calculate padding.	int fieldsize = size + fpprec;	if (sign) fieldsize++;	int padding = 0;	int w = width(0);	if (fieldsize < w)	    padding = w - fieldsize;	// Do actual output.	register streambuf* sbuf = rdbuf();	register i;	char fill_char = fill();	ios::fmtflags pad_kind =	    flags() & (ios::left|ios::right|ios::internal);	if (pad_kind != (ios::fmtflags)ios::left // Default (right) adjust.	    && pad_kind != (ios::fmtflags)ios::internal)	    for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);	if (sign)	    sbuf->sputc(sign);	if (pad_kind == (ios::fmtflags)ios::internal)	    for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);	// Emit the actual concented field, followed by extra zeros.	_IO_sputn (sbuf, cp, size);	for (i = fpprec; --i >= 0; ) sbuf->sputc('0');	if (pad_kind == (ios::fmtflags)ios::left) // Left adjustment	    for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);#endif	osfx();	_IO_cleanup_region_end (0);    }    return *this;}/* Begin VxWorks specific */#ifndef _NO_LONG_DOUBLE_#if _G_HAVE_LONG_DOUBLE_IOostream& ostream::operator<<(long double n){  if (opfx())    {      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				_strbuf);      int format_char;      if ((flags() & ios::floatfield) == ios::fixed)	format_char = 'f';      else if ((flags() & ios::floatfield) == ios::scientific)	format_char = flags() & ios::uppercase ? 'E' : 'e';      else	format_char = flags() & ios::uppercase ? 'G' : 'g';      int prec = precision();      if (prec <= 0 && !(flags() & ios::fixed))	prec = 6; /* default */#if _G_HAVE_PRINTF_FP      // Do actual conversion.      struct printf_info info = { prec: prec,				  width: width(0),				  spec: format_char,				  is_long_double: 1,				  is_short: 0,				  is_long: 0,				  alt: (flags() & ios::showpoint) != 0,				  space: 0,				  left: (flags() & ios::left) != 0,				  showsign: (flags() & ios::showpos) != 0,				  group: 0,				  pad: fill()#if defined __GLIBC__ && __GLIBC__ >= 2				  , extra: 0#endif      };      const void *ptr = (const void *) &n;      if (__printf_fp (rdbuf(), &info, &ptr) < 0)	set (ios::badbit|ios::failbit);#else# error "long double I/O using dtoa or cvt_double is not implemented"#endif      osfx();      _IO_cleanup_region_end (0);    }  return *this;}#endif#endif/* End VxWorks specific */ostream& ostream::operator<<(const char *s){  if (opfx())    {      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				_strbuf);      if (s == NULL)	s = "(null)";      int len = strlen(s);      int w = width(0);// FIXME: Should we: if (w && len>w) len = w;      char fill_char = fill();      register streambuf *sbuf = rdbuf();      register int padding = w > len ? w - len : 0;      if (!(flags() & ios::left) && padding > 0) // Default adjustment.	if (_IO_padn(sbuf, fill_char, padding) != padding)	  {	    set(ios::badbit);	    goto failed;	  }      if (_IO_sputn (sbuf, s, len) != len)	{	  set(ios::badbit);	  goto failed;	}      if (flags() & ios::left && padding > 0) // Left adjustment.	if (_IO_padn(sbuf, fill_char, padding) != padding)	  set(ios::badbit);      osfx();     failed:      _IO_cleanup_region_end (0);    }  return *this;}#if 0ostream& ostream::operator<<(const void *p){ Is in osform.cc, to avoid pulling in all of _IO_vfprintf by this file. */ }#endifostream& ostream::operator<<(register streambuf* sbuf){  if (opfx())    {      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				_strbuf);      char buffer[_IO_BUFSIZ];      register streambuf* outbuf = _strbuf;      for (;;)	{	  _IO_size_t count = _IO_sgetn(sbuf, buffer, _IO_BUFSIZ);	  if (count <= 0)	    break;	  if (_IO_sputn(outbuf, buffer, count) != count)	    {	      set(ios::badbit);	      break;	    }	}      osfx();      _IO_cleanup_region_end (0);    }  return *this;}ostream::ostream(streambuf* sb, ostream* tied){  init (sb, tied);}ostream& ostream::seekp(streampos pos){    pos = _strbuf->pubseekpos(pos, ios::out);    if (pos == streampos(EOF))	set(ios::badbit);    return *this;}ostream& ostream::seekp(streamoff off, _seek_dir dir){  streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_OUTPUT);  if (pos == streampos(EOF))    set(ios::badbit);  return *this;}streampos ostream::tellp(){#if 1    streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_OUTPUT);#else    streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::out);#endif    if (pos == streampos(EOF))	set(ios::badbit);    return pos;}ostream& ostream::flush(){    if (_strbuf->sync())	set(ios::badbit);    return *this;}ostream& flush(ostream& outs){  return outs.flush();}istream& ws(istream& ins){    if (ins.ipfx1()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  ins._strbuf);	int ch = skip_ws(ins._strbuf);	if (ch == EOF)	    ins.set(ios::eofbit);	else	    ins._strbuf->sputbackc(ch);	ins.isfx();	_IO_cleanup_region_end (0);    }    return ins;}// Skip white-space.  Return 0 on failure (EOF), or 1 on success.// Differs from ws() manipulator in that failbit is set on EOF.// Called by ipfx() and ipfx0() if needed.int istream::_skip_ws(){    int ch = skip_ws(_strbuf);    if (ch == EOF) {	set(ios::eofbit|ios::failbit);	return 0;    }    else {	_strbuf->sputbackc(ch);	return 1;    }}ostream& ends(ostream& outs){    outs.put('\0');    return outs;}ostream& endl(ostream& outs){    return flush(outs.put('\n'));}istream& lock(istream& ins){  _IO_flockfile (ins._strbuf);  return ins;}istream& unlock(istream& ins){  _IO_funlockfile (ins._strbuf);  return ins;}ostream& lock(ostream& outs){  _IO_flockfile (outs._strbuf);  return outs;}ostream& unlock(ostream& outs){  _IO_funlockfile (outs._strbuf);  return outs;}ostream& ostream::write(const char *s, streamsize n){    if (opfx()) {	_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,				  _strbuf);	if (_IO_sputn(_strbuf, s, n) != n)	    set(ios::failbit);	osfx();	_IO_cleanup_region_end (0);    }    return *this;}void ostream::do_osfx(){    if (flags() & ios::unitbuf)	flush();    if (flags() & ios::stdio) {	fflush(stdout);	fflush(stderr);    }}iostream::iostream(streambuf* sb, ostream* tied){  init (sb, tied);}// NOTE: extension for compatibility with old libg++.// Not really compatible with fistream::close().#ifdef _STREAM_COMPATvoid ios::close(){  if (_strbuf->_flags & _IO_IS_FILEBUF)    ((struct filebuf*)rdbuf())->close();  else if (_strbuf != NULL)    rdbuf()->sync();  _strbuf = NULL;  _state = badbit;}int istream::skip(int i){    int old = (_flags & ios::skipws) != 0;    if (i)	_flags |= ios::skipws;    else	_flags &= ~ios::skipws;    return old;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -