static int recurseDataSet ( gdcm::DataSet &ds, gdcm::File &F ) { if ( ds.IsEmpty() ) {return 0;} static const gdcm::Tag *start = BasicApplicationLevelConfidentialityProfileAttributes; static const gdcm::Tag *ptr,*end = start + nIDs; const gdcm::IOD& iod = defs.GetIODFromFile( F ); for(ptr = start; ptr != end; ++ptr) { const gdcm::Tag &tag = *ptr; if ( ds.FindDataElement( tag ) ) { basicProtection( tag, iod.GetTypeFromTag(defs, tag), ds ); } } gdcm::DataSet::ConstIterator it = ds.Begin(); for (; it != ds.End() ;) { gdcm::DataElement de = *it++; gdcm::VR vr = gdcm::DataSetHelper::ComputeVR( F, ds, de.GetTag() ); gdcm::SmartPointer<gdcm::SequenceOfItems> sqi = 0; if ( vr == gdcm::VR::SQ && (sqi = de.GetValueAsSQ()) ) { de.SetValue( *sqi ); de.SetVLToUndefined(); gdcm::SequenceOfItems::SizeType i; for (i = 1; i <= sqi->GetNumberOfItems(); i++ ) { gdcm::Item &item = sqi->GetItem( i ); gdcm::DataSet &nested = item.GetNestedDataSet(); recurseDataSet( nested, F ); } } ds.Replace( de ); // REPLACE } return 1; }