Blame include/cppunit/portability/Stream.h

Packit Service e31359
#ifndef CPPUNIT_PORTABILITY_STREAM_H_INCLUDED
Packit Service e31359
#define CPPUNIT_PORTABILITY_STREAM_H_INCLUDED
Packit Service e31359
Packit Service e31359
// This module define:
Packit Service e31359
// Type CppUT::Stream (either std::stream or a custom type)
Packit Service e31359
// Type CppUT::OStringStream (eitjer std::ostringstream, older alternate or a custom type)
Packit Service e31359
// Functions stdCOut() & stdCErr() which returns a reference on cout & cerr stream (or our
Packit Service e31359
// custom stream).
Packit Service e31359
Packit Service e31359
#include <cppunit/Portability.h>
Packit Service e31359
Packit Service e31359
Packit Service e31359
#if defined( CPPUNIT_NO_STREAM )
Packit Service e31359
Packit Service e31359
#include <string>
Packit Service e31359
#include <stdio.h>
Packit Service e31359
#include <string.h>
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_BEGIN
Packit Service e31359
Packit Service e31359
class StreamBuffer
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
   virtual ~StreamBuffer() {}
Packit Service e31359
Packit Service e31359
   virtual void write( const char *text, unsigned int length ) = 0;
Packit Service e31359
Packit Service e31359
   virtual void flush() {}
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
class StringStreamBuffer : public StreamBuffer
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
   std::string str() const
Packit Service e31359
   {
Packit Service e31359
      return str_;
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
public: // overridden from StreamBuffer
Packit Service e31359
   void write( const char *text, unsigned int length )
Packit Service e31359
   {
Packit Service e31359
      str_.append( text, length );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
private:
Packit Service e31359
   std::string str_;
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
class FileStreamBuffer : public StreamBuffer
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
   FileStreamBuffer( FILE *file )
Packit Service e31359
      : file_( file )
Packit Service e31359
   {
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   FILE *file() const
Packit Service e31359
   {
Packit Service e31359
      return file_;
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
public: // overridden from StreamBuffer
Packit Service e31359
   void write( const char *text, unsigned int length )
Packit Service e31359
   {
Packit Service e31359
      if ( file_ )
Packit Service e31359
         fwrite( text, sizeof(char), length, file_ );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   void flush() 
Packit Service e31359
   {
Packit Service e31359
      if ( file_ )
Packit Service e31359
         fflush( file_ );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
private:
Packit Service e31359
   FILE *file_;
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
class OStream
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
   OStream()
Packit Service e31359
      : buffer_( 0 )
Packit Service e31359
   {
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream( StreamBuffer *buffer )
Packit Service e31359
      : buffer_( buffer )
Packit Service e31359
   {
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   virtual ~OStream()
Packit Service e31359
   {
Packit Service e31359
     flush();
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &flush()
Packit Service e31359
   {
Packit Service e31359
	   if ( buffer_ )
Packit Service e31359
		    buffer_->flush();
Packit Service e31359
	   return *this;
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   void setBuffer( StreamBuffer *buffer )
Packit Service e31359
   {
Packit Service e31359
      buffer_ = buffer;
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &write( const char *text, unsigned int length )
Packit Service e31359
   {
Packit Service e31359
      if ( buffer_ )
Packit Service e31359
         buffer_->write( text, length );
Packit Service e31359
      return *this;
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &write( const char *text )
Packit Service e31359
   {
Packit Service e31359
      return write( text, strlen(text) );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( bool v )
Packit Service e31359
   {
Packit Service e31359
      const char *out = v ? "true" : "false";
Packit Service e31359
      return write( out );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( short v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%hd", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( unsigned short v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%hu", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( int v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%d", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( unsigned int v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%u", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( long v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%ld", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( unsigned long v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%lu", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( float v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[128];
Packit Service e31359
      sprintf( buffer, "%.16g", double(v) );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( double v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[128];
Packit Service e31359
      sprintf( buffer, "%.16g", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( long double v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[128];
Packit Service e31359
      sprintf( buffer, "%.16g", double(v) );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( const void *v )
Packit Service e31359
   {
Packit Service e31359
      char buffer[64];
Packit Service e31359
      sprintf( buffer, "%p", v );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( const char *v )
Packit Service e31359
   {
Packit Service e31359
      return write( v ? v : "NULL" );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( char c )
Packit Service e31359
   {
Packit Service e31359
      char buffer[16];
Packit Service e31359
      sprintf( buffer, "%c", c );
Packit Service e31359
      return write( buffer );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OStream &operator <<( const std::string &s )
Packit Service e31359
   {
Packit Service e31359
      return write( s.c_str(), s.length() );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
private:
Packit Service e31359
   StreamBuffer *buffer_;
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
class OStringStream : public OStream
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
	OStringStream()
Packit Service e31359
		: OStream( &buffer_ )
Packit Service e31359
	{
Packit Service e31359
	}
Packit Service e31359
Packit Service e31359
	std::string str() const
Packit Service e31359
	{
Packit Service e31359
		return buffer_.str();
Packit Service e31359
	}
Packit Service e31359
Packit Service e31359
private:
Packit Service e31359
	StringStreamBuffer buffer_;
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
class OFileStream : public OStream
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
   OFileStream( FILE *file )
Packit Service e31359
      : OStream( &buffer_ )
Packit Service e31359
      , buffer_( file )
Packit Service e31359
      , ownFile_( false )
Packit Service e31359
   {
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   OFileStream( const char *path )
Packit Service e31359
      : OStream( &buffer_ )
Packit Service e31359
      , buffer_( fopen( path, "wt" ) )
Packit Service e31359
      , ownFile_( true )
Packit Service e31359
   {
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
   virtual ~OFileStream()
Packit Service e31359
   {
Packit Service e31359
      if ( ownFile_  &&  buffer_.file() )
Packit Service e31359
         fclose( buffer_.file() );
Packit Service e31359
   }
Packit Service e31359
Packit Service e31359
private:
Packit Service e31359
   FileStreamBuffer buffer_;
Packit Service e31359
   bool ownFile_;
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
inline OStream &stdCOut() 
Packit Service e31359
{
Packit Service e31359
   static OFileStream stream( stdout );
Packit Service e31359
   return stream;
Packit Service e31359
}
Packit Service e31359
Packit Service e31359
inline OStream &stdCErr() 
Packit Service e31359
{
Packit Service e31359
   static OFileStream stream( stderr );
Packit Service e31359
   return stream;
Packit Service e31359
}
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_END
Packit Service e31359
Packit Service e31359
#elif CPPUNIT_HAVE_SSTREAM // #if defined( CPPUNIT_NO_STREAM )
Packit Service e31359
# include <sstream>
Packit Service e31359
# include <fstream>
Packit Service e31359
Packit Service e31359
    CPPUNIT_NS_BEGIN
Packit Service e31359
    typedef std::ostringstream OStringStream;      // The standard C++ way
Packit Service e31359
    typedef std::ofstream OFileStream;
Packit Service e31359
    CPPUNIT_NS_END
Packit Service e31359
Packit Service e31359
Packit Service e31359
#elif CPPUNIT_HAVE_CLASS_STRSTREAM
Packit Service e31359
# include <string>
Packit Service e31359
# if CPPUNIT_HAVE_STRSTREAM
Packit Service e31359
#   include <strstream>
Packit Service e31359
# else // CPPUNIT_HAVE_STRSTREAM
Packit Service e31359
#  include <strstream.h>
Packit Service e31359
# endif // CPPUNIT_HAVE_CLASS_STRSTREAM
Packit Service e31359
Packit Service e31359
    CPPUNIT_NS_BEGIN
Packit Service e31359
Packit Service e31359
    class OStringStream : public std::ostrstream 
Packit Service e31359
    {
Packit Service e31359
    public:
Packit Service e31359
        std::string str()
Packit Service e31359
        {
Packit Service e31359
//            (*this) << '\0';
Packit Service e31359
//            std::string msg(std::ostrstream::str());
Packit Service e31359
//            std::ostrstream::freeze(false);
Packit Service e31359
//            return msg;
Packit Service e31359
// Alternative implementation that don't rely on freeze which is not
Packit Service e31359
// available on some platforms:
Packit Service e31359
            return std::string( std::ostrstream::str(), pcount() );
Packit Service e31359
        }
Packit Service e31359
    };
Packit Service e31359
Packit Service e31359
    CPPUNIT_NS_END
Packit Service e31359
#else // CPPUNIT_HAVE_CLASS_STRSTREAM
Packit Service e31359
#   error Cannot define CppUnit::OStringStream.
Packit Service e31359
#endif // #if defined( CPPUNIT_NO_STREAM )
Packit Service e31359
Packit Service e31359
Packit Service e31359
Packit Service e31359
#if !defined( CPPUNIT_NO_STREAM )
Packit Service e31359
Packit Service e31359
#include <iostream>
Packit Service e31359
Packit Service e31359
    CPPUNIT_NS_BEGIN
Packit Service e31359
Packit Service e31359
    typedef std::ostream OStream;
Packit Service e31359
Packit Service e31359
    inline OStream &stdCOut() 
Packit Service e31359
    {
Packit Service e31359
        return std::cout;
Packit Service e31359
    }
Packit Service e31359
Packit Service e31359
    inline OStream &stdCErr() 
Packit Service e31359
    {
Packit Service e31359
       return std::cerr;
Packit Service e31359
    }
Packit Service e31359
Packit Service e31359
    CPPUNIT_NS_END
Packit Service e31359
   
Packit Service e31359
#endif // #if !defined( CPPUNIT_NO_STREAM )
Packit Service e31359
Packit Service e31359
#endif // CPPUNIT_PORTABILITY_STREAM_H_INCLUDED
Packit Service e31359