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

📄 reporter.cc

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 CC
字号:
// $Header$#include <stdlib.h>#include <stream.h>#include <string.h>#include "Reporter.h"#include "input.h"class WarningReporter : public Reporter {    public:	WarningReporter() : Reporter( cerr )	{ }	virtual void Prolog();	};class ErrorReporter : public Reporter {    public:	ErrorReporter() : Reporter( cerr )	{ }	virtual void Prolog();	};class FatalReporter : public Reporter {    public:	FatalReporter() : Reporter( cerr )	{ }	virtual void Prolog();	virtual void Epilog();	};class MessageReporter : public Reporter {    public:	MessageReporter() : Reporter( cout )	{ }	virtual void Prolog();	};RMessage EndMessage( "" );// Due to bugs in gcc-2.1, we don't initialize these here but rather// have Sequencer::Sequencer do it.Reporter* warn;Reporter* error;Reporter* fatal;Reporter* message;RMessage::RMessage( const GlishObject* message_object )	{	object = message_object;	str = 0;	}RMessage::RMessage( const char* message_string )	{	str = message_string;	object = 0;	}RMessage::RMessage( int message_int )	{	str = 0;	object = 0;	int_val = message_int;	}char RMessage::Write( ostream& s, int leading_space, int trailing_space ) const	{	if ( object )		{		if ( leading_space )			s << " ";		object->Describe( s );		if ( trailing_space )			s << " ";		return '\0';		}	else if ( str )		{		if ( str[0] )			{			s << str;			return str[strlen( str ) - 1];			}		else			return '\0';		}	else		{		if ( leading_space )			s << " ";		s << int_val;		if ( trailing_space )			s << " ";		return '\0';		}	}char RMessage::FirstChar() const	{	if ( object )		return '\0';	else if ( str )		return str[0];	else		return '0';	}Reporter::Reporter( ostream& reporter_stream ) : stream( reporter_stream )	{	count = 0;	}void Reporter::Report( const RMessage& m0, const RMessage& m1,			const RMessage& m2, const RMessage& m3,			const RMessage& m4, const RMessage& m5,			const RMessage& m6, const RMessage& m7,			const RMessage& m8, const RMessage& m9,			const RMessage& m10 )	{	const int max_messages = 50;	const RMessage* messages[max_messages];	messages[0] = &m0;	messages[1] = &m1;	messages[2] = &m2;	messages[3] = &m3;	messages[4] = &m4;	messages[5] = &m5;	messages[6] = &m6;	messages[7] = &m7;	messages[8] = &m8;	messages[9] = &m9;	messages[10] = &m10;	messages[11] = &EndMessage;	Prolog();	const char* suppress_following_blank = " ([{#@$%-`'\"";	const char* suppress_preceding_blank = " )]},:;.'\"";	int leading_space = 0;	int trailing_space;	for ( int i = 0; i < max_messages; ++i )		{		char c;		if ( messages[i] == &EndMessage )			break;		if ( i == max_messages - 1 )			trailing_space = 0;		else			{			char c = messages[i+1]->FirstChar();			if ( c && strchr( suppress_preceding_blank, c ) )				trailing_space = 0;			else				trailing_space = 1;			}		c = messages[i]->Write( stream, leading_space, trailing_space );		leading_space = ! (c && strchr( suppress_following_blank, c ));		}	Epilog();	++count;	}void Reporter::Prolog()	{	if ( ! interactive )		{		if ( input_file_name )			stream << "\"" << input_file_name << "\", ";		if ( line_num > 0 )			stream << "line " << line_num << ": ";		}	}void Reporter::Epilog()	{	stream << "\n";	}void WarningReporter::Prolog()	{	Reporter::Prolog();	stream << "warning, ";	}void ErrorReporter::Prolog()	{	Reporter::Prolog();	stream << "error, ";	}void FatalReporter::Prolog()	{	Reporter::Prolog();	stream << "fatal internal error, ";	}void FatalReporter::Epilog()	{	Reporter::Epilog();	exit( 1 );	}void MessageReporter::Prolog()	{	}void init_reporters()	{	warn = new WarningReporter;	error = new ErrorReporter;	fatal = new FatalReporter;	message = new MessageReporter;	}

⌨️ 快捷键说明

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