|
|
kernel_object.hpp説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2005 by Takagi Nobuhisa 00007 * 00008 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00009 * によって公表されている GNU General Public License の Version 2 に記 00010 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00011 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00012 * 利用と呼ぶ)することを無償で許諾する. 00013 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00014 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00015 * スコード中に含まれていること. 00016 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00017 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00018 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00019 * の無保証規定を掲載すること. 00020 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00021 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00022 * と. 00023 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00024 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00025 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00026 * 報告すること. 00027 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00028 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00029 * 00030 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00031 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00032 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00033 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00034 * 00035 */ 00036 00046 #ifndef TOPPERS_KERNEL_OBJECT_HPP_ 00047 #define TOPPERS_KERNEL_OBJECT_HPP_ 00048 00049 #include "toppers/itron/cfg_kernel_id.hpp" 00050 #include "toppers/itron/cfg_kernel_cfg.hpp" 00051 00052 namespace toppers 00053 { 00054 namespace itron 00055 { 00056 00057 class static_api; 00058 00063 class kernel_object 00064 { 00065 public: 00066 typedef boost::shared_ptr<kernel_cfg::initial_block> inib_ptr; 00067 typedef boost::shared_ptr<kernel_id::id_number> idb_ptr; 00068 typedef std::map<std::string, std::string> arg_type; 00069 typedef const boost::shared_ptr<kernel_object> ( *builder_type )( const static_api&, std::vector<boost::shared_ptr<kernel_object> >& ); 00070 00074 kernel_object() : id_( -1L ) {} 00078 virtual ~kernel_object() {} 00079 00084 const inib_ptr get_inib() const { return do_get_inib(); } 00089 const idb_ptr get_idb() const { return do_get_idb(); } 00090 const char* get_object_type() const { return do_get_object_type(); } 00091 bool has_id() const { return do_has_id(); } 00092 00097 long id() const { return id_; } 00102 const std::string& name() const { return name_; } 00103 const std::string& get( const std::string& key ) const; 00104 void set( const std::string& key, const std::string& value ); 00105 00111 bool analyze( const static_api& api ) { return do_analyze( api ); } 00112 bool analyze_id( const std::string& arg ); 00113 bool analyze_parameters( const static_api& api, const std::string& parameters ); 00114 00115 void swap( kernel_object& other ) throw(); 00116 00123 template <class Iterator> 00124 static bool assign_id( Iterator first, Iterator last ) 00125 { 00126 typedef std::vector<kernel_object*> vector_t; 00127 typedef std::map<std::string, vector_t> map_t; 00128 map_t map; 00129 for ( Iterator iter( first ); iter != last; ++iter ) 00130 { 00131 std::string key( ( *iter )->get_object_type() ); 00132 kernel_object* ptr = &**iter; 00133 map[key].push_back( ptr ); 00134 } 00135 for ( map_t::const_iterator iter2( map.begin() ), last2( map.end() ); iter2 != last2; ++iter2 ) 00136 { 00137 if ( !iter2->second.empty() && iter2->second.front()->has_id() ) // ID番号割付が必要な場合に限る 00138 { 00139 if ( !assign_id_helper( iter2->second.begin(), iter2->second.end() ) ) 00140 { 00141 return false; 00142 } 00143 } 00144 } 00145 return true; 00146 } 00147 00148 protected: 00149 virtual bool do_analyze( const static_api& api ) = 0; 00150 virtual const inib_ptr do_get_inib() const; 00151 virtual const idb_ptr do_get_idb() const; 00152 virtual const char* do_get_object_type() const = 0; 00153 virtual bool do_has_id() const = 0; 00154 virtual bool do_check_id_range( long id ) const = 0; 00155 00156 static bool assign_id_helper( std::vector<kernel_object*>::const_iterator first, std::vector<kernel_object*>::const_iterator last ); 00157 private: 00158 long id_; 00159 std::string name_; 00160 arg_type args_; 00161 }; 00162 00163 } 00164 } 00165 00166 #endif // ! TOPPERS_KERNEL_OBJECT_HPP_ Copyright © 2006 by TAKAGI Nobuhisa. このページは Wed Apr 12 16:31:57 2006 に Doxygen によって生成されました。 |