void SDTSFeature::ApplyATID( DDFField * poField ) { DDFSubfieldDefn *poMODN = poField->GetFieldDefn()->FindSubfieldDefn( "MODN" ); if( poMODN == nullptr ) { // CPLAssert( false ); return; } bool bUsualFormat = poMODN->GetWidth() == 4; const int nRepeatCount = poField->GetRepeatCount(); for( int iRepeat = 0; iRepeat < nRepeatCount; iRepeat++ ) { paoATID = reinterpret_cast<SDTSModId *>( CPLRealloc( paoATID, sizeof(SDTSModId)*(nAttributes+1) ) ); SDTSModId *poModId = paoATID + nAttributes; *poModId = SDTSModId(); if( bUsualFormat ) { const char * pabyData = poField->GetSubfieldData( poMODN, nullptr, iRepeat ); if( pabyData == nullptr || strlen(pabyData) < 5 ) return; memcpy( poModId->szModule, pabyData, 4 ); poModId->szModule[4] = '\0'; poModId->nRecord = atoi(pabyData + 4); poModId->szOBRP[0] = '\0'; } else { poModId->Set( poField ); } nAttributes++; } }
void SDTSFeature::ApplyATID( DDFField * poField ) { int nRepeatCount = poField->GetRepeatCount(); int bUsualFormat; DDFSubfieldDefn *poMODN; poMODN = poField->GetFieldDefn()->FindSubfieldDefn( "MODN" ); if( poMODN == NULL ) { CPLAssert( FALSE ); return; } bUsualFormat = poMODN->GetWidth() == 4; for( int iRepeat = 0; iRepeat < nRepeatCount; iRepeat++ ) { paoATID = (SDTSModId *) CPLRealloc(paoATID, sizeof(SDTSModId)*(nAttributes+1)); const char * pabyData; SDTSModId *poModId = paoATID + nAttributes; if( bUsualFormat ) { pabyData = poField->GetSubfieldData( poMODN, NULL, iRepeat ); memcpy( poModId->szModule, pabyData, 4 ); poModId->szModule[4] = '\0'; poModId->nRecord = atoi(pabyData + 4); poModId->szOBRP[0] = '\0'; } else { poModId->Set( poField ); } nAttributes++; } }