3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
9 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
10 * によって公表されている GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
36 * @(#) $Id: message.cpp,v 1.1 2009/01/31 05:27:37 suikan Exp $
39 // $Header: /cvsroot/toppersjsp4bf/jsp/cfg/base/message.cpp,v 1.1 2009/01/31 05:27:37 suikan Exp $
41 #include "base/message.h"
46 /*****************************************************************************/
49 * メッセージ出力用文字列整形ヘルパークラス
53 Formatter::Formatter(void) throw() : templatestring(""), accept(false)
57 Formatter::Formatter(string src) throw() : templatestring(src)
61 Formatter::Formatter(const Formatter & src) throw() : templatestring(src.templatestring), accept(src.accept)
65 work = src.content.str();
70 void Formatter::shift(void) throw()
72 string::size_type pos;
75 if(!templatestring.empty()) {
78 pos = templatestring.find_first_of("%");
80 if(pos != string::npos) {
82 /* %があってそれが\%という形なら、%をそのまま出す */
83 if(pos != string::npos && pos != 0 && templatestring.at(pos - 1) == '\\') {
86 content << templatestring.substr(0, pos - 2);
89 templatestring = templatestring.substr(pos + 1);
95 if(pos != string::npos)
100 } while(pos != string::npos);
102 if(pos != string::npos) {
104 content << templatestring.substr(0, pos);
105 templatestring = templatestring.substr(pos + 1);
108 content << templatestring;
109 templatestring.erase();
116 void Formatter::shift_all(void) throw()
123 string Formatter::str(void) throw()
126 return content.str();
129 //テンプレート文字列の設定 (中身は消える)
130 void Formatter::assign(string src) throw()
133 templatestring.assign(src);
138 void Formatter::clear(void) throw()
140 if(!templatestring.empty())
141 templatestring.erase();
142 content.str(string(""));
147 Formatter & Formatter::operator =(const Formatter & src) throw()
151 templatestring = src.templatestring;
154 work = src.content.str();
161 /*****************************************************************************/
164 * メッセージ出力用文字列整形ヘルパークラス
167 const char * Message::MessageControl::select(const char * msg1, const char * msg2, va_list vl) throw()
169 const char * msg = msg1;
176 msg = va_arg(vl, const char *);
182 //デフォルトコンストラクタ (テスト用)
183 Message::Message(void) throw()
187 Message::Message(string src) throw() : Formatter(src)
191 Message::Message(const char * src1, const char * src2, ...) throw()
196 templatestring.assign(Singleton<MessageControl>::getInstance()->select(src1, src2, vl));
201 Message::Message(const Message & src) throw() : Formatter(src)
204 //派生クラスの初期化用関数 (複数言語)
205 void Message::_initialize(const char * src1, const char * src2, va_list vl) throw()
209 templatestring.assign(Singleton<MessageControl>::getInstance()->select(src1, src2, vl));
214 void Message::selectLanguage(enum tagLanguage lang) throw()
216 if(lang >= 0 && lang < LAST_LANG)
217 Singleton<Message::MessageControl>::getInstance()->setLanguage(lang);
220 //テンプレート文字列の設定 (中身は消える)
221 void Message::assign(const char * src1, const char * src2, ... ) throw()
228 templatestring.assign(Singleton<MessageControl>::getInstance()->select(src1, src2, vl));
232 /*****************************************************************************/
239 VerboseMessage::VerboseMessage(void) throw() : Message()
243 VerboseMessage::VerboseMessage(const char * src) throw() : Message(src)
247 VerboseMessage::VerboseMessage(const string & src) throw() : Message(src)
251 VerboseMessage::VerboseMessage(const char * src1, const char * src2, ... ) throw() : Message()
256 _initialize(src1, src2, vl);
260 VerboseMessage::~VerboseMessage(void) throw()
261 { Singleton< VerboseControl >::getInstance()->operator << (str()); }
263 /*****************************************************************************/
266 * 例外メッセージ用文字列整形ヘルパークラス
270 ExceptionMessage::ExceptionMessage(const char * src) throw() : Message(src), level(DEFAULT)
274 ExceptionMessage::ExceptionMessage(const std::string & src) throw() : Message(src), level(DEFAULT)
278 ExceptionMessage::ExceptionMessage(const char * src1, const char * src2, ...) throw() : Message(), level(DEFAULT)
283 _initialize(src1, src2, vl);
287 ExceptionMessage::ExceptionMessage(enum tagLevel _level) throw() : Message(), level(_level)
291 ExceptionMessage::ExceptionMessage(enum tagLevel _level, const char * src) throw() : Message(src), level(_level)
295 ExceptionMessage::ExceptionMessage(enum tagLevel _level, const std::string & src) throw() : Message(src), level(_level)
299 ExceptionMessage::ExceptionMessage(enum tagLevel _level, const char * src1, const char * src2, ...) throw() : Message(), level(_level)
304 _initialize(src1, src2, vl);
308 ExceptionMessage::ExceptionMessage(const ExceptionMessage & src) throw() : Message(src), level(src.level)
312 /*****************************************************************************/
315 * デバッグメッセージ用文字列整形ヘルパークラス
319 DebugMessage::DebugMessage(string src) throw() : Formatter(src)
323 DebugMessage::~DebugMessage(void) throw()
324 { Singleton<DebugControl>::getInstance()->operator << (str()); }