Go to the documentation of this file.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
00039 #include "../Property.hpp"
00040 #include "../PropertyBag.hpp"
00041 #include "VectorComposition.hpp"
00042 #include "../Logger.hpp"
00043 #include <ostream>
00044 #include <sstream>
00045 #include "Types.hpp"
00046
00047 namespace RTT {
00048 namespace types {
00049 using namespace detail;
00050
00051 bool composeProperty(const PropertyBag& bag, std::vector<double>& result)
00052 {
00053 TypeInfoRepository::shared_ptr tir = Types();
00054 if ( tir->type( bag.getType()) == tir->getTypeInfo<std::vector<double> >() ) {
00055 Property<double>* comp;
00056 int dimension = bag.size();
00057 result.resize( dimension );
00058
00059
00060 int size_correction = 0;
00061 for (int i = 0; i < dimension ; i++) {
00062 PropertyBase* element = bag.getItem( i );
00063 comp = dynamic_cast< Property<double>* >( element );
00064 if ( comp == 0 ) {
00065
00066 if ( element->getName() == "Size" ) {
00067
00068 size_correction += 1;
00069 continue;
00070 }
00071 Logger::log() << Logger::Error << "Aborting composition of Property< vector<double> > "
00072 << ": Exptected data element "<< i << " to be of type double"
00073 <<" got type " << element->getType()
00074 <<Logger::endl;
00075 return false;
00076 }
00077 result[ i - size_correction ] = comp->get();
00078 }
00079 result.resize( dimension - size_correction );
00080 }
00081 else {
00082 Logger::log() << Logger::Error << "Composing Property< std::vector<double> > :"
00083 << " type mismatch, got type '"<< bag.getType()
00084 << "', expected type 'array'."<<Logger::endl;
00085 return false;
00086 }
00087 return true;
00088 }
00089
00090
00091 }};
00092