# feature-access

The gdalheaders API uses the following (pseudo-code) schemes for feature access.

The different feature loops, see https://github.com/dis-organization/dirigible/issues/5

### ALL

Get all the feature thingys.

      double   nFeature = gdalheaders::force_layer_feature_count(poLayer);
      List/Vector out (nFeature);

      double ii = 0;
      while( (poFeature = poLayer->GetNextFeature()) != NULL ) {
       out[ii] = poFeature-><something>;
       OGRFeature::DestroyFeature(poFeature);
       ii++;
      }

### IJ

Get a subset of feature thingys i:j - their positional index.

For `c(0, 0)` get the first feature, for `c(0, n - 1)` get all of them. For `c(0, -1)` that is a special case, there are no features.

      ListVector out(ij[1] - ij[0] + 1);
      double cnt = 0;
      double ii = 0;
      while( (poFeature = poLayer->GetNextFeature()) != NULL ) {
        if (ii == ij[0] || (ii > ij[0] && ii <= ij[1])) {
          out[cnt] = poFeature-><something>;
          cnt++;
        }
        ii++;
        OGRFeature::DestroyFeature(poFeature);
      }

### IA

Get a subset of feature things, arbitrary i (in order) - their positional index

      ListVector out(ia.length());
      double ii = 0;
      double cnt = 0;
      while( (poFeature = poLayer->GetNextFeature()) != NULL ) {
        if (ii == ia[cnt]) {
          out[cnt] = poFeature-><something>;
          cnt++;
        }
        ii++;
        OGRFeature::DestroyFeature(poFeature);
      }

## FA

Get a subset of feature thingys arbitrary FID (order irrelevant) - their FID unique names

      List out(fa.length());

      for (double ii = 0; ii < fa.length(); ii++) {
        GIntBig feature_id = (GIntBig)fa[ii];
          poFeature = poLayer->GetFeature(feature_id);