📄 logstream.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 + -