ConditionComposite.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef CONDITIONCOMPOSITE_HPP
00039 #define CONDITIONCOMPOSITE_HPP
00040
00041 #include "ConditionInterface.hpp"
00042
00043 namespace RTT {
00044
00048 class RTT_API ConditionBinaryCompositeAND
00049 : public ConditionInterface
00050 {
00051 ConditionInterface* lhs;
00052 ConditionInterface* rhs;
00053 public:
00059 ConditionBinaryCompositeAND( ConditionInterface* l, ConditionInterface* r )
00060 : lhs( l ), rhs( r )
00061 {
00062 }
00063
00064 virtual ConditionInterface* clone() const
00065 {
00066 return new ConditionBinaryCompositeAND( lhs->clone(), rhs->clone() );
00067 }
00068
00069 ConditionBinaryCompositeAND* copy( std::map<const DataSourceBase*, DataSourceBase*>& alreadyCloned ) const {
00070 return new ConditionBinaryCompositeAND(lhs->copy(alreadyCloned),rhs->copy(alreadyCloned));
00071 }
00072
00073 virtual ~ConditionBinaryCompositeAND() {
00074 delete lhs;
00075 delete rhs;
00076 }
00077
00078 virtual bool evaluate() {
00079 if ( lhs->evaluate() )
00080 if ( rhs->evaluate() )
00081 return true;
00082 return false;
00083 }
00084
00085 virtual void reset()
00086 {
00087 lhs->reset();
00088 rhs->reset();
00089 }
00090 };
00091
00092
00093
00094
00095 class RTT_API ConditionBinaryCompositeOR
00096 : public ConditionInterface
00097 {
00098 ConditionInterface* lhs;
00099 ConditionInterface* rhs;
00100 public:
00106 ConditionBinaryCompositeOR( ConditionInterface* l, ConditionInterface* r )
00107 : lhs( l ), rhs( r )
00108 {
00109 }
00110
00111 virtual ConditionInterface* clone() const
00112 {
00113 return new ConditionBinaryCompositeOR( lhs->clone(), rhs->clone() );
00114 }
00115
00116 ConditionBinaryCompositeOR* copy( std::map<const DataSourceBase*, DataSourceBase*>& alreadyCloned ) const {
00117 return new ConditionBinaryCompositeOR(lhs->copy(alreadyCloned),rhs->copy(alreadyCloned));
00118 }
00119
00120 virtual ~ConditionBinaryCompositeOR() {
00121 delete lhs;
00122 delete rhs;
00123 }
00124
00125 virtual bool evaluate() {
00126 if ( lhs->evaluate() )
00127 return true;
00128 if ( rhs->evaluate() )
00129 return true;
00130 return false;
00131 }
00132
00133 virtual void reset()
00134 {
00135 lhs->reset();
00136 rhs->reset();
00137 }
00138 };
00139
00140 class RTT_API ConditionCompositeNOT
00141 : public ConditionInterface
00142 {
00143 ConditionInterface* cond;
00144 public:
00145 ConditionCompositeNOT( ConditionInterface* c )
00146 : cond( c )
00147 {
00148 }
00149 ~ConditionCompositeNOT();
00150 bool evaluate();
00151 ConditionCompositeNOT* clone() const;
00152 ConditionCompositeNOT* copy( std::map<const DataSourceBase*, DataSourceBase*>& alreadyCloned ) const;
00153 void reset();
00154 };
00155 }
00156
00157 #endif