bool resize(base::DataSourceBase::shared_ptr arg, int size_rows, int size_columns) const { if (arg->isAssignable()) { typename internal::AssignableDataSource<T>::shared_ptr asarg = internal::AssignableDataSource<T>::narrow( arg.get() ); asarg->set().resize( size_rows, size_columns ); asarg->updated(); return true; } return false; }
virtual base::DataSourceBase::shared_ptr getMember(base::DataSourceBase::shared_ptr item, base::DataSourceBase::shared_ptr id) const { typename internal::AssignableDataSource<T>::shared_ptr data = boost::dynamic_pointer_cast< internal::AssignableDataSource<T> >( item ); if ( !data ) { if ( !item->isAssignable() ) log(Error) << "Can't return reference to members of type "<< this->getTypeName() <<" since given object is not assignable." <<endlog(); else log(Error) << "Consistency error: TypeInfo of type "<< this->getTypeName() <<" can't handle types of type "<< item->getType() <<endlog(); return base::DataSourceBase::shared_ptr(); } // discover if user gave us a part name or index: typename internal::DataSource<int>::shared_ptr id_indx = internal::DataSource<int>::narrow( id.get() ); typename internal::DataSource<string>::shared_ptr id_name = internal::DataSource<string>::narrow( id.get() ); if ( id_name ) { if ( id_name->get() == "size" ) { try { return internal::newFunctorDataSource(&get_size<T>, internal::GenerateDataSource()(item.get()) ); } catch(...) {} } if ( id_name->get() == "capacity" ) { try { return internal::newFunctorDataSource(&get_capacity<T>, internal::GenerateDataSource()(item.get()) ); } catch(...) {} } } if ( id_indx ) { try { return internal::newFunctorDataSource(&get_container_item<T>, internal::GenerateDataSource()(item.get(), id_indx.get() ) ); } catch(...) {} } if (id_name) { log(Error) << "MatrixTypeInfo: No such part : " << id_name->get() << endlog(); } if (id_indx) { log(Error) << "MatrixTypeInfo: Invalid index : " << id_indx->get() <<":"<< id_indx->getTypeName() << endlog(); } return base::DataSourceBase::shared_ptr(); }