kernel_cfg.cへの出力情報生成ファンクタの関数呼び出し演算子
- 引数:
-
| pinib | 初期化ブロック情報へのスマートポインタ |
- 戻り値:
- 出力する文字列を返す
コンストラクタで受け取った書式化文字列に基づいて pinib が指す初期化情報を 書式化します。 書式化文字列に含まれる '@' に続く文字列は初期化ブロックのフィールド名を 表します。 '@' 以降のフィールド名は kernel_cfg::initial_block::get に渡され、 対応するフィールドの値を取得します。
フィールド名には、先頭のみ'$', '', '#'が含まれても構いません。2文字目以降 は英数字または下線でなければなりません。 フィールド名の直後に英数字や下線が続く場合、'\'で区切ることができます。 この場合、区切りに用いた'\'は無視されます。
specified_object.cpp の 65 行で定義されています。 00066 {
00067 std::string str;
00068 std::string::const_iterator iter( format_.begin() ), last( format_.end() );
00069 while ( iter != last )
00070 {
00071 char ch = *iter;
00072 if ( ch != '@' )
00073 {
00074 str += ch;
00075 ++iter;
00076 }
00077 else
00078 {
00079 std::string key;
00080 switch ( *++iter )
00081 {
00082 case '@':
00083 str += '@';
00084 ++iter;
00085 continue;
00086 case '$':
00087 case '%':
00088 case '#':
00089 key = *iter;
00090 ++iter;
00091 break;
00092 }
00093 while ( iter != last )
00094 {
00095 ch = *iter;
00096 if ( !std::isalnum( static_cast<unsigned char>( ch ) ) && ch != '_' )
00097 {
00098 if ( ch == '\\' )
00099 {
00100 ++iter;
00101 }
00102 break;
00103 }
00104 key += ch;
00105 ++iter;
00106 }
00107 if ( key == "id" )
00108 {
00109 str += boost::lexical_cast<std::string>( pinib->id() );
00110 }
00111 else
00112 {
00113 str += pinib->get( key );
00114 }
00115 }
00116 }
00117 return str;
00118 }
|