Blame src/ftextstream.cpp

Packit 1c1d7e
#include "ftextstream.h"
Packit 1c1d7e
#include <qfile.h>
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
class QGStringBuffer : public QIODevice 
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    QGStringBuffer( QGString* str );
Packit 1c1d7e
    ~QGStringBuffer();
Packit 1c1d7e
    bool  open( int m );
Packit 1c1d7e
    void  close();
Packit 1c1d7e
    void  flush();
Packit 1c1d7e
    uint  size() const;
Packit 1c1d7e
    int   at()   const;
Packit 1c1d7e
    bool  at( int pos );
Packit 1c1d7e
    int   readBlock( char *, uint) { return -1; }
Packit 1c1d7e
    int   writeBlock( const char *p, uint len );
Packit 1c1d7e
    int   getch() { return -1; }
Packit 1c1d7e
    int   putch( int ch );
Packit 1c1d7e
    int   ungetch( int ) { return -1; }
Packit 1c1d7e
Packit 1c1d7e
  protected:
Packit 1c1d7e
    QGString* m_str;
Packit 1c1d7e
Packit 1c1d7e
  private:        // Disabled copy constructor and operator=
Packit 1c1d7e
    QGStringBuffer( const QGStringBuffer & );
Packit 1c1d7e
    QGStringBuffer &operator=( const QGStringBuffer & );
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
QGStringBuffer::QGStringBuffer( QGString* str ) : m_str(str)
Packit 1c1d7e
{
Packit 1c1d7e
  //printf("QGStringBuffer::QGStringBuffer(%p)\n",str);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QGStringBuffer::~QGStringBuffer()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
bool  QGStringBuffer::open( int m )
Packit 1c1d7e
{
Packit 1c1d7e
    if ( !m_str ) 
Packit 1c1d7e
    {
Packit 1c1d7e
#if defined(CHECK_STATE)
Packit 1c1d7e
	qWarning( "QGStringBuffer::open: No string" );
Packit 1c1d7e
#endif
Packit 1c1d7e
	return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
    if ( isOpen() ) 
Packit 1c1d7e
    {                           // buffer already open
Packit 1c1d7e
#if defined(CHECK_STATE)
Packit 1c1d7e
	qWarning( "QGStringBuffer::open: Buffer already open" );
Packit 1c1d7e
#endif
Packit 1c1d7e
	return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
    setMode( m );
Packit 1c1d7e
    if ( m & IO_Truncate ) 
Packit 1c1d7e
    {                    // truncate buffer
Packit 1c1d7e
	m_str->truncate( 0 );
Packit 1c1d7e
    }
Packit 1c1d7e
    if ( m & IO_Append ) 
Packit 1c1d7e
    {                      // append to end of buffer
Packit 1c1d7e
	ioIndex = m_str->length();
Packit 1c1d7e
    } 
Packit 1c1d7e
    else 
Packit 1c1d7e
    {
Packit 1c1d7e
	ioIndex = 0;
Packit 1c1d7e
    }
Packit 1c1d7e
    setState( IO_Open );
Packit 1c1d7e
    setStatus( 0 );
Packit 1c1d7e
    return TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void  QGStringBuffer::close()
Packit 1c1d7e
{
Packit 1c1d7e
  if ( isOpen() ) 
Packit 1c1d7e
  {
Packit 1c1d7e
    setFlags( IO_Direct );
Packit 1c1d7e
    ioIndex = 0;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void  QGStringBuffer::flush()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
uint  QGStringBuffer::size() const
Packit 1c1d7e
{
Packit 1c1d7e
  return m_str ? m_str->length() : 0;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
int   QGStringBuffer::at()   const
Packit 1c1d7e
{
Packit 1c1d7e
  return ioIndex;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
bool  QGStringBuffer::at( int pos )
Packit 1c1d7e
{
Packit 1c1d7e
#if defined(CHECK_STATE)
Packit 1c1d7e
  if ( !isOpen() ) 
Packit 1c1d7e
  {
Packit 1c1d7e
    qWarning( "QGStringBuffer::at: Buffer is not open" );
Packit 1c1d7e
    return FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
#endif
Packit 1c1d7e
  if ( (uint)pos >= m_str->length() ) 
Packit 1c1d7e
  {
Packit 1c1d7e
#if defined(CHECK_RANGE)
Packit 1c1d7e
    qWarning( "QGStringBuffer::at: Index %d out of range", pos );
Packit 1c1d7e
#endif
Packit 1c1d7e
    return FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  ioIndex = pos;
Packit 1c1d7e
  return TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
int QGStringBuffer::writeBlock( const char *p, uint len )
Packit 1c1d7e
{
Packit 1c1d7e
  //printf("QGStringBuffer::writeBlock(%p,%d) m_str=%p ioIndex=%d\n",p,len,
Packit 1c1d7e
  //    m_str,ioIndex);
Packit 1c1d7e
  m_str->enlarge(ioIndex+len+1);
Packit 1c1d7e
  memcpy(m_str->data()+ioIndex,p,len);
Packit 1c1d7e
  ioIndex+=len;
Packit 1c1d7e
  m_str->data()[ioIndex]='\0';
Packit 1c1d7e
  m_str->setLen(ioIndex);
Packit 1c1d7e
  return len;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
int QGStringBuffer::putch( int ch )
Packit 1c1d7e
{
Packit 1c1d7e
  //printf("QGStringBuffer::putch(%d) m_str=%p ioIndex=%d\n",
Packit 1c1d7e
  //    ch,m_str,ioIndex);
Packit 1c1d7e
  m_str->enlarge(ioIndex+2);
Packit 1c1d7e
  m_str->data()[ioIndex] = (char)ch;
Packit 1c1d7e
  ioIndex++;
Packit 1c1d7e
  m_str->data()[ioIndex] = '\0';
Packit 1c1d7e
  m_str->setLen(ioIndex);
Packit 1c1d7e
  return ch;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
FTextStream::FTextStream()
Packit 1c1d7e
{
Packit 1c1d7e
  m_dev = 0;
Packit 1c1d7e
  m_owndev = FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream::FTextStream( QIODevice *dev )
Packit 1c1d7e
{
Packit 1c1d7e
  m_dev = dev;
Packit 1c1d7e
  m_owndev = FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream::FTextStream( QGString *s )
Packit 1c1d7e
{
Packit 1c1d7e
  m_dev = new QGStringBuffer(s);
Packit 1c1d7e
  ((QGStringBuffer*)m_dev)->open( IO_WriteOnly );
Packit 1c1d7e
  m_owndev = TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream::FTextStream( FILE *fh )
Packit 1c1d7e
{
Packit 1c1d7e
  m_dev = new QFile;
Packit 1c1d7e
  ((QFile *)m_dev)->open( IO_WriteOnly, fh);
Packit 1c1d7e
  m_owndev = TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream::~FTextStream()
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_owndev) delete m_dev;
Packit 1c1d7e
  m_dev = 0;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QIODevice *FTextStream::device() const
Packit 1c1d7e
{
Packit 1c1d7e
  return m_dev;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void FTextStream::setDevice( QIODevice *dev )
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_owndev) 
Packit 1c1d7e
  {
Packit 1c1d7e
    delete m_dev;
Packit 1c1d7e
    m_owndev = FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_dev = dev;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void FTextStream::unsetDevice()
Packit 1c1d7e
{
Packit 1c1d7e
  setDevice(0);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::output_int( ulong n, bool neg )
Packit 1c1d7e
{
Packit 1c1d7e
  char buf[20];
Packit 1c1d7e
  char *p = &buf[19];
Packit 1c1d7e
  *p = '\0';
Packit 1c1d7e
  if ( neg )
Packit 1c1d7e
  {
Packit 1c1d7e
    n = (ulong)(-(long)n);
Packit 1c1d7e
  }
Packit 1c1d7e
  do 
Packit 1c1d7e
  {
Packit 1c1d7e
    *--p = ((int)(n%10)) + '0';
Packit 1c1d7e
    n /= 10;
Packit 1c1d7e
  } while ( n );
Packit 1c1d7e
  if ( neg ) *--p = '-';
Packit 1c1d7e
  return operator<<(p);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( signed short i )
Packit 1c1d7e
{
Packit 1c1d7e
    return output_int( i, i < 0 );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( unsigned short i )
Packit 1c1d7e
{
Packit 1c1d7e
    return output_int( i, FALSE );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( signed int i )
Packit 1c1d7e
{
Packit 1c1d7e
    return output_int( i, i < 0 );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( unsigned int i )
Packit 1c1d7e
{
Packit 1c1d7e
    return output_int( i, FALSE );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( signed long i )
Packit 1c1d7e
{
Packit 1c1d7e
    return output_int( i, i < 0 );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( unsigned long i )
Packit 1c1d7e
{
Packit 1c1d7e
    return output_int( i, FALSE );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( float f )
Packit 1c1d7e
{
Packit 1c1d7e
    return *this << (double)f;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
FTextStream &FTextStream::operator<<( double d )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[64];
Packit 1c1d7e
    sprintf(buf,"%f",d);
Packit 1c1d7e
    return *this << buf;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e