OGRFeature * OGRBNALayer::GetFeature( long nFID ) { OGRFeature *poFeature; BNARecord* record; int ok; if (nFID < 0) return NULL; FastParseUntil(nFID); if (nFID >= nFeatures) return NULL; VSIFSeekL( fpBNA, offsetAndLineFeaturesTable[nFID].offset, SEEK_SET ); curLine = offsetAndLineFeaturesTable[nFID].line; record = BNA_GetNextRecord(fpBNA, &ok, &curLine, TRUE, bnaFeatureType); poFeature = BuildFeatureFromBNARecord(record, nFID); BNA_FreeRecord(record); return poFeature; }
OGRFeature * OGRBNALayer::GetFeature( GIntBig nFID ) { if (nFID < 0 || !CPL_INT64_FITS_ON_INT32(nFID)) return NULL; FastParseUntil( static_cast<int>( nFID ) ); if (nFID >= nFeatures) return NULL; int ok; if( VSIFSeekL( fpBNA, offsetAndLineFeaturesTable[nFID].offset, SEEK_SET ) < 0 ) return NULL; curLine = offsetAndLineFeaturesTable[nFID].line; BNARecord* record = BNA_GetNextRecord(fpBNA, &ok, &curLine, TRUE, bnaFeatureType); OGRFeature *poFeature = BuildFeatureFromBNARecord(record, (int)nFID); BNA_FreeRecord(record); return poFeature; }