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

📄 message.cpp

📁 JAPAN RTOS TOPPERS/JSP kernel 1.4 PreRelease simulation environment JSP kernel Windows simulation
💻 CPP
字号:
// $Header: /home/CVS/configurator/base/message.cpp,v 1.3 2003/06/30 12:50:32 takayuki Exp $

#include "base/message.h"

using namespace std;


/*****************************************************************************/

/*
 *   儊僢僙乕僕弌椡梡暥帤楍惍宍僿儖僷乕僋儔僗
 */

    //僨僼僅儖僩僐儞僗僩儔僋僞
Formatter::Formatter(void) throw() : templatestring(""), accept(false)
{}

    //僐儞僗僩儔僋僞
Formatter::Formatter(string src) throw() : templatestring(src)
{   shift();   }

	//僐僺乕僐儞僗僩儔僋僞
Formatter::Formatter(const Formatter & src) throw() : templatestring(src.templatestring), accept(src.accept)
{
	string work;

	work = src.content.str();
	content << work;
}

    //師偺堷悢偺憓擖愭傊偲堏摦
void Formatter::shift(void) throw()
{
	string::size_type pos;

    accept = false;
	if(!templatestring.empty()) {

		do {
			pos = templatestring.find_first_of("%");

            if(pos != string::npos) {

                    /* %偑偁偭偰偦傟偑\%偲偄偆宍側傜丄%傪偦偺傑傑弌偡 */
				if(pos != string::npos && pos != 0 && templatestring.at(pos - 1) == '\\') {

					if(pos > 1)
						content << templatestring.substr(0, pos - 2);
					content << '%';

					templatestring = templatestring.substr(pos + 1);

					continue;
				}
				else {
                        /* %偑傑偩偁傞 */
                    if(pos != string::npos)
                        accept = true;
					break;
                }
            }
		} while(pos != string::npos);

		if(pos != string::npos) {
			if(pos != 0)
				content << templatestring.substr(0, pos);
			templatestring = templatestring.substr(pos + 1);
		}
		else {
			content << templatestring;
			templatestring.erase();
		}
	}
}


    //枹愝掕偺堷悢傪 (null) 偱抲姺
void Formatter::shift_all(void) throw()
{
    while(accept)
        *this << "(null)";
}

    //撪晹儊僢僙乕僕偺庢傝弌偟
string Formatter::str(void) throw()
{
    shift_all();
    return content.str();
}

	//僥儞僾儗乕僩暥帤楍偺愝掕 (拞恎偼徚偊傞)
void Formatter::assign(string src) throw()
{
	clear();
	templatestring.assign(src);
	shift();
}

	//撪梕偺徚嫀
void Formatter::clear(void) throw()
{
	if(!templatestring.empty())
		templatestring.erase();
	content.str(string(""));
	accept = false;
}

	//戙擖墘嶼巕
Formatter & Formatter::operator =(const Formatter & src) throw()
{
	string work;

	templatestring = src.templatestring;
	accept         = src.accept;

	work = src.content.str();
	content << work;

	return *this;
}


/*****************************************************************************/

/*
 *   儊僢僙乕僕弌椡梡暥帤楍惍宍僿儖僷乕僋儔僗
 */

const char * Message::MessageControl::select(const char * msg1, const char * msg2, va_list vl) throw()
{
	const char * msg = msg1;
	int i = language;

	if(i > 0) {
		msg = msg2;

		while(--i > 0)
			msg = va_arg(vl, const char *);
	}

	return msg;
}

    //僨僼僅儖僩僐儞僗僩儔僋僞 (僥僗僩梡)
Message::Message(void) throw()
{}

    //僐儞僗僩儔僋僞
Message::Message(string src) throw() : Formatter(src)
{}

	//僐儞僗僩儔僋僞 (暋悢尵岅)
Message::Message(const char * src1, const char * src2, ...) throw()
{
	va_list vl;

	va_start(vl, src2);
	templatestring.assign(Singleton<MessageControl>::getInstance()->select(src1, src2, vl));
	shift();
}

	//僐僺乕僐儞僗僩儔僋僞
Message::Message(const Message & src) throw() : Formatter(src)
{}

	//攈惗僋儔僗偺弶婜壔梡娭悢 (暋悢尵岅)
void Message::_initialize(const char * src1, const char * src2, va_list vl) throw()
{
	content.clear();
	accept = false;
	templatestring.assign(Singleton<MessageControl>::getInstance()->select(src1, src2, vl));
	shift();
}

	//尵岅慖戰
void Message::selectLanguage(enum tagLanguage lang) throw()
{
	if(lang >= 0 && lang < LAST_LANG)
		Singleton<Message::MessageControl>::getInstance()->setLanguage(lang);
}

    //僥儞僾儗乕僩暥帤楍偺愝掕 (拞恎偼徚偊傞)
void Message::assign(const char * src1, const char * src2, ... ) throw()
{
	va_list vl;

	clear();

	va_start(vl, src2);
	templatestring.assign(Singleton<MessageControl>::getInstance()->select(src1, src2, vl));
	shift();
}

/*****************************************************************************/

/*
 *   忕挿弌椡梡暥帤楍惍宍僿儖僷乕僋儔僗
 */

	//僨僼僅儖僩僐儞僗僩儔僋僞
VerboseMessage::VerboseMessage(void) throw() : Message()
{}

	//僐儞僗僩儔僋僞
VerboseMessage::VerboseMessage(const char * src) throw() : Message(src)
{}

	//僐儞僗僩儔僋僞
VerboseMessage::VerboseMessage(const string & src) throw() : Message(src)
{}

	//僐儞僗僩儔僋僞
VerboseMessage::VerboseMessage(const char * src1, const char * src2, ... ) throw() : Message()
{
	va_list vl;

	va_start(vl, src2);
	_initialize(src1, src2, vl);
}

	//僨僗僩儔僋僞
VerboseMessage::~VerboseMessage(void) throw()
{	Singleton< VerboseControl >::getInstance()->operator << (str());	}

/*****************************************************************************/

/*
 *   椺奜儊僢僙乕僕梡暥帤楍惍宍僿儖僷乕僋儔僗
 */

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(const char * src) throw() : Message(src), level(DEFAULT)
{}

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(const std::string & src) throw() : Message(src), level(DEFAULT)
{}

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(const char * src1, const char * src2, ...) throw() : Message(), level(DEFAULT)
{
	va_list vl;
	
	va_start(vl, src2);
	_initialize(src1, src2, vl);
}

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(enum tagLevel _level) throw() : Message(), level(_level)
{}

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(enum tagLevel _level, const char * src) throw() : Message(src), level(_level)
{}

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(enum tagLevel _level, const std::string & src) throw() : Message(src), level(_level)
{}

	//僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(enum tagLevel _level, const char * src1, const char * src2, ...) throw() : Message(), level(_level)
{
	va_list vl;
	
	va_start(vl, src2);
	_initialize(src1, src2, vl);
}

	//僐僺乕僐儞僗僩儔僋僞
ExceptionMessage::ExceptionMessage(const ExceptionMessage & src) throw() : Message(src), level(src.level)
{}


/*****************************************************************************/

/*
 *   僨僶僢僌儊僢僙乕僕梡暥帤楍惍宍僿儖僷乕僋儔僗
 */

	//僐儞僗僩儔僋僞
DebugMessage::DebugMessage(string src) throw() : Formatter(src)
{}

	//僨僗僩儔僋僞
DebugMessage::~DebugMessage(void) throw()
{	Singleton<DebugControl>::getInstance()->operator << (str());	}

⌨️ 快捷键说明

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