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 ORO_CORELIB_TYPEINFO_HPP
00039 #define ORO_CORELIB_TYPEINFO_HPP
00040
00041 #include <vector>
00042 #include <string>
00043 #include "../base/DataSourceBase.hpp"
00044 #include "../base/ChannelElementBase.hpp"
00045
00046 namespace RTT
00047 { namespace types {
00048
00053 class RTT_API TypeInfo
00054 {
00055 protected:
00056 typedef std::vector<TypeBuilder*> Constructors;
00057 typedef std::vector<TypeTransporter*> Transporters;
00058 Constructors constructors;
00059 Transporters transporters;
00060 public:
00061 virtual ~TypeInfo();
00065 virtual const std::string& getTypeName() const = 0;
00066
00077 virtual bool installTypeInfoObject() = 0;
00078
00089 virtual base::AttributeBase* buildConstant(std::string name,base::DataSourceBase::shared_ptr, int sizehint) const;
00090 virtual base::AttributeBase* buildConstant(std::string name,base::DataSourceBase::shared_ptr) const = 0;
00096 virtual base::AttributeBase* buildVariable(std::string name,int sizehint) const;
00097 virtual base::AttributeBase* buildVariable(std::string name) const = 0;
00098
00103 virtual bool resize(base::DataSourceBase::shared_ptr arg, int size) const;
00104
00110 virtual base::DataSourceBase::shared_ptr construct(const std::vector<base::DataSourceBase::shared_ptr>& args) const;
00111
00117 virtual base::DataSourceBase::shared_ptr convert(base::DataSourceBase::shared_ptr arg) const;
00118
00122 virtual void addConstructor(TypeBuilder* tb);
00123
00128 virtual base::AttributeBase* buildAlias(std::string name, base::DataSourceBase::shared_ptr b ) const = 0;
00129
00133 virtual base::PropertyBase* buildProperty(const std::string& name, const std::string& desc, base::DataSourceBase::shared_ptr source = 0) const = 0;
00134
00138 virtual base::AttributeBase* buildAttribute(std::string name, base::DataSourceBase::shared_ptr source = 0 ) const = 0;
00139
00143 virtual base::DataSourceBase::shared_ptr buildValue() const = 0;
00144
00148 virtual base::DataSourceBase::shared_ptr buildReference(void* ptr) const = 0;
00149
00155 virtual base::DataSourceBase::shared_ptr buildActionAlias(base::ActionInterface* action, base::DataSourceBase::shared_ptr source) const = 0;
00167 virtual std::ostream& write(std::ostream& os, base::DataSourceBase::shared_ptr in ) const = 0;
00168
00173 virtual std::istream& read(std::istream& os, base::DataSourceBase::shared_ptr out ) const = 0;
00174
00178 virtual std::string toString( base::DataSourceBase::shared_ptr in ) const;
00179
00183 virtual bool fromString( const std::string& value, base::DataSourceBase::shared_ptr out ) const;
00184
00189 virtual bool isStreamable() const = 0;
00202 virtual std::vector<std::string> getMemberNames() const;
00203
00211 virtual base::DataSourceBase::shared_ptr getMember(base::DataSourceBase::shared_ptr item, const std::string& name) const;
00212
00219 virtual base::DataSourceBase::shared_ptr getMember(base::DataSourceBase::shared_ptr item,
00220 base::DataSourceBase::shared_ptr id) const;
00221
00240 virtual bool composeType( base::DataSourceBase::shared_ptr source, base::DataSourceBase::shared_ptr target) const = 0;
00241
00253 virtual base::DataSourceBase::shared_ptr decomposeType(base::DataSourceBase::shared_ptr source) const;
00254
00262 virtual base::DataSourceBase::shared_ptr convertType(base::DataSourceBase::shared_ptr source) const;
00263
00277 bool addProtocol(int protocol_id, TypeTransporter* tt);
00278
00284 TypeTransporter* getProtocol(int protocol_id) const;
00285
00289 bool hasProtocol(int protocol_id) const;
00290
00294 std::vector<int> getTransportNames() const;
00295
00296 virtual std::string getTypeIdName() const = 0;
00297
00302 virtual base::InputPortInterface* inputPort(std::string const& name) const = 0;
00303
00308 virtual base::OutputPortInterface* outputPort(std::string const& name) const = 0;
00309
00316 virtual base::ChannelElementBase::shared_ptr buildDataStorage(ConnPolicy const& policy) const = 0;
00317 virtual base::ChannelElementBase::shared_ptr buildChannelOutput(base::InputPortInterface& port) const = 0;
00318 virtual base::ChannelElementBase::shared_ptr buildChannelInput(base::OutputPortInterface& port) const = 0;
00319
00320 protected:
00328 void migrateProtocols(TypeInfo* orig);
00329 };
00330
00331 }}
00332
00333 #endif