#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
