PropertyBase.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 PI_PROPERTYBASE
00039 #define PI_PROPERTYBASE
00040
00041 #include <string>
00042 #include "CommandInterface.hpp"
00043 #include "DataSourceBase.hpp"
00044
00045 #ifdef ORO_PRAGMA_INTERFACE
00046 #pragma interface
00047 #endif
00048
00049 namespace RTT
00050 {
00051 namespace detail {
00052 class PropertyOperation;
00053 }
00054 class PropertyBagVisitor;
00055 class PropertyIntrospection;
00056
00061 class RTT_API PropertyBase
00062 {
00063 public:
00067 virtual ~PropertyBase();
00068
00076 PropertyBase( std::string name, std::string description);
00077
00081 PropertyBase();
00082
00087 const std::string& getName() const { return _name; }
00088
00093 void setName(const std::string& name);
00094
00099 const std::string& getDescription() const { return _description; }
00100
00105 void setDescription(const std::string& desc);
00106
00113 bool ready() const { return this->getDataSource(); }
00114
00119 virtual void identify( PropertyIntrospection* pi) = 0;
00120
00125 virtual void identify( PropertyBagVisitor* pi);
00126
00134 virtual bool update( const PropertyBase* other ) = 0;
00135
00142 virtual CommandInterface* updateCommand( const PropertyBase* other) = 0;
00143
00151 virtual bool refresh( const PropertyBase* other ) = 0;
00152
00159 virtual CommandInterface* refreshCommand( const PropertyBase* other) = 0;
00160
00168 virtual bool copy( const PropertyBase* other ) = 0;
00169
00175 virtual CommandInterface* copyCommand( const PropertyBase* other) = 0;
00176
00182 virtual PropertyBase* clone() const = 0;
00183
00189 virtual PropertyBase* create() const = 0;
00190
00195 virtual DataSourceBase::shared_ptr getDataSource() const = 0;
00196
00201 virtual std::string getType() const = 0;
00202
00206 virtual const TypeInfo* getTypeInfo() const = 0;
00207
00208 protected:
00212 std::string _name;
00213
00217 std::string _description;
00218 };
00219
00225 RTT_API std::ostream& operator<<(std::ostream &os, PropertyBase* p);
00226
00227
00228 }
00229 #endif