クラス toppers::itron::kernel_object_policy_base::generator

specified_object<Plociy> クラスが要求する Policy::generator ファンクタ [詳細]

#include "toppers/itron/kernel_object.hpp"

toppers::itron::kernel_object_policy_base::generatorのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

Public メソッド

 generator (const std::string &format)
const std::string operator() (boost::shared_ptr< kernel_cfg::initial_block > pinib)
 kernel_cfg.cへの出力情報生成ファンクタの関数呼び出し演算子

説明

specified_object<Plociy> クラスが要求する Policy::generator ファンクタ

specified_object.hpp333 行で定義されています。


関数

const std::string toppers::itron::kernel_object_policy_base::generator::operator() boost::shared_ptr< kernel_cfg::initial_block pinib  ) 
 

kernel_cfg.cへの出力情報生成ファンクタの関数呼び出し演算子

引数:
pinib 初期化ブロック情報へのスマートポインタ
戻り値:
出力する文字列を返す
コンストラクタで受け取った書式化文字列に基づいて pinib が指す初期化情報を 書式化します。 書式化文字列に含まれる '@' に続く文字列は初期化ブロックのフィールド名を 表します。 '@' 以降のフィールド名は kernel_cfg::initial_block::get に渡され、 対応するフィールドの値を取得します。

フィールド名には、先頭のみ'$', '', '#'が含まれても構いません。2文字目以降 は英数字または下線でなければなりません。 フィールド名の直後に英数字や下線が続く場合、'\'で区切ることができます。 この場合、区切りに用いた'\'は無視されます。

specified_object.cpp65 行で定義されています。

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" )  // "id"の場合だけget関数で取得できないので...
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     }


このクラスの説明は次のファイルから生成されました:
Copyright © 2006 by TAKAGI Nobuhisa.
このページは Wed Apr 12 16:32:06 2006 に Doxygen によって生成されました。