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

📄 logstream.h

📁 Amis - A maximum entropy estimator 一个最大熵模型统计工具
💻 H
字号:
////////////////////////////////////////////////////////////////////////////  Copyright (c) 2000, Yusuke Miyao///  You may distribute under the terms of the Artistic License.//////  <id>$Id: LogStream.h,v 1.4 2003/05/11 18:12:09 yusuke Exp $</id>///  <collection>Maximum Entropy Estimator</collection>///  <name>LogStream.h</name>///  <overview>Stream for logging</overview>/////////////////////////////////////////////////////////////////////////#ifndef Amis_LogStream_h_#define Amis_LogStream_h_#include <amis/configure.h>#include <amis/ErrorBase.h>#include <iostream>#include <fstream>AMIS_NAMESPACE_BEGIN///////////////////////////////////////////////////////////////////////// <classdef>/// <name>LogStreamError</name>/// <overview>Error in LogStream</overview>/// <desc>/// The error is thrown when an operation is not permitted in a stream./// </desc>/// <body>class LogStreamError : public ErrorBase { public:  LogStreamError( const std::string& s ) : ErrorBase( s ) {}  /// Initialize with an error message  LogStreamError( char* s ) : ErrorBase( s ) {}  /// Initialize with an error message};/// </body>/// </classdef>///////////////////////////////////////////////////////////////////////// <classdef>/// <name>LogStream</name>/// <overview>Stream for logging</overview>/// <desc>/// A stream for logging messages for profiling/warning./// </desc>/// <body>class LogStream {private:  std::string filename;  std::ofstream* stream;public:  static LogStream DefaultLogStream;public:  LogStream( void ) {    stream = NULL;  }  LogStream( const std::string& name ) : filename( name ) {    stream = new std::ofstream( filename.c_str() );    if ( stream == NULL ) {      throw LogStreamError( "Cannot make a log stream" );    }    if ( ! (*stream) ) {      delete stream;      stream = NULL;      throw LogStreamError( "Cannot open a log file: " + filename );    }  }  ~LogStream() {    if ( stream != NULL ) delete stream;  }  void setStream( const std::string& name ) {    if ( stream != NULL ) delete stream;    filename = name;    stream = new std::ofstream( filename.c_str() );    if ( stream == NULL ) {      throw LogStreamError( "Cannot make a log stream" );    }    if ( ! (*stream) ) {      delete stream;      stream = NULL;      throw LogStreamError( "Cannot open a log file: " + filename );    }  }  std::ostream* getStream() { return stream; }public:    template < class T >  LogStream& operator<<( const T& t )   {    std::cerr << t;    if ( stream != NULL ) {		(*stream) << t;	}    return *this;  }      int operator!( void ) const {    return ! (*stream);  }  operator void*( void ) const {    return *stream;  }};/*template<class T>LogStream& operator<<(LogStream& ls, const T& t ){  std::cerr << t;  std::ostream* os = ls.getStream();  if ( os != NULL ) (*os) << t;  return ls;}*//// </body>/// </classdef>#define AMIS_ERROR_MESSAGE( message ) \  LogStream::DefaultLogStream << message#define AMIS_PROF_MESSAGE( message ) \  LogStream::DefaultLogStream << message#define AMIS_ABORT( message ) \  do { \    std::cerr << message; \    std::cerr << "\n"; \    LogStream::DefaultLogStream << message << '\n'; \    abort(); \  } while ( 0 )AMIS_NAMESPACE_END#endif // LogStream_h_// end of LogStream.h

⌨️ 快捷键说明

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