Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: S-101 driver 4 : * Purpose: Implements OGRS101LayerCompositeCurve 5 : * Author: Even Rouault <even dot rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2026, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_s101.h" 14 : 15 : /************************************************************************/ 16 : /* OGRS101LayerCompositeCurve() */ 17 : /************************************************************************/ 18 : 19 81 : OGRS101LayerCompositeCurve::OGRS101LayerCompositeCurve( 20 : OGRS101Dataset &oDS, const DDFRecordIndex &oIndex, 21 81 : OGRFeatureDefnRefCountedPtr poFeatureDefn) 22 81 : : OGRS101Layer(oDS, oIndex, std::move(poFeatureDefn)) 23 : { 24 81 : } 25 : 26 : /************************************************************************/ 27 : /* OGRS101LayerCompositeCurve::GetNextRawFeature() */ 28 : /************************************************************************/ 29 : 30 439 : OGRFeature *OGRS101LayerCompositeCurve::GetNextRawFeature() 31 : { 32 439 : if (m_nRecordIdx >= m_oIndex.GetCount()) 33 145 : return nullptr; 34 294 : ++m_nRecordIdx; 35 294 : return GetFeature(m_nRecordIdx); 36 : } 37 : 38 : /************************************************************************/ 39 : /* OGRS101LayerCompositeCurve::GetFeature() */ 40 : /************************************************************************/ 41 : 42 309 : OGRFeature *OGRS101LayerCompositeCurve::GetFeature(GIntBig nFID) 43 : { 44 309 : if (nFID < 1 || nFID > m_oIndex.GetCount()) 45 9 : return nullptr; 46 600 : auto poFeature = std::make_unique<OGRFeature>(m_poFeatureDefn.get()); 47 600 : if (!m_oDS.GetReader().FillFeatureCompositeCurve( 48 300 : m_oIndex, static_cast<int>(nFID) - 1, *poFeature)) 49 : { 50 6 : return nullptr; 51 : } 52 : 53 294 : poFeature->SetFID(nFID); 54 : 55 294 : return poFeature.release(); 56 : }