clangmsgbuilder.cpp
来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 1,678 行 · 第 1/3 页
CPP
1,678 行
void MsgBuilder::add( Dir * dir ){ traceAdding< Dir >(); ItemType tmp; tmp.m_item.m_dir = dir; tmp.m_type = DIR; M_items.push( tmp );}void MsgBuilder::add( Cond * cond ){ traceAdding< Cond >(); ItemType tmp; tmp.m_item.m_cond = cond; tmp.m_type = COND; M_items.push( tmp );}void MsgBuilder::add( MsgBuilder::CondList * cond_list ){ traceAdding< CondList >(); ItemType tmp; tmp.m_item.m_cond_list = cond_list; tmp.m_type = CONDLIST; M_items.push( tmp );}void MsgBuilder::add( Token * token ){ traceAdding< Token >(); ItemType tmp; tmp.m_item.m_token = token; tmp.m_type = TOKEN; M_items.push( tmp );}void MsgBuilder::add( Def * def ){ traceAdding< Def >(); ItemType tmp; tmp.m_item.m_def = def; tmp.m_type = DEF; M_items.push( tmp );}void MsgBuilder::add( Region * region ){ traceAdding< Region >(); ItemType tmp; tmp.m_item.m_region = region; tmp.m_type = REG; M_items.push( tmp );}void MsgBuilder::add( Point * point ){ traceAdding< Point >(); ItemType tmp; tmp.m_item.m_point = point; tmp.m_type = POINT; M_items.push( tmp );}void MsgBuilder::add( UNum * unum ){ traceAdding< UNum >(); ItemType tmp; tmp.m_item.m_unum = unum; tmp.m_type = UNUM; M_items.push( tmp );}void MsgBuilder::add( BallMoveToken bmt ){ traceAdding< BallMoveToken >(); ItemType tmp; tmp.m_item.m_bmt = bmt; tmp.m_type = BMT; M_items.push( tmp );}void MsgBuilder::add( UNumSet * unum_set ){ traceAdding< UNumSet >(); ItemType tmp; tmp.m_item.m_unum_set = unum_set; tmp.m_type = UNUMSET; M_items.push( tmp );}void MsgBuilder::add( std::string * str ){ traceAdding< std::string >(); ItemType tmp; tmp.m_item.m_str = str; tmp.m_type = STR; M_items.push( tmp );}void MsgBuilder::add( RuleIDList * rid_list ){ traceAdding< RuleIDList >(); ItemType tmp; tmp.m_item.m_rule_id_list = rid_list; tmp.m_type = RIDLIST; M_items.push( tmp );}voidMsgBuilder::add( ActivateRules * act_rules ){ traceAdding< ActivateRules >(); ItemType tmp; tmp.m_item.m_activate = act_rules; tmp.m_type = ACTIVATE; M_items.push( tmp );}voidMsgBuilder::add( Rule * rule ){ traceAdding< Rule >(); ItemType tmp; tmp.m_item.m_rule = rule; tmp.m_type = RULE; M_items.push( tmp );}voidMsgBuilder::add( RuleID rid ){ traceAdding< BallMoveToken >(); ItemType tmp; tmp.m_item.m_rid = new RuleID( rid ); tmp.m_type = RID; M_items.push( tmp );}voidMsgBuilder::emptyStack(){ while ( ! M_items.empty() ) { M_items.top().clear(); M_items.pop(); }}voidMsgBuilder::clear(){ M_msg.release(); M_min_ver = (unsigned int)-1; M_max_ver = 0;}voidMsgBuilder::onNoItems() const{ throw BuilderErr( __FILE__, __LINE__, "No item on stack." );}voidMsgBuilder::onWrongItem() const{ throw BuilderErr( __FILE__, __LINE__, "Wrong item on stack." );}voidMsgBuilder::onNotEmpty() const{ throw BuilderErr( __FILE__, __LINE__, "Stack is not empty when it should be." );}MsgBuilder::MsgBuilder() : M_min_ver( (unsigned int)-1 ), M_max_ver( 0 ), M_freeform_msg_size( 128 ){}MsgBuilder::~MsgBuilder(){ emptyStack();}Msg*MsgBuilder::getMsg(){ return M_msg.get();}const Msg *MsgBuilder::getMsg() const{ return M_msg.get();}std::auto_ptr< Msg >MsgBuilder::detatchMsg(){ return M_msg;}voidMsgBuilder::checkItemsEmpty() const{ if ( !M_items.empty() ) { onNotEmpty(); }}voidMsgBuilder::setMsg( Msg* msg ){ std::auto_ptr< Msg > tmp( msg ); M_msg = tmp; setVer( M_min_ver, M_max_ver ); checkItemsEmpty();}voidMsgBuilder::setTime( const int & time ){ if ( M_msg.get() != NULL ) { M_msg->setTimeSend( time ); }}voidMsgBuilder::setSide( const int & side ){ if ( M_msg.get() != NULL ) { M_msg->setSide( side ); }}voidMsgBuilder::setTimeRecv( const int & time ){ if ( M_msg.get() != NULL ) { M_msg->setTimeRecv( time ); }}voidMsgBuilder::setVer( const unsigned int & min, const unsigned int & max ){ if ( min == max ) { // Then the version is restriced to min/max if ( min < M_max_ver ) { M_min_ver = min; } else if ( min > M_min_ver ) { M_max_ver = min; } else if ( M_max_ver < M_min_ver ) { M_min_ver = M_max_ver = min; } } else { if ( min < M_min_ver ) { M_min_ver = min; } if ( max > M_max_ver ) { M_max_ver = max; } if ( min > max && M_max_ver < M_min_ver && min > M_max_ver && max < M_min_ver ) { M_min_ver = min; M_max_ver = max; } } if ( M_msg.get() != NULL ) { M_msg->setVer( min, max ); }}voidMsgBuilder::setFreeformMsgSize( const unsigned int len ){ M_freeform_msg_size = len;}unsigned intMsgBuilder::freeformMsgSize() const{ return M_freeform_msg_size;}voidMsgBuilder::buildMetaMsg(){ traceBuild< MetaMsg * >(); MetaMsg * msg( new MetaMsg() ); if ( checkIsItem( META ) ) { while ( isItem( META ) ) { msg->getTokens().push_front( getMetaToken().release() ); } } setMsg( msg );}voidMsgBuilder::buildMetaTokenVer( const double& ver ){ traceBuild< MetaTokenVer * >(); add( new MetaTokenVer( ver ) );}voidMsgBuilder::buildDefineMsg(){ traceBuild< DefineMsg * >(); DefineMsg* msg = new DefineMsg(); if ( checkIsItem( DEF ) ) { while ( isItem( DEF ) ) { msg->getDefs().push_front( getDef().release() ); } } setMsg( msg );}voidMsgBuilder::buildDefineCond( const std::string & name ){ traceBuild< DefCond * >(); add( new DefCond( name, checkAndGetCond() ) );}voidMsgBuilder::buildDefineDir( const std::string & name ){ traceBuild< DefDir * >(); add( new DefDir( name, checkAndGetDir() ) );}voidMsgBuilder::buildDefineReg( const std::string & name ){ traceBuild< DefReg * >(); add( new DefReg( name, checkAndGetRegion() ) );}voidMsgBuilder::buildDefineAct( const std::string & name ){ traceBuild< DefAct * >(); add( new DefAct( name, checkAndGetAction() ) );}voidMsgBuilder::buildFreeformMsg( const std::string & str ){ traceBuild< FreeformMsg * >(); setMsg( new FreeformMsg( str ) );}voidMsgBuilder::buildUnsuppMsg(){ traceBuild< UnsuppMsg * >(); setMsg( new UnsuppMsg() );}voidMsgBuilder::buildInfoMsg(){ traceBuild< InfoMsg * >(); InfoMsg * msg = new InfoMsg(); if ( checkIsItem( TOKEN ) ) { while ( isItem( TOKEN ) ) { msg->getTokens().push_front( getToken().release() ); } } setMsg( msg );}voidMsgBuilder::buildAdviceMsg(){ traceBuild< AdviceMsg * >(); AdviceMsg* msg = new AdviceMsg(); if ( checkIsItem( TOKEN ) ) { while ( isItem( TOKEN ) ) { msg->getTokens().push_front( getToken().release() ); } } setMsg( msg );}voidMsgBuilder::buildTokenRule( const int & ttl ){ traceBuild< TokRule * >(); TokRule * token = new TokRule( ttl ); if ( checkIsItem( DIR ) ) { while ( isItem( DIR ) ) { token->getDirs().push_front( getDir().release() ); } } token->set( checkAndGetCond() ); add( token );}voidMsgBuilder::buildTokenClear(){ traceBuild< TokClear * >(); add( new TokClear() );}voidMsgBuilder::buildActPos(){ traceBuild< ActPos * >(); add( new ActPos( checkAndGetRegion() ) );}voidMsgBuilder::buildActHome(){ traceBuild< ActHome * >(); add( new ActHome( checkAndGetRegion() ) );}voidMsgBuilder::buildActBallToReg(){ traceBuild< ActBallToReg * >(); BallMove bm; if ( checkIsItem( BMT ) ) { while( isItem( BMT ) ) bm.addToken( getBMT() ); } std::auto_ptr< Region > reg = checkAndGetRegion(); add( new ActBallToReg( reg, bm ) );}voidMsgBuilder::buildActBallToPlayer(){ traceBuild< ActBallToPlayer * >(); add( new ActBallToPlayer( *checkAndGetUNumSet() ) );}voidMsgBuilder::buildActMark(){ traceBuild< ActMark * >(); add( new ActMark( *checkAndGetUNumSet() ) );}voidMsgBuilder::buildActMarkLinePlayer(){ traceBuild< ActMarkLinePlayer * >(); add( new ActMarkLinePlayer( *checkAndGetUNumSet() ) );}voidMsgBuilder::buildActMarkLineReg(){ traceBuild< ActMarkLineReg * >(); add( new ActMarkLineReg( checkAndGetRegion() ) );}voidMsgBuilder::buildActOffsideLine(){ traceBuild< ActOffsidesLine * >(); add( new ActOffsidesLine( checkAndGetRegion() ) );}voidMsgBuilder::buildActHetType( const int & type ){ traceBuild< ActHetType * >(); add( new ActHetType( type ) );}voidMsgBuilder::buildActNamed( const std::string & name ){ traceBuild< ActNamed * >(); add( new ActNamed( name ) );}voidMsgBuilder::buildActPassReg(){ traceBuild< ActPassReg * >();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?