#ifndef SDERASTERBAND_INCLUDED
#define SDERASTERBAND_INCLUDED

#include "gdal_sde.h"

/************************************************************************/
/* ==================================================================== */
/*                            SDERasterBand                             */
/* ==================================================================== */
/************************************************************************/
class SDEDataset;

class SDERasterBand : public GDALRasterBand
{
    friend class SDEDataset;

    private:
        const SE_RASBANDINFO* poBand;

        double                  MorphESRIRasterDepth( int gtype );
        GDALDataType            MorphESRIRasterType( int gtype );
        void                    ComputeColorTable( void );
        CPLErr                  InitializeBand( int nOverview );
        SE_QUERYINFO&           InitializeQuery( void );
        SE_RASCONSTRAINT&       InitializeConstraint (  long* nBlockXOff,
                                                        long* nBlockYOff);
        CPLErr                  QueryRaster( SE_RASCONSTRAINT& constraint );

        int                     nOverview;
        int                     nOverviews;
        long                    nBlockSize;
        double                  dfDepth;
        LONG                    nSDERasterType;
        SE_QUERYINFO            hQuery;
        SE_RASCONSTRAINT        hConstraint;
        GDALRasterBand**        papoOverviews;
        GDALColorTable*         poColorTable;

    public:
        SDERasterBand( SDEDataset* poDS,
                       int nBand,
                       int nOverview,
                       const SE_RASBANDINFO* band);

        ~SDERasterBand( void );

    virtual CPLErr IReadBlock( int, int, void * );
    virtual CPLErr GetStatistics( int bApproxOK, int bForce,
                                  double *pdfMin, double *pdfMax,
                                  double *pdfMean, double *pdfStdDev );
    virtual GDALDataType GetRasterDataType(void);
    virtual GDALColorTable *GetColorTable();
    virtual GDALColorInterp GetColorInterpretation();


    virtual double GetMinimum( int *pbSuccess );
    virtual double GetMaximum( int *pbSuccess );
    virtual int GetOverviewCount(void);
    virtual GDALRasterBand* GetOverview(int nOverview);

};

#endif
