clangmsgbuilder.cpp

来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 1,678 行 · 第 1/3 页

CPP
1,678
字号
// -*-c++-*-/***************************************************************************                               clangmsgbuilder.cc                      Class for building a clang message                             -------------------    begin                : 25-FEB-2002    copyright            : (C) 2002 by The RoboCup Soccer Server                           Maintenance Group.    email                : sserver-admin@lists.sourceforge.net***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU LGPL as published by the Free Software  * *   Foundation; either version 2 of the License, or (at your option) any  * *   later version.                                                        * *                                                                         * ***************************************************************************/#include "clangmsgbuilder.h"#include "region.h"#include "clangmsg.h"#include "clangmetamsg.h"#include "clangfreeformmsg.h"#include "clangunsuppmsg.h"#include "clangrulemsg.h"#include "clangdelmsg.h"#include "clanginfomsg.h"#include "clangadvicemsg.h"#include "clangdefmsg.h"#include "coach_lang_comp.h"#include "rule.h"namespace rcss {namespace clang {template< typename X >inlinevoidtraceBuild(){#ifdef DEBUG    std::cout << "Building: " << typeid( X ).name() << std::endl;#endif}template< typename X >inlinevoidtraceRemoving(){#ifdef DEBUG    std::cout << "Removing: " << typeid( X ).name() << std::endl;#endif}template< typename X >inlinevoidtraceAdding(){#ifdef DEBUG    std::cout << "Adding: " << typeid( X ).name() << std::endl;#endif}voidMsgBuilder::ItemType::clear(){    switch ( m_type ) {    case NONE:        break;    case META:        delete m_item.m_meta_token;        break;    case ACTION:        delete m_item.m_action;        break;    case DIR:        delete m_item.m_dir;        break;    case COND:        delete m_item.m_cond;        break;    case CONDLIST:        delete m_item.m_cond_list;        break;    case TOKEN:        delete m_item.m_token;        break;    case DEF:        delete m_item.m_def;        break;    case REG:        delete m_item.m_region;        break;    case POINT:        delete m_item.m_point;        break;    case UNUM:        delete m_item.m_unum;        break;    case BMT:        break;    case UNUMSET:        delete m_item.m_unum_set;        break;    case STR:        delete m_item.m_str;        break;    case RIDLIST:        delete m_item.m_rule_id_list;        break;    case ACTIVATE:        delete m_item.m_activate;        break;    case RULE:        delete m_item.m_rule;        break;    case RID:        break;    }}std::auto_ptr< MetaToken >MsgBuilder::getMetaToken(){    traceRemoving< MetaToken >();    std::auto_ptr< MetaToken > rval( M_items.top().m_item.m_meta_token );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Action >MsgBuilder::getAction(){    traceRemoving< Action >();    std::auto_ptr< Action > rval( M_items.top().m_item.m_action );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Dir >MsgBuilder::getDir(){    traceRemoving< Dir >();    std::auto_ptr< Dir > rval( M_items.top().m_item.m_dir );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Cond >MsgBuilder::getCond(){    traceRemoving< Cond >();    std::auto_ptr< Cond > rval( M_items.top().m_item.m_cond );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< MsgBuilder::CondList >MsgBuilder::getCondList(){    traceRemoving< CondList >();    std::auto_ptr< CondList > rval( M_items.top().m_item.m_cond_list );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Token >MsgBuilder::getToken(){    traceRemoving< Token >();    std::auto_ptr< Token > rval( M_items.top().m_item.m_token );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Def >MsgBuilder::getDef(){    traceRemoving< Def >();    std::auto_ptr< Def > rval( M_items.top().m_item.m_def );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Region >MsgBuilder::getRegion(){    traceRemoving< Region >();    std::auto_ptr< Region > rval( M_items.top().m_item.m_region );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Point >MsgBuilder::getPoint(){    traceRemoving< Point >();    std::auto_ptr< Point > rval( M_items.top().m_item.m_point );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< UNum >MsgBuilder::getUNum(){    traceRemoving< UNum >();    std::auto_ptr< UNum > rval( M_items.top().m_item.m_unum );    //M_items.top().clear();    M_items.pop();    return rval;}BallMoveTokenMsgBuilder::getBMT(){    traceRemoving< BallMoveToken >();    BallMoveToken rval( M_items.top().m_item.m_bmt );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< UNumSet >MsgBuilder::getUNumSet(){    traceRemoving< UNumSet >();    std::auto_ptr< UNumSet > rval( M_items.top().m_item.m_unum_set );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< std::string >MsgBuilder::getStr(){    traceRemoving< std::string >();    std::auto_ptr< std::string > rval( M_items.top().m_item.m_str );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< RuleIDList >MsgBuilder::getRIDList(){    traceRemoving< RuleIDList >();    std::auto_ptr< RuleIDList > rval( M_items.top().m_item.m_rule_id_list );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< ActivateRules >MsgBuilder::getActivateRules(){    traceRemoving< ActivateRules >();    std::auto_ptr< ActivateRules > rval( M_items.top().m_item.m_activate );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< Rule >MsgBuilder::getRule(){    traceRemoving< Rule >();    std::auto_ptr< Rule > rval( M_items.top().m_item.m_rule );    //M_items.top().clear();    M_items.pop();    return rval;}std::auto_ptr< RuleID >MsgBuilder::getRID(){    traceRemoving< RuleID >();    std::auto_ptr< RuleID > rval( M_items.top().m_item.m_rid );    //M_items.top().clear();    M_items.pop();    return rval;}boolMsgBuilder::isItem( Types type ) const{    return ( ! M_items.empty()             && M_items.top().m_type == type );}boolMsgBuilder::checkIsItem( Types type ) const{    if ( !M_items.empty() )    {        if ( M_items.top().m_type == type )        {            return true;        }        else        {            onWrongItem();        }    }    else    {        onNoItems();    }    return false;}std::auto_ptr< MetaToken >MsgBuilder::checkAndGetMetaToken(){    if ( checkIsItem( META ) )    {        return getMetaToken();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< MetaToken >();}std::auto_ptr< Action >MsgBuilder::checkAndGetAction(){    if ( checkIsItem( ACTION ) )    {        return getAction();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Action >();}std::auto_ptr< Dir >MsgBuilder::checkAndGetDir(){    if ( checkIsItem( DIR ) )    {        return getDir();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Dir >();}std::auto_ptr< Cond >MsgBuilder::checkAndGetCond(){    if ( checkIsItem( COND ) )    {        return getCond();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Cond >();}std::auto_ptr< MsgBuilder::CondList >MsgBuilder::checkAndGetCondList(){    if ( checkIsItem( CONDLIST ) )    {        return getCondList();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< CondList >( new CondList() );}std::auto_ptr< Token >MsgBuilder::checkAndGetToken(){    if ( checkIsItem( TOKEN ) )    {        return getToken();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Token >();}std::auto_ptr< Def >MsgBuilder::checkAndGetDef(){    if ( checkIsItem( DEF ) )    {        return getDef();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Def >();}std::auto_ptr< Region >MsgBuilder::checkAndGetRegion(){    if ( checkIsItem( REG ) )    {        return getRegion();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Region >();}std::auto_ptr< Point >MsgBuilder::checkAndGetPoint(){    if ( checkIsItem( POINT ) )    {        return getPoint();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Point >();}std::auto_ptr< UNum >MsgBuilder::checkAndGetUNum(){    if ( checkIsItem( UNUM ) )    {        return getUNum();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< UNum >( new UNum() );}BallMoveTokenMsgBuilder::checkAndGetBMT(){    if ( checkIsItem( BMT ) )    {        return getBMT();    }    // no need for error handling as this is done by checkIsItem()    return BallMoveToken();}std::auto_ptr< UNumSet >MsgBuilder::checkAndGetUNumSet(){    if ( checkIsItem( UNUMSET ) )    {        return getUNumSet();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< UNumSet >( new UNumSet() );}std::auto_ptr< std::string >MsgBuilder::checkAndGetStr(){    if ( checkIsItem( STR ) )    {        return getStr();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< std::string >( new std::string() );}std::auto_ptr< RuleIDList >MsgBuilder::checkAndGetRIDList(){    if ( checkIsItem( RIDLIST ) )    {        return getRIDList();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< RuleIDList >();}std::auto_ptr< ActivateRules >MsgBuilder::checkAndGetActivateRules(){    if ( checkIsItem( ACTIVATE ) )    {        return getActivateRules();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< ActivateRules >();}std::auto_ptr< Rule >MsgBuilder::checkAndGetRule(){    if ( checkIsItem( RULE ) )    {        return getRule();    }    // no need for error handling as this is done by checkIsItem()    return std::auto_ptr< Rule >();}RuleIDMsgBuilder::checkAndGetRID(){    if ( checkIsItem( RID ) )    {        return *getRID();    }    // no need for error handling as this is done by checkIsItem()    return RuleID();}void MsgBuilder::add( MetaToken * meta ){    traceAdding< MetaToken >();    ItemType tmp;    tmp.m_item.m_meta_token = meta;    tmp.m_type = META;    M_items.push( tmp );}void MsgBuilder::add( Action * action ){    traceAdding< Action >();    ItemType tmp;    tmp.m_item.m_action = action;    tmp.m_type = ACTION;    M_items.push( tmp );}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?