bool QgsMemoryProvider::deleteAttributes( const QgsAttributeIds& attributes ) { QList<int> attrIdx = attributes.toList(); qSort( attrIdx.begin(), attrIdx.end(), qGreater<int>() ); // delete attributes one-by-one with decreasing index for ( QList<int>::const_iterator it = attrIdx.constBegin(); it != attrIdx.constEnd(); ++it ) { int idx = *it; mFields.remove( idx ); for ( QgsFeatureMap::iterator fit = mFeatures.begin(); fit != mFeatures.end(); ++fit ) { QgsFeature& f = fit.value(); QgsAttributes attr = f.attributes(); attr.remove( idx ); f.setAttributes( attr ); } } return true; }
void QgsVectorLayerEditBuffer::updateChangedAttributes( QgsFeature &f ) { QgsAttributes attrs = f.attributes(); // remove all attributes that will disappear - from higher indices to lower for ( int idx = mDeletedAttributeIds.count() - 1; idx >= 0; --idx ) { attrs.remove( mDeletedAttributeIds[idx] ); } // adjust size to accommodate added attributes attrs.resize( attrs.count() + mAddedAttributes.count() ); // update changed attributes if ( mChangedAttributeValues.contains( f.id() ) ) { const QgsAttributeMap &map = mChangedAttributeValues[f.id()]; for ( QgsAttributeMap::const_iterator it = map.begin(); it != map.end(); ++it ) attrs[it.key()] = it.value(); } f.setAttributes( attrs ); }