クラス toppers::itron::fdmp::cfg_contents機能分散マルチプロセッサ向けコンテンツを格納するためのクラス
[詳細]
#include "toppers/itron/fdmp/cfg_contents.hpp"
toppers::itron::fdmp::cfg_contentsに対する継承グラフ
[凡例]toppers::itron::fdmp::cfg_contentsのコラボレーション図
[凡例]すべてのメンバ一覧
説明
機能分散マルチプロセッサ向けコンテンツを格納するためのクラス
cfg_contents.hpp の 57 行で定義されています。
コンストラクタとデストラクタ
toppers::itron::fdmp::cfg_contents::cfg_contents |
( |
bool |
ucn = false , |
|
|
codeset_t |
codeset = ascii |
|
) |
[inline, explicit] |
|
toppers::itron::fdmp::cfg_contents::cfg_contents |
( |
const std::string & |
name, |
|
|
bool |
ucn = false , |
|
|
codeset_t |
codeset = ascii |
|
) |
[inline, explicit] |
|
関数
const boost::shared_ptr< std::vector< boost::shared_ptr< itron::cfg_contents > > > toppers::itron::fdmp::cfg_contents::do_classify |
( |
bool |
ucn, |
|
|
codeset_t |
codeset |
|
) |
const [protected, virtual] |
|
|
マルチプロセッサ向けカーネルに対する do_classify 関数では、ローカルクラス( cfg_group として管理)をクラスごとに仕分けし、クラスID番号を割付けます。 その後、クラスごとに出力先ディレクトリを作成し、"class_id.h"を生成します。
toppers::itron::cfg_contentsを再定義しています。
cfg_contents.cpp の 68 行で定義されています。
参照先 toppers::itron::cfg_contents::groups(). 00069 {
00070 typedef std::vector<boost::shared_ptr<itron::cfg_contents> > vector_t;
00071
00072
00073
00074 typedef std::map<std::string, cfg_group::object_container > map_t;
00075
00076 boost::shared_ptr<vector_t> v( new vector_t );
00077 map_t m;
00078 class_id cls_id;
00079
00080
00081
00082 for ( group_container::const_iterator iter( groups().begin() ), last( groups().end() ); iter != last; ++iter )
00083 {
00084 boost::shared_ptr<cfg_group> group( *iter );
00085 std::string class_name( group->name() );
00086 std::copy( group->objects().begin(), group->objects().end(), std::back_inserter( m[class_name] ) );
00087 }
00088
00089
00090 map_t::iterator miter( m.find( "" ) );
00091 cfg_group::object_container globals;
00092 if ( miter != m.end() )
00093 {
00094 globals = miter->second;
00095 m.erase( miter );
00096 }
00097
00098
00099 for ( map_t::iterator iter( m.begin() ), last( m.end() ); iter != last; ++iter )
00100 {
00101
00102 std::copy( globals.begin(), globals.end(), std::back_inserter( iter->second ) );
00103
00104 if ( !kernel_object::assign_id( iter->second.begin(), iter->second.end() ) )
00105 {
00106 v.reset();
00107 return v;
00108 }
00109 }
00110
00111
00112 for ( map_t::const_iterator iter( m.begin() ), last( m.end() ); iter != last; ++iter )
00113 {
00114 group_container groups;
00115 boost::shared_ptr<cfg_group> g( new cfg_group );
00116
00117 g->objects( iter->second );
00118 groups.push_back( g );
00119 boost::shared_ptr<itron::cfg_contents> contents( new cfg_contents( iter->first, ucn, codeset ) );
00120 contents->groups( groups );
00121 v->push_back( boost::shared_ptr<itron::cfg_contents>( contents ) );
00122
00123 std::string class_name( iter->first );
00124 try
00125 {
00126 boost::filesystem::path dir( class_name, boost::filesystem::native );
00127 boost::filesystem::create_directory( dir );
00128 }
00129 catch ( boost::filesystem::filesystem_error& )
00130 {
00131 toppers::fatal( _( "cannot make directory `%1%\'" ) % class_name );
00132 }
00133 cls_id.load( contents );
00134 }
00135 cls_id.save();
00136 return v;
00137 }
関数の呼び出しグラフ:
|
bool toppers::itron::fdmp::cfg_contents::do_parse |
( |
text::const_iterator & |
next, |
|
|
text::const_iterator |
last, |
|
|
bool |
ucn, |
|
|
codeset_t |
codeset |
|
) |
[protected, virtual] |
|
|
テキストデータの解析
- 引数:
-
| next | テキストデータの先頭位置および解析終了位置の格納先 |
| last | テキストデータに終端位置+1 |
| ucn | 国際文字名に対応する場合は true を指定 |
| codeset | 文字集合( ascii, shift_jis, euc_jp, utf8 ) |
- 戻り値:
- 解析に成功した場合は true を返す
toppers::itron::cfg_contentsを再定義しています。
cfg_contents.cpp の 139 行で定義されています。
参照先 toppers::itron::specified_object< Policy >::build()・toppers::c_ident_p・toppers::itron::cfg_contents::groups()・toppers::itron::static_api::parse(). 00140 {
00141 text::const_iterator iter( next );
00142 while ( iter != last )
00143 {
00144 using namespace boost::spirit;
00145 parse_info<text::const_iterator> info;
00146 std::string kernel_class;
00147 std::string class_name;
00148
00149
00150 boost::shared_ptr<cfg_group> g1( new cfg_group );
00151 text::const_iterator i( iter );
00152 static_api api;
00153 if ( api.parse( i, last, ucn, codeset ) )
00154 {
00155 boost::shared_ptr<kernel_object> obj( include::build( api, g1->objects() ) );
00156 if ( !!obj )
00157 {
00158 groups().push_back( g1 );
00159 iter = i;
00160 }
00161 }
00162 if ( iter == last )
00163 {
00164 break;
00165 }
00166
00167
00168 info = boost::spirit::parse( iter, last,
00169 lexeme_d[
00170 c_ident_p[ assign_a( kernel_class ) ] >> space_p >>
00171 c_ident_p[ assign_a( class_name ) ]
00172 ] >> '{',
00173 space_p
00174 );
00175 if ( !info.hit )
00176 {
00177 continue;
00178
00179
00180 }
00181 iter = info.stop;
00182
00183
00184 boost::shared_ptr<cfg_group> g2;
00185 bool new_group = true;
00186 for ( group_container::const_iterator iter2( groups().begin() ), last2( groups().end() ); iter2 != last2; ++iter2 )
00187 {
00188 if ( ( *iter2 )->name() == class_name && ( *iter2 )->group_type() == kernel_class )
00189 {
00190 g2 = *iter2;
00191 new_group = false;
00192 break;
00193 }
00194 }
00195 if ( new_group )
00196 {
00197 g2.reset( new cfg_group( class_name, kernel_class ) );
00198 }
00199 if ( !g2->parse( iter, last, ucn, codeset ) )
00200 {
00201 return false;
00202 }
00203
00204
00205 info = boost::spirit::parse( iter, last, ch_p( '}' ), space_p );
00206 if ( !info.hit )
00207 {
00208 error( get_text_line( info.stop ), _( "missing `}\'" ) );
00209 return false;
00210 }
00211 iter = info.stop;
00212
00213 if ( new_group )
00214 {
00215 groups().push_back( g2 );
00216 }
00217 }
00218 next = iter;
00219 return true;
00220 }
関数の呼び出しグラフ:
|
このクラスの説明は次のファイルから生成されました:
Copyright © 2006 by TAKAGI Nobuhisa.
このページは Wed Apr 12 16:32:06 2006 に Doxygen によって生成されました。
|
|