Exemple #1
0
ostream& ostream::operator<<(short n)
{
    char obuffer[8];     // assumes max int is 65535
    char fmt[4] = "%hd";
    char leader[4] = "\0\0";
    if (opfx()) 
	{
        if (n)
		{
            if (x_flags & (hex|oct))
			{
                if (x_flags & hex)
				{
                    if (x_flags & uppercase)
                        fmt[2] = 'X';
                    else
                        fmt[2] = 'x';
                    leader[1] = fmt[2];   // 0x or 0X  (or \0X)
				}
                else
                    fmt[2] = 'o';
                if (x_flags & showbase)
                    leader[0] = '0';
			}
            else if ((n>0) && (x_flags & showpos))
			{
                leader[0] = '+';
			}
		}
        sprintf(obuffer,fmt,n);
        writepad(leader,obuffer);
        osfx();
    }
    return *this;
}
Exemple #2
0
ostream& ostream::operator<<(unsigned int n)
{
    char obuffer[12];
    char fmt[4] = "%u";
    char leader[4] = "\0\0";
    if (opfx()) 
	{
        if (n)
		{
            if (x_flags & (hex|oct))
			{
                if (x_flags & hex)
				{
                    if (x_flags & uppercase)
                        fmt[1] = 'X';
                    else
                        fmt[1] = 'x';
                    leader[1] = fmt[1];   // 0x or 0X  (or \0X)
				}
                else
                    fmt[1] = 'o';
                if (x_flags & showbase)
                    leader[0] = '0';
			}
            else if (x_flags & showpos)
			{
                leader[0] = '+';
			}
		}
        sprintf(obuffer,fmt,n);
        writepad(leader,obuffer);
        osfx();
    }
    return *this;
}
ostream& ostream::operator<<(long double f)
{
_WINSTATIC char obuffer[28];
_WINSTATIC char fmt[12];
_WINSTATIC char leader[4];
    char * optr = obuffer;
    int x = 0;
    unsigned int curprecision = __min((unsigned)x_precision,LDBL_DIG);
    if (opfx()) {
        if (x_flags & ios::showpos)
            leader[x++] = '+';
        if (x_flags & ios::showpoint)
            leader[x++] = '#';  // show decimal and trailing zeros
        leader[x] = '\0';
        x = sprintf(fmt,"%%%s.%.0uLg",leader,curprecision) - 1;
        if ((x_flags & ios::floatfield)==ios::fixed)
            fmt[x] = 'f';
        else
            {
            if ((x_flags & ios::floatfield)==ios::scientific)
                fmt[x] = 'e';
            if (x_flags & uppercase)
                fmt[x] = (char)toupper(fmt[x]);
            }

        sprintf(optr,fmt,f);
        x = 0;
        if (*optr=='+' || *optr=='-')
            leader[x++] = *(optr++);
        leader[x] = '\0';
        writepad(leader,optr);
        osfx();
        }
    return *this;
}
void ostream::outstr(const char *d, const char *p)
{
    if( opfx() )
        {
        int plen = p ? strlen(p) : 0;
        int dlen = d ? strlen(d) : 0;
        int pad = width(0) - plen - dlen;

        // pad on left (right-adjust) if needed -- the default case
        if( ! (x_flags & (ios::left | ios::internal)) )
            {
            while( --pad >= 0 )
                {
                if( bp->sputc(x_fill) == EOF )
                    {
                    setstate(ios::badbit);
                    break;
                    }
                }
            }

        // output the prefix
        if( ! fail()  &&  plen )
            if( bp->sputn(p, plen) != plen )
                setstate(ios::badbit);

        // internal padding if needed
        if( ! fail()  &&  (x_flags & ios::internal) )
            {
            while( --pad >= 0 )
                {
                if( bp->sputc(x_fill) == EOF )
                    {
                    setstate(ios::badbit);
                    break;
                    }
                }
            }

        // output the data
        if( ! fail()  &&  dlen )
            if( bp->sputn(d, dlen) != dlen )
                setstate(ios::badbit);

        // pad on right (left-adjust) if needed
        if( ! fail()  &&  (x_flags & ios::left) )
            {
            while( --pad >= 0 )
                {
                if( bp->sputc(x_fill) == EOF )
                    {
                    setstate(ios::badbit);
                    break;
                    }
                }
            }
        }
    osfx();
}
Exemple #5
0
ostream& ostream::operator<<(const char * s)
{
    if (opfx()) 
	{
        writepad("",s);
        osfx();
    }
    return *this;
}
Exemple #6
0
ostream& ostream::put(unsigned char c)
{
    if (opfx())
	{
        if (bp->sputc((int)c)==EOF)
            state |= (failbit|badbit);
        osfx();
	}
    return(*this);
}
 ostream &ostream::operator << ( char const *s ) {
   if( s != NULL ) {
       __lock_it( __i_lock );
       if( opfx() ) {
           setstate( __WATCOM_ios::writeitem( *this, s, ::strlen( s ), 0 ) );
           osfx();
       }
   }
   return( *this );
 }
Exemple #8
0
ostream& ostream::write(const char * s, int n)
{
    if (opfx())
	{
// Note: 'n' treated as unsigned
        if (bp->sputn(s,n)!=n)
            state |= (failbit|badbit);
        osfx();
	}
    return(*this);
}
Exemple #9
0
ostream &ostream::write( char const *buf, int len ) {
/***************************************************/
// Write a sequence of characters to the ostream.

    __lock_it( __i_lock );
    if( opfx() ) {
        if( len ) {
            if( rdbuf()->sputn( buf, len ) != len ) {
                setstate( ios::failbit );
            }
        }
        osfx();
    }
    return( *this );
}
Exemple #10
0
ostream& ostream::operator<<(streambuf * instm)
{
    int c;
    if (opfx())
        {
        while ((c=instm->sbumpc())!=EOF)
            if (bp->sputc(c) == EOF)
                {
                state |= failbit;
                break;
                }
        osfx();
        }
    return *this;
}
Exemple #11
0
template <class STREAM> ACE_IOStream<STREAM> &
ACE_IOStream<STREAM>::operator<< (ACE_IOStream_String &v)
{
  if (opfx ())
    {
#if defined (ACE_WIN32) && defined (_MSC_VER)
      for (int i = 0; i < v.GetLength (); ++i)
#else
      for (u_int i = 0; i < (u_int) v.length (); ++i)
#endif /* ACE_WIN32 && defined (_MSC_VER) */
        this->put (v[i]);
    }

  osfx ();

  return *this;
}
Exemple #12
0
ostream &ostream::operator << ( char c ) {
/****************************************/
// Write a single character to the stream.

    __lock_it( __i_lock );
    if( opfx() ) {
        if( width() == 0 ) {
            if( rdbuf()->sputc( c ) == EOF ) {
                setstate( ios::failbit );
            }
        } else {
            do_lshift( c );
        }
        osfx();
    }
    return( *this );
}
Exemple #13
0
ostream& ostream::operator<<(const void * ptr)
{
    char obuffer[12];
    char fmt[4] = "%p";
    char leader[4] = "0x";
    if (opfx())
	{
        if (ptr)
		{
            if (x_flags & uppercase)
                leader[1] = 'X';
		}
        sprintf(obuffer,fmt,ptr);
        writepad(leader,obuffer);
        osfx();
	}
    return *this;
}
Exemple #14
0
ostream& ostream::operator<<(double f)
{
    char obuffer[24];
    char fmt[8];
    char leader[4];
    char * optr = obuffer;
    int x = 0;

    // x_floatused nonzero indicates called for float, not double
    unsigned int curprecision = (x_floatused) ? FLT_DIG : DBL_DIG;
    x_floatused = 0;    // reset for next call

    curprecision = __min((unsigned)x_precision,curprecision);

    if (opfx()) 
	{
        if (x_flags & ios::showpos)
            leader[x++] = '+';
        if (x_flags & ios::showpoint)
            leader[x++] = '#';  // show decimal and trailing zeros
        leader[x] = '\0';
        x = sprintf(fmt,"%%%s.%.0ug",leader,curprecision) - 1;
        if ((x_flags & ios::floatfield)==ios::fixed)
            fmt[x] = 'f';
        else
		{
            if ((x_flags & ios::floatfield)==ios::scientific)
                fmt[x] = 'e';
            if (x_flags & uppercase)
                fmt[x] = (char)toupper(fmt[x]);
		}

        sprintf(optr,fmt,f);
        x = 0;
        if (*optr=='+' || *optr=='-')
            leader[x++] = *(optr++);
        leader[x] = '\0';
        writepad(leader,optr);
        osfx();
	}
    return *this;
}
Exemple #15
0
ostream&  ostream::operator<<(unsigned char c)
{
    if (opfx())
    {
        if (x_width)
		{
                char outc[2];
            outc[0] = c;
            outc[1] = '\0';
            writepad("",outc);
		}
        else if (bp->sputc(c)==EOF)
        {
            if (bp->overflow(c)==EOF)
                state |= (badbit|failbit);  // fatal error?
		}
        osfx();
    }
    return *this;
}
Exemple #16
0
ostream &ostream::operator << ( unsigned __int64 i ) {
    /****************************************************/
// Write an unsigned 64bit integer to the stream.
// A signed 64bit integer displayed in base 8 or base 16 also uses
// this routine.

    int         base;
    char        buffer[LONGEST_INT64 + 1];
    int         size;
    int         digit_offset;

    __lock_it( __i_lock );
    base = __FlagsToBase( flags() );

    // Sign:
    if( i > 0  &&  (flags() & ios::showpos)  &&  base == 10 ) {
        buffer[0] = '+';
        size      = 1;
    } else {
        size      = 0;
    }

    // Prefix:
    __AddPrefix( i == 0, buffer, size, base, flags() );

    // Digits:
    digit_offset = size;
    ulltoa( i, buffer + digit_offset, base );
    if( flags() & ios::uppercase ) {
        strupr( buffer );
    }
    size = ::strlen( buffer );

    // Write the number:
    if( opfx() ) {
        setstate( __WATCOM_ios::writeitem( *this, buffer, size, digit_offset ) );
        osfx();
    }
    return( *this );
}
Exemple #17
0
ostream &ostream::operator << ( signed __int64 i ) {
/**************************************************/
// Write a signed long integer to the stream.

    int         base;
    char        buffer[LONGEST_INT64 + 1];
    int         size;
    int         digit_offset;

    __lock_it( __i_lock );
    base = __FlagsToBase( flags() );
    if( base != 10 ) {
        return( *this << (unsigned __int64) i );
    }

    // Sign:
    if( i > 0  &&  (flags() & ios::showpos) ) {
        buffer[0] = '+';
        digit_offset = 1;
    } else {
        digit_offset = 0;
    }

    // Digits:
    lltoa( i, buffer + digit_offset, base );
    if( buffer[0] == '-' ) {
        digit_offset = 1;
    }
    size = ::strlen( buffer );

    // Write the number:
    if( opfx() ) {
        setstate( __WATCOM_ios::writeitem( *this, buffer, size, digit_offset ) );
        osfx();
    }
    return( *this );
}
  ostream &ostream::operator << ( unsigned long i ) {

    int         base;
    char        buffer[LONGEST_INTEGER + 1];
    int         size;
    int         digit_offset;

    __lock_it( __i_lock );
    base = __FlagsToBase( flags() );

    // Sign:
    if( i > 0  &&  (flags() & ios::showpos)  &&  base == 10 ) {
        buffer[0] = '+';
        size      = 1;
    } else {
        size      = 0;
    }

    // Prefix:
    __AddPrefix( i == 0, buffer, size, base, flags() );

    // Digits:
    digit_offset = size;
    ultoa( i, buffer + digit_offset, base );
    if( flags() & ios::uppercase ) {
        strupr( buffer );
    }
    size = strlen( buffer );

    // Write the number:
    if( opfx() ) {
        setstate( __WATCOM_ios::writeitem( *this, buffer, size, digit_offset ) );
        osfx();
    }
    return( *this );
  }
Exemple #19
0
ostream &ostream::__outfloat( long double const &f ) {
/****************************************************/
// Write a "long double" floating-point value.

    int   digit_offset;
    int   precision;
    char  buf[LONGEST_FLOAT+1];

    ::memset( buf, 0, sizeof( buf ) );
    __lock_it( __i_lock );
    precision = this->precision();
    if( precision > MAX_PREC ) precision = MAX_PREC;
    __LDFloatToString( buf, (double const *)&f, precision, this->flags() );
    if( buf[0] == '-' || buf[0] == '+' ) {
        digit_offset = 1;
    } else {
        digit_offset = 0;
    }
    if( opfx() ) {
        setstate( __WATCOM_ios::writeitem( *this, buf, ::strlen(buf), digit_offset ) );
        osfx();
    }
    return( *this );
}
Exemple #20
0
  ostream &ostream::__outfloat( long double const &f ) {

    int                 digit_offset;
    int                 precision;
    char                buf[ LONGEST_FLOAT * 2 ];
    long_double         ld;
    int                 i;
    int                 len;
    char                *x;
    CVT_INFO            cvt;
    auto char           stkbuf[ LONGEST_FLOAT + 1 ];
    std::ios::fmtflags  format_flags;
#ifdef _LONG_DOUBLE_
    double              double_value;

    /* convert this double into a long double */
    double_value = f;
    __EFG_cnvd2ld( &double_value, &ld );
#else
    ld.value = f;
#endif
    __lock_it( __i_lock );
    precision = this->precision();
    if( precision > MAX_PREC )
        precision = MAX_PREC;

    format_flags = this->flags();
    if(( format_flags & ( std::ios::scientific | ios::fixed )) == std::ios::scientific ) {
        cvt.flags = E_FMT;
        cvt.scale = 1;
    } else if(( format_flags & ( std::ios::scientific | ios::fixed )) == std::ios::fixed ) {
        cvt.flags = F_FMT;
        cvt.scale = 0;
    } else {
        cvt.flags = G_FMT;
        cvt.scale = 1;
        if( precision == 0 ) {
            precision = 1;
        }
    }
    if( format_flags & std::ios::showpoint ) {
        cvt.flags |= F_DOT;
    }
    cvt.ndigits = precision;
    cvt.expchar = ( format_flags & std::ios::uppercase ) ? 'E' : 'e';
    cvt.expwidth = 0;
    __EFG_cvtld( &ld, &cvt, stkbuf );
    // put all the pieces together
    len = cvt.n1 + cvt.nz1 + cvt.n2 + cvt.nz2 + 1;
    if( cvt.sign < 0 ) {
        ++len;
    } else if( format_flags & std::ios::showpos ) {
        ++len;
    }
    if( len > sizeof( buf ) ) {
        x = new char[ len + 1 ];
    } else {
        x = buf;
    }
    i = 0;
    digit_offset = 1;
    if( cvt.sign < 0 ) {
        x[i++] = '-';
    } else if( format_flags & std::ios::showpos ) {
        x[i++] = '+';
    } else {
        digit_offset = 0;
    }
    if( cvt.n1 != 0 ) {
        ::memcpy( &x[i], &stkbuf[0], cvt.n1 );
        i += cvt.n1;
    }
    if( cvt.nz1 != 0 ) {
        ::memset( &x[i], '0', cvt.nz1 );
        i += cvt.nz1;
    }
    if( cvt.n2 != 0 ) {
        ::memcpy( &x[i], &stkbuf[cvt.n1], cvt.n2 );
        i += cvt.n2;
    }
    if( cvt.nz2 != 0 ) {
        ::memset( &x[i], '0', cvt.nz2 );
        i += cvt.nz2;
    }
    x[i] = '\0';

    if( opfx() ) {
        setstate( __WATCOM_ios::writeitem( *this, x, ::strlen( x ), digit_offset ) );
        osfx();
    }
    if( len > sizeof( buf ) ) {
        delete x;
    }
    return( *this );
  }