📄 specified_object.hpp
字号:
* 偙偺娭悢偱夝愅偡傞惷揑API偺忣曬偼丄 Policy::apis_ 偍傛傃 Policy::params_
* 偺俀斣栚偺梫慺乮攝楍揧偊帤偼 1 乣乯埲崀傪巊梡偡傞丅
*/
bool analyze_secondary( const static_api& api )
{
static_api::const_iterator iter( api.begin() );
for ( int i = 0; Policy::apis2_[i] != 0; i++ )
{
if ( *iter == Policy::apis2_[i] )
{
if ( id() < 0 && name().empty() )
{
break;
}
self_t t( *this );
if ( !t.analyze_parameters( api, Policy::params2_[i] ) )
{
break;
}
if ( id() != t.id() || name() != t.name() )
{
break;
}
swap( t );
return true;
}
}
return false;
}
/*!
* 幚嵺偺惷揑API偺夝愅偼埲壓偺庤弴偱峴偄傑偡丅
*
* -# Policy::analyze
* -# analyze_primary
* -# analyze_secondary
*
* 忋婰偺庤弴偺偆偪丄嵟弶偵惉岟偟偨乮 true 偑曉偭偰偒偨乯傕偺傪夝愅寢壥偲
* 偟偰嵦梡偟傑偡丅
* 夝愅偵惉岟偟偨応崌 Policy::verify 偵傛偭偰惍崌惈傪敾掕偟傑偡丅
*/
virtual bool do_analyze( const static_api& api )
{
bool result = Policy::analyze( api, *this );
result = result || analyze_primary( api );
result = result || analyze_secondary( api );
result = result && Policy::verify( api, *this );
return result;
}
virtual const char* do_get_object_type() const
{
return Policy::name_;
}
virtual bool do_has_id() const
{
return !!Policy::use_id_;
}
virtual bool do_check_id_range( long id ) const
{
if ( Policy::use_id_ )
{
return Policy::check_id_range( id );
}
return true;
}
};
/*!
* \struct kernel_object_policy_base kernel_object.hpp "toppers/itron/kernel_object.hpp"
* \brief specified_object 僥儞僾儗乕僩僋儔僗偵巜掕偡傞億儕僔乕偺婎掙僋儔僗
*
* specified_object 僥儞僾儗乕僩僋儔僗偺 Policy 偲偟偰巜掕偡傞宆偼偙偺僋儔僗偐傜
* 宲彸偡傞偙偲偱婰弎傪娙棯壔偡傞偙偲偑偱偒傑偡丅
*/
class kernel_object_policy_base
{
public:
/*!
* \class generator kernel_object.hpp "toppers/itron/kernel_object.hpp"
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generator 僼傽儞僋僞
*/
class generator
{
public:
explicit generator( const std::string& format ) : format_( format ) {}
const std::string operator()( boost::shared_ptr<kernel_cfg::initial_block> pinib );
private:
std::string format_;
};
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generate_regions 娭悢
* \param cfg kernel_cfg.c 惗惉忣曬
* \param ostr 弌椡僗僩儕乕儉
*
* 偙偺娭悢偼壗傕峴偄傑偣傫丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static void generate_regions( const kernel_cfg& cfg, std::ostream& ostr )
{
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generate_inits 娭悢
* \param cfg kernel_cfg.c 惗惉忣曬
* \param ostr 弌椡僗僩儕乕儉
*
* 偙偺娭悢偼壗傕峴偄傑偣傫丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static void generate_inits( const kernel_cfg& cfg, std::ostream& ostr )
{
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generate_variables 娭悢
* \param cfg kernel_cfg.c 惗惉忣曬
* \param ostr 弌椡僗僩儕乕儉
*
* 偙偺娭悢偼壗傕峴偄傑偣傫丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static void generate_variables( const kernel_cfg& cfg, std::ostream& ostr )
{
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generate_constants 娭悢
* \param cfg kernel_cfg.c 惗惉忣曬
* \param ostr 弌椡僗僩儕乕儉
*
* 偙偺娭悢偼壗傕峴偄傑偣傫丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static void generate_constants( const kernel_cfg& cfg, std::ostream& ostr )
{
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generate_assertions 娭悢
* \param cfg kernel_cfg.c 惗惉忣曬
* \param ostr 弌椡僗僩儕乕儉
*
* 偙偺娭悢偼壗傕峴偄傑偣傫丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static void generate_assertions( const kernel_cfg& cfg, std::ostream& ostr )
{
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::generate_extra_empty_labels 娭悢
* \param ostr 弌椡僗僩儕乕儉
*
* 偙偺娭悢偼壗傕峴偄傑偣傫丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static void generate_extra_empty_labels( std::ostream& ostr )
{
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::analyze 娭悢
* \param api 夝愅懳徾偺惷揑API忣曬
* \param obj 僇乕僱儖僆僽僕僃僋僩忣曬
* \return 忢偵 false 傪曉偡
*
* 偙偺娭悢偼忢偵 false 傪曉偟傑偡丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static bool analyze( const static_api& api, kernel_object& obj )
{
return false;
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::verify 娭悢
* \param api 夝愅懳徾偺惷揑API忣曬
* \param obj 僇乕僱儖僆僽僕僃僋僩忣曬
* \return 敾掕寢壥偑惓忢偱偁傟偽 true 傪曉偡丅
*
* 偙偺娭悢偼忢偵 true 傪曉偟傑偡丅
* 昁梫偵墳偠偰 kernel_object_policy_base 偐傜宲彸偟偨僋儔僗偱摨柤偺娭悢傪
* 掕媊偡傞偙偲偱丄摦嶌傪曄峏偡傞偙偲偑偱偒傑偡丅
* 偙偺娭悢偼壖憐娭悢偱偼側偄偨傔丄摦嶌偺曄峏偼惷揑偵夝寛偝傟傑偡丅
*/
static bool verify( const static_api& api, kernel_object& obj )
{
return true;
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::check_id_range 娭悢
* \param id 敾掕懳徾偺ID斣崋
* \return 敾掕寢壥偑惓忢偱偁傟偽 true 傪曉偡丅
* \note 偙偺娭悢偼 use_id_ != 0 偺応崌偩偗屇傃弌偝傟傑偡丅
*/
static bool check_id_range( long id )
{
return id > 0;
}
/*!
* \param chk "kernel_chk.srec"僼傽僀儖偺儘乕僪僨乕僞
* \param srec 儘乕僪儌僕儏乕儖乮S儗僐乕僪乯偺儘乕僪僨乕僞
* \param syms 儘乕僪儌僕儏乕儖偺僔儞儃儖僥乕僽儖
* \return 僠僃僢僋偵惉岟偟偨応崌偼 true 傪曉偡
*/
static bool check( const kernel_chk& chk, const s_record& srec, const nm_symbol& syms )
{
return true;
}
/*!
* \brief specified_object<Plociy> 僋儔僗偑梫媮偡傞 Policy::use_id_ 掕悢
*
* kernel_object_policy_base 僋儔僗偱偼 true 偵掕媊偟偰偄傑偡丅
* ID斣崋偱偼側偔丄僆僽僕僃僋僩斣崋傪巊梡偡傞応崌偼丄kernel_object_policy_base
* 偐傜宲彸偟偨僋儔僗偱摨柤偺儊儞僶傪嵞掕媊偟偰偔偩偝偄丅
*/
enum { use_id_ = true };
static const char name_[];
static const char symbol_[];
static const char* const apis_[];
static const char* const params_[];
static const char* const apis2_[];
static const char* const params2_[];
static const char* const prefix_;
static const char region_format_[];
static const char init_format_[];
};
}
}
#endif // ! TOPPERS_ITRON_SPECIFIED_OBJECT_HPP_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -