Folks,

Some updates on the RFC 62.

Working on the code, I've managed to rewrite the C++ API almost completely OO. There is a need for only a bootstrap function, which constructs a new band object from a regular GDALRasterBand. The map algebra methods are methods of this object. The new band class is an interface class with only virtual methods. The actual implementations of the virtual methods are in templated classes, which take care of all datatypes etc.

The inner workings are pretty complex, for example two band operations need to go from an interface class to a template class and then to a second template class via one more interface class. The second template class has two datatypes and the first one datatype as template parameter. Control is moved from band level operation to block level operation with method pointers.

I've added support for nodata values and mask bands, so that, for example when summing two bands, nodata values and masked out cells can be ignored.

In the actual code I'm still moving the code from functions to methods, so it's a mixture but all the test and demo codes should work. OO makes the code much more readable, here's an example:

    GDALDriver *d = GetGDALDriverManager()->GetDriverByName("MEM");
    int w_band = 16, h_band = 10;
    GDALDataset *ds = d->Create("", w_band, h_band, 2, GDT_Int32, NULL);
    GDALRasterBand *b = ds->GetRasterBand(1);

    gma_band_t *bx = (gma_band_t*)gma_new_object(b, gma_band);
    bx->rand();
    bx->modulus(20);
    bx->print();
    bx->add(5);
    bx->print();

    GDALRasterBand *b2 = ds->GetRasterBand(2);
    gma_band_t *by = (gma_band_t*)gma_new_object(b2, gma_band);
    by->rand();
    by->modulus(10);
    by->print();
    bx->add(by);
    bx->print();

I'm expecting that the amount of code becomes less with this more OO approach and especially the switch tables of GDAL datatype are reduced to the minimum.

I've studied STL and I'm using it, but for a simple hash (integer type to object) I did not find I good solution in STL so I'm still using a DYI one.

Ari

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to