コード例 #1
0
ファイル: MatrixTypeInfo.hpp プロジェクト: FynnGamadeyo/rtt
 /**
  * Specialize to resize \a result given the size of \a source.
  */
 virtual bool composeTypeImpl(const PropertyBag& bag, typename internal::AssignableDataSource<T>::reference_t result) const
 {
     if ( bag.getType() == "Matrix" ) {
         unsigned int rows = bag.size();
         unsigned int cols = 0;
         // Get values
         for (unsigned int i = 1; i <= rows ; i++) {
             std::stringstream out;
             out << i;
             Property<PropertyBag>* row_bag =  bag.getProperty<PropertyBag>(out.str());
             if(row_bag==NULL){
                 log(Error)<<"Could not read row "<<i<<endlog();
                 return false;
             }
             Property<RowVector> row_p(row_bag->getName(),row_bag->getDescription());
             if(!(row_p.getDataSource()->composeType(row_bag->getDataSource()))){
                 log(Error)<<"Could not decompose row "<<i<<endlog();
                 return false;
             }
             if(row_p.ready()){
                 if(i==1){
                     cols = row_p.get().size();
                     result.resize(rows,cols);
                 } else
                     if(row_p.get().size()!=cols){
                         log(Error)<<"Row "<<i+1<<" size does not match matrix columns"<<endlog();
                         return false;
                     }
                 for ( unsigned int j=1; j <= row_p.get().size() ; j++){
                     result(i,j)=row_p.get()(j);
                 }
             }else{
                 log(Error)<<"Property of Row "<<i<<"was not ready for use"<<endlog();
                 return false;
             }
         }
     }else {
         log(Error) << "Composing Property< Matrix > :"
                    << " type mismatch, got type '"<< bag.getType()
                    << "', expected type "<<"Matrix."<<endlog();
         return false;
     }
     return true;
 }