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

📄 stream.h

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

⌨️ 快捷键说明

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