operationsi.h
来自「机器人开源项目orocos的源代码」· C头文件 代码 · 共 1,102 行 · 第 1/2 页
H
1,102 行
} virtual CORBA::Boolean fromString ( const char* value ) ACE_THROW_SPEC (( CORBA::SystemException )) { if ( !mset->getTypeInfo()->fromString( value, mset ) ) { RTT::log(RTT::Error) << "Corba::AssignableExpression: Could not assign string to "<<mset->getType() <<"." <<RTT::endlog() <<" Tried to assign as "<< RTT::DataSource<ResultType>::GetType() << " to native type "<< RTT::DataSource<SourceType>::GetType()<< RTT::endlog(); return false; } return true; } };// Boolean Specialisations, like in RTT::DataSource<bool>:template<>class Orocos_Expression_i<bool> : public virtual POA_RTT::Corba::Expression, public virtual PortableServer::RefCountServantBase{protected: RTT::DataSource<bool>::shared_ptr morig; RTT::DataSource<bool>::value_t last_value; PortableServer::POA_var mpoa;public: typedef bool SourceType; typedef bool ResultType; // Constructor Orocos_Expression_i (RTT::DataSource<bool>::shared_ptr orig, PortableServer::POA_ptr the_poa) : morig( orig ), last_value(), mpoa( PortableServer::POA::_duplicate(the_poa) ) {} PortableServer::POA_ptr _default_POA() { return PortableServer::POA::_duplicate(mpoa); } // Destructor virtual ~Orocos_Expression_i (void) {} virtual CORBA::Any* value ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return RTT::AnyConversion<bool>::createAny( last_value ); } virtual CORBA::Boolean evaluate ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { last_value = morig->get(); return last_value; } virtual CORBA::Any * get ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { last_value = morig->get(); return RTT::AnyConversion<bool>::createAny( last_value ); } virtual char * getType ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return CORBA::string_dup( morig->getType().c_str() ); } virtual char * toString ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { std::string result = morig->toString(); return CORBA::string_dup( result.c_str() ); } virtual char * getTypeName ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return CORBA::string_dup( morig->getTypeName().c_str() ); } virtual void destroyExpression() ACE_THROW_SPEC (( CORBA::SystemException )) { }};template<>class Orocos_AssignableExpression_i<bool> : public virtual POA_RTT::Corba::AssignableExpression, public virtual PortableServer::RefCountServantBase{ RTT::AssignableDataSource<bool>::shared_ptr massign; bool last_value; PortableServer::POA_var mpoa;public: typedef bool SourceType; typedef bool ResultType; // Constructor Orocos_AssignableExpression_i (RTT::AssignableDataSource<bool>::shared_ptr assign , PortableServer::POA_ptr the_poa) : massign( assign ), last_value(), mpoa( PortableServer::POA::_duplicate(the_poa) ) {} PortableServer::POA_ptr _default_POA() { return PortableServer::POA::_duplicate(mpoa); } // Destructor virtual ~Orocos_AssignableExpression_i (void) {} virtual CORBA::Boolean set ( const ::CORBA::Any & value ) ACE_THROW_SPEC (( CORBA::SystemException )) { return RTT::AnyConversion<bool>::update( value, massign->set() ); }\ virtual CORBA::Any* value ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return RTT::AnyConversion<bool>::createAny( last_value ); } virtual CORBA::Boolean evaluate ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { last_value = massign->evaluate(); return last_value; } virtual CORBA::Any * get ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { last_value =massign->get(); return RTT::AnyConversion<bool>::createAny( last_value ); } virtual char * getType ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return CORBA::string_dup( massign->getType().c_str() ); } virtual char * toString ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { std::string result = massign->toString(); return CORBA::string_dup( result.c_str() ); } virtual CORBA::Boolean fromString ( const char* value ) ACE_THROW_SPEC (( CORBA::SystemException )) { if ( !massign->getTypeInfo()->fromString( value, massign ) ) { RTT::log(RTT::Error) << "Corba::AssignableExpression: Could not assign string to "<<massign->getType() <<"." <<RTT::endlog() <<" Tried to assign as "<< RTT::DataSource<ResultType>::GetType() << " to native type "<< RTT::DataSource<SourceType>::GetType()<< RTT::endlog(); return false; } return true; } virtual char * getTypeName ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return CORBA::string_dup( massign->getTypeName().c_str() ); } virtual void destroyExpression() ACE_THROW_SPEC (( CORBA::SystemException )) { }};class Orocos_Action_i : public virtual POA_RTT::Corba::Action, public virtual PortableServer::RefCountServantBase{ RTT::MethodC morig; RTT::CommandInterface* mcom; PortableServer::POA_var mpoa;public: //Constructor Orocos_Action_i ( RTT::MethodC* orig, RTT::CommandInterface* com, PortableServer::POA_ptr the_poa ); PortableServer::POA_ptr _default_POA() { return PortableServer::POA::_duplicate(mpoa); } //Destructor virtual ~Orocos_Action_i (void); virtual CORBA::Boolean execute ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean executeAny ( const ::RTT::Corba::AnyArguments& args ) ACE_THROW_SPEC (( CORBA::SystemException ,::RTT::Corba::WrongNumbArgException ,::RTT::Corba::WrongTypeArgException )); virtual void reset ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual void destroyAction() ACE_THROW_SPEC (( CORBA::SystemException )) { }};/** * This class is nowhere used in Orocos (0.25.0) * The Orocos_AnyMethod_i is used instead to have a template-less * servant. */template<class T>class Orocos_Method_i : public virtual Orocos_Expression_i<T>, public virtual POA_RTT::Corba::Method{ protected: typedef T SourceType; typedef typename RTT::DataSource<T>::value_t ResultType; RTT::MethodC methodc; public: //Constructor Orocos_Method_i (RTT::MethodC orig, typename RTT::DataSource<SourceType>::shared_ptr datas, PortableServer::POA_ptr the_poa ) : Orocos_Expression_i<SourceType>( datas, the_poa ), methodc(orig) {} //Destructor virtual ~Orocos_Method_i (void) {} virtual CORBA::Boolean execute ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return this->evaluate(); } virtual CORBA::Boolean executeAny ( const ::RTT::Corba::AnyArguments& args ) ACE_THROW_SPEC (( CORBA::SystemException ,::RTT::Corba::WrongNumbArgException ,::RTT::Corba::WrongTypeArgException )) { RTT::MethodC mgen = methodc; try { for (size_t i =0; i != args.length(); ++i) mgen.arg( RTT::DataSourceBase::shared_ptr( new RTT::ValueDataSource<CORBA::Any_var>( new CORBA::Any( args[i] ) ))); // if not ready, not enough args were given, *guess* a one off error in the exception :-( if ( !mgen.ready() ) throw ::RTT::Corba::WrongNumbArgException( args.length()+1, args.length() ); this->morig = mgen.getDataSource(); return this->execute(); } catch ( RTT::wrong_number_of_args_exception& wna ) { throw ::RTT::Corba::WrongNumbArgException( wna.wanted, wna.received ); } catch ( RTT::wrong_types_of_args_exception& wta ) { throw ::RTT::Corba::WrongTypeArgException( wta.whicharg, wta.expected_.c_str(), wta.received_.c_str() ); } return 0; } virtual void reset( ) ACE_THROW_SPEC (( CORBA::SystemException )) { this->morig->reset(); }};class Orocos_AnyMethod_i : public virtual Orocos_AnyExpression_i, public virtual POA_RTT::Corba::Method{protected: RTT::MethodC mmethodc;public: virtual void copy( RTT::DataSourceBase::shared_ptr new_ds ) { morig = new_ds; } //Constructor Orocos_AnyMethod_i (RTT::MethodC orig, RTT::DataSourceBase::shared_ptr datas, PortableServer::POA_ptr the_poa ) : Orocos_AnyExpression_i( datas, the_poa ), mmethodc(orig) {} //Destructor virtual ~Orocos_AnyMethod_i (void) {} virtual CORBA::Boolean execute ( ) ACE_THROW_SPEC (( CORBA::SystemException )) { return this->evaluate(); } CORBA::Boolean executeAny ( const ::RTT::Corba::AnyArguments& args ) ACE_THROW_SPEC (( CORBA::SystemException ,::RTT::Corba::WrongNumbArgException ,::RTT::Corba::WrongTypeArgException )) { RTT::MethodC mgen = mmethodc; try { for (size_t i =0; i != args.length(); ++i) mgen.arg( RTT::DataSourceBase::shared_ptr( new RTT::ValueDataSource<CORBA::Any_var>( new CORBA::Any( args[i] ) ))); // if not ready, not enough args were given, *guess* a one off error in the exception :-( if ( !mgen.ready() ) throw ::RTT::Corba::WrongNumbArgException( args.length()+1, args.length() ); morig = mgen.getDataSource(); return this->evaluate(); } catch ( RTT::wrong_number_of_args_exception& wna ) { throw ::RTT::Corba::WrongNumbArgException( wna.wanted, wna.received ); } catch ( RTT::wrong_types_of_args_exception& wta ) { throw ::RTT::Corba::WrongTypeArgException( wta.whicharg, wta.expected_.c_str(), wta.received_.c_str() ); } return 0; } virtual void reset( ) ACE_THROW_SPEC (( CORBA::SystemException )) { this->morig->reset(); } virtual void destroyAction() ACE_THROW_SPEC (( CORBA::SystemException )) { }};class Orocos_Command_i : public virtual POA_RTT::Corba::Command, public virtual PortableServer::RefCountServantBase{protected: RTT::CommandC* morig; RTT::CommandC* mcomm; PortableServer::POA_var mpoa;public: //Constructor /** * Create a CORBA servant for a CommandC object. * @param orig A CommandC object being ready for receiving arg() calls. This is required * for executeAny(), such that new arguments can be provided. * @param c A CommandC object being ready for execute(). This is required for execute(). */ Orocos_Command_i (RTT::CommandC& orig,RTT::CommandC& c, PortableServer::POA_ptr the_poa); /** * Create a CORBA servant for a CommandC object without executeAny() support. */ Orocos_Command_i (RTT::DispatchInterface::shared_ptr orig, PortableServer::POA_ptr the_poa); PortableServer::POA_ptr _default_POA() { return PortableServer::POA::_duplicate(mpoa); } //Destructor virtual ~Orocos_Command_i (void); virtual CORBA::Boolean execute ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean executeAny ( const ::RTT::Corba::AnyArguments& args ) ACE_THROW_SPEC (( CORBA::SystemException ,::RTT::Corba::WrongNumbArgException ,::RTT::Corba::WrongTypeArgException )); virtual CORBA::Boolean sent ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean accepted ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean executed ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean valid ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean done ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual void reset ( ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual void destroyCommand() ACE_THROW_SPEC (( CORBA::SystemException ));};#endif /* INCLUDE_EXPRESSIONI_H_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?