GDAL: gdal_proxy.h Source File

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

# gdal_proxy.h

    00001 /******************************************************************************
    00002  * $Id: gdal_proxy.h $
    00003  *
    00004  * Project:  GDAL Core
    00005  * Purpose:  GDAL Core C++/Private declarations
    00006  * Author:   Even Rouault <even dot rouault at mines dash paris dot org>
    00007  *
    00008  ******************************************************************************
    00009  * Copyright (c) 2008, Even Rouault
    00010  *
    00011  * Permission is hereby granted, free of charge, to any person obtaining a
    00012  * copy of this software and associated documentation files (the "Software"),
    00013  * to deal in the Software without restriction, including without limitation
    00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
    00015  * and/or sell copies of the Software, and to permit persons to whom the
    00016  * Software is furnished to do so, subject to the following conditions:
    00017  *
    00018  * The above copyright notice and this permission notice shall be included
    00019  * in all copies or substantial portions of the Software.
    00020  *
    00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    00027  * DEALINGS IN THE SOFTWARE.
    00028  ****************************************************************************/
    00029
    00030 #ifndef GDAL_PROXY_H_INCLUDED
    00031 #define GDAL_PROXY_H_INCLUDED
    00032
    00033 #include "gdal.h"
    00034
    00035 #ifdef __cplusplus
    00036
    00037 #include "gdal_priv.h"
    00038 #include "cpl_hash_set.h"
    00039
    00040 /* ******************************************************************** */
    00041 /*                        GDALProxyDataset                              */
    00042 /* ******************************************************************** */
    00043
    00044 class CPL_DLL GDALProxyDataset : public GDALDataset
    00045 {
    00046     protected:
    00047         virtual GDALDataset *RefUnderlyingDataset() = 0;
    00048         virtual void UnrefUnderlyingDataset(GDALDataset* poUnderlyingDataset);
    00049
    00050         virtual CPLErr IBuildOverviews( const char *, int, int *,
    00051                                     int, int *, GDALProgressFunc, void * );
    00052         virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
    00053                                 void *, int, int, GDALDataType,
    00054                                 int, int *, int, int, int );
    00055     public:
    00056
    00057         virtual char      **GetMetadata( const char * pszDomain  );
    00058         virtual CPLErr      SetMetadata( char ** papszMetadata,
    00059                                         const char * pszDomain  );
    00060         virtual const char *GetMetadataItem( const char * pszName,
    00061                                             const char * pszDomain  );
    00062         virtual CPLErr      SetMetadataItem( const char * pszName,
    00063                                             const char * pszValue,
    00064                                             const char * pszDomain );
    00065
    00066         virtual void FlushCache(void);
    00067
    00068         virtual const char *GetProjectionRef(void);
    00069         virtual CPLErr SetProjection( const char * );
    00070
    00071         virtual CPLErr GetGeoTransform( double * );
    00072         virtual CPLErr SetGeoTransform( double * );
    00073
    00074         virtual void *GetInternalHandle( const char * );
    00075         virtual GDALDriver *GetDriver(void);
    00076         virtual char      **GetFileList(void);
    00077
    00078         virtual int    GetGCPCount();
    00079         virtual const char *GetGCPProjection();
    00080         virtual const GDAL_GCP *GetGCPs();
    00081         virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList,
    00082                                 const char *pszGCPProjection );
    00083
    00084         virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
    00085                                 int nBufXSize, int nBufYSize,
    00086                                 GDALDataType eDT,
    00087                                 int nBandCount, int *panBandList,
    00088                                 char **papszOptions );
    00089
    00090         virtual CPLErr          CreateMaskBand( int nFlags );
    00091
    00092 };
    00093
    00094 /* ******************************************************************** */
    00095 /*                         GDALProxyRasterBand                          */
    00096 /* ******************************************************************** */
    00097
    00098 class CPL_DLL GDALProxyRasterBand : public GDALRasterBand
    00099 {
    00100     protected:
    00101         virtual GDALRasterBand* RefUnderlyingRasterBand() = 0;
    00102         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00103
    00104         virtual CPLErr IReadBlock( int, int, void * );
    00105         virtual CPLErr IWriteBlock( int, int, void * );
    00106         virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
    00107                                 void *, int, int, GDALDataType,
    00108                                 int, int );
    00109
    00110     public:
    00111
    00112         virtual char      **GetMetadata( const char * pszDomain  );
    00113         virtual CPLErr      SetMetadata( char ** papszMetadata,
    00114                                         const char * pszDomain  );
    00115         virtual const char *GetMetadataItem( const char * pszName,
    00116                                             const char * pszDomain  );
    00117         virtual CPLErr      SetMetadataItem( const char * pszName,
    00118                                             const char * pszValue,
    00119                                             const char * pszDomain );
    00120         virtual CPLErr FlushCache();
    00121         virtual char **GetCategoryNames();
    00122         virtual double GetNoDataValue( int *pbSuccess = NULL );
    00123         virtual double GetMinimum( int *pbSuccess = NULL );
    00124         virtual double GetMaximum(int *pbSuccess = NULL );
    00125         virtual double GetOffset( int *pbSuccess = NULL );
    00126         virtual double GetScale( int *pbSuccess = NULL );
    00127         virtual const char *GetUnitType();
    00128         virtual GDALColorInterp GetColorInterpretation();
    00129         virtual GDALColorTable *GetColorTable();
    00130         virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0);
    00131
    00132         virtual CPLErr SetCategoryNames( char ** );
    00133         virtual CPLErr SetNoDataValue( double );
    00134         virtual CPLErr SetColorTable( GDALColorTable * );
    00135         virtual CPLErr SetColorInterpretation( GDALColorInterp );
    00136         virtual CPLErr SetOffset( double );
    00137         virtual CPLErr SetScale( double );
    00138         virtual CPLErr SetUnitType( const char * );
    00139
    00140         virtual CPLErr GetStatistics( int bApproxOK, int bForce,
    00141                                     double *pdfMin, double *pdfMax,
    00142                                     double *pdfMean, double *padfStdDev );
    00143         virtual CPLErr ComputeStatistics( int bApproxOK,
    00144                                         double *pdfMin, double *pdfMax,
    00145                                         double *pdfMean, double *pdfStdDev,
    00146                                         GDALProgressFunc, void *pProgressData );
    00147         virtual CPLErr SetStatistics( double dfMin, double dfMax,
    00148                                     double dfMean, double dfStdDev );
    00149         virtual CPLErr ComputeRasterMinMax( int, double* );
    00150
    00151         virtual int HasArbitraryOverviews();
    00152         virtual int GetOverviewCount();
    00153         virtual GDALRasterBand *GetOverview(int);
    00154         virtual GDALRasterBand *GetRasterSampleOverview( int );
    00155         virtual CPLErr BuildOverviews( const char *, int, int *,
    00156                                     GDALProgressFunc, void * );
    00157
    00158         virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
    00159                                 int nBufXSize, int nBufYSize,
    00160                                 GDALDataType eDT, char **papszOptions );
    00161
    00162         virtual CPLErr  GetHistogram( double dfMin, double dfMax,
    00163                             int nBuckets, int * panHistogram,
    00164                             int bIncludeOutOfRange, int bApproxOK,
    00165                             GDALProgressFunc, void *pProgressData );
    00166
    00167         virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax,
    00168                                             int *pnBuckets, int ** ppanHistogram,
    00169                                             int bForce,
    00170                                             GDALProgressFunc, void *pProgressData);
    00171         virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax,
    00172                                             int nBuckets, int *panHistogram );
    00173
    00174         virtual const GDALRasterAttributeTable *GetDefaultRAT();
    00175         virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * );
    00176
    00177         virtual GDALRasterBand *GetMaskBand();
    00178         virtual int             GetMaskFlags();
    00179         virtual CPLErr          CreateMaskBand( int nFlags );
    00180
    00181 };
    00182
    00183
    00184 /* ******************************************************************** */
    00185 /*                     GDALProxyPoolDataset                             */
    00186 /* ******************************************************************** */
    00187
    00188 typedef struct _GDALProxyPoolCacheEntry GDALProxyPoolCacheEntry;
    00189 class     GDALProxyPoolRasterBand;
    00190
    00191 class CPL_DLL GDALProxyPoolDataset : public GDALProxyDataset
    00192 {
    00193     private:
    00194         GIntBig          responsiblePID;
    00195
    00196         char            *pszProjectionRef;
    00197         double           adfGeoTransform[6];
    00198         int              bHasSrcProjection;
    00199         int              bHasSrcGeoTransform;
    00200         char            *pszGCPProjection;
    00201         int              nGCPCount;
    00202         GDAL_GCP        *pasGCPList;
    00203         CPLHashSet      *metadataSet;
    00204         CPLHashSet      *metadataItemSet;
    00205
    00206         GDALProxyPoolCacheEntry* cacheEntry;
    00207
    00208     protected:
    00209         virtual GDALDataset *RefUnderlyingDataset();
    00210         virtual void UnrefUnderlyingDataset(GDALDataset* poUnderlyingDataset);
    00211
    00212         friend class     GDALProxyPoolRasterBand;
    00213
    00214     public:
    00215         GDALProxyPoolDataset(const char* pszSourceDatasetDescription,
    00216                             int nRasterXSize, int nRasterYSize,
    00217                             GDALAccess eAccess = GA_ReadOnly,
    00218                             int bShared = FALSE,
    00219                             const char * pszProjectionRef = NULL,
    00220                             double * padfGeoTransform = NULL);
    00221         ~GDALProxyPoolDataset();
    00222
    00223         void         AddSrcBandDescription( GDALDataType eDataType, int nBlockXSize, int nBlockYSize);
    00224
    00225         virtual const char *GetProjectionRef(void);
    00226         virtual CPLErr SetProjection( const char * );
    00227
    00228         virtual CPLErr GetGeoTransform( double * );
    00229         virtual CPLErr SetGeoTransform( double * );
    00230
    00231         /* Special behaviour for the following methods : they return a pointer */
    00232         /* data type, that must be cached by the proxy, so it doesn't become invalid */
    00233         /* when the underlying object get closed */
    00234         virtual char      **GetMetadata( const char * pszDomain  );
    00235         virtual const char *GetMetadataItem( const char * pszName,
    00236                                             const char * pszDomain  );
    00237
    00238         virtual void *GetInternalHandle( const char * pszRequest );
    00239
    00240         virtual const char *GetGCPProjection();
    00241         virtual const GDAL_GCP *GetGCPs();
    00242 };
    00243
    00244 /* ******************************************************************** */
    00245 /*                  GDALProxyPoolRasterBand                             */
    00246 /* ******************************************************************** */
    00247
    00248 class GDALProxyPoolOverviewRasterBand;
    00249 class GDALProxyPoolMaskBand;
    00250
    00251 class CPL_DLL GDALProxyPoolRasterBand : public GDALProxyRasterBand
    00252 {
    00253     private:
    00254         CPLHashSet      *metadataSet;
    00255         CPLHashSet      *metadataItemSet;
    00256         char            *pszUnitType;
    00257         char           **papszCategoryNames;
    00258         GDALColorTable  *poColorTable;
    00259
    00260         int                               nSizeProxyOverviewRasterBand;
    00261         GDALProxyPoolOverviewRasterBand **papoProxyOverviewRasterBand;
    00262         GDALProxyPoolMaskBand            *poProxyMaskBand;
    00263
    00264         void Init();
    00265
    00266     protected:
    00267         virtual GDALRasterBand* RefUnderlyingRasterBand();
    00268         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00269
    00270         friend class GDALProxyPoolOverviewRasterBand;
    00271         friend class GDALProxyPoolMaskBand;
    00272
    00273     public:
    00274         GDALProxyPoolRasterBand(GDALProxyPoolDataset* poDS, int nBand,
    00275                                 GDALDataType eDataType,
    00276                                 int nBlockXSize, int nBlockYSize);
    00277         GDALProxyPoolRasterBand(GDALProxyPoolDataset* poDS,
    00278                                 GDALRasterBand* poUnderlyingRasterBand);
    00279         ~GDALProxyPoolRasterBand();
    00280
    00281         /* Special behaviour for the following methods : they return a pointer */
    00282         /* data type, that must be cached by the proxy, so it doesn't become invalid */
    00283         /* when the underlying object get closed */
    00284         virtual char      **GetMetadata( const char * pszDomain  );
    00285         virtual const char *GetMetadataItem( const char * pszName,
    00286                                             const char * pszDomain  );
    00287         virtual char **GetCategoryNames();
    00288         virtual const char *GetUnitType();
    00289         virtual GDALColorTable *GetColorTable();
    00290         virtual GDALRasterBand *GetOverview(int);
    00291         virtual GDALRasterBand *GetRasterSampleOverview( int nDesiredSamples); // TODO
    00292         virtual GDALRasterBand *GetMaskBand();
    00293
    00294 };
    00295
    00296 /* ******************************************************************** */
    00297 /*                  GDALProxyPoolOverviewRasterBand                     */
    00298 /* ******************************************************************** */
    00299
    00300 class GDALProxyPoolOverviewRasterBand : public GDALProxyPoolRasterBand
    00301 {
    00302     private:
    00303         GDALProxyPoolRasterBand *poMainBand;
    00304         int                      nOverviewBand;
    00305
    00306         GDALRasterBand          *poUnderlyingMainRasterBand;
    00307         int                      nRefCountUnderlyingMainRasterBand;
    00308
    00309     protected:
    00310         virtual GDALRasterBand* RefUnderlyingRasterBand();
    00311         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00312
    00313     public:
    00314         GDALProxyPoolOverviewRasterBand(GDALProxyPoolDataset* poDS,
    00315                                         GDALRasterBand* poUnderlyingOverviewBand,
    00316                                         GDALProxyPoolRasterBand* poMainBand,
    00317                                         int nOverviewBand);
    00318         ~GDALProxyPoolOverviewRasterBand();
    00319 };
    00320
    00321 /* ******************************************************************** */
    00322 /*                      GDALProxyPoolMaskBand                           */
    00323 /* ******************************************************************** */
    00324
    00325 class GDALProxyPoolMaskBand : public GDALProxyPoolRasterBand
    00326 {
    00327     private:
    00328         GDALProxyPoolRasterBand *poMainBand;
    00329
    00330         GDALRasterBand          *poUnderlyingMainRasterBand;
    00331         int                      nRefCountUnderlyingMainRasterBand;
    00332
    00333     protected:
    00334         virtual GDALRasterBand* RefUnderlyingRasterBand();
    00335         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00336
    00337     public:
    00338         GDALProxyPoolMaskBand(GDALProxyPoolDataset* poDS,
    00339                               GDALRasterBand* poUnderlyingMaskBand,
    00340                               GDALProxyPoolRasterBand* poMainBand);
    00341         ~GDALProxyPoolMaskBand();
    00342 };
    00343
    00344 #endif
    00345
    00346
    00347 /* ******************************************************************** */
    00348 /*            C types and methods declarations                          */
    00349 /* ******************************************************************** */
    00350
    00351
    00352 CPL_C_START
    00353
    00354 typedef struct GDALProxyPoolDatasetHS *GDALProxyPoolDatasetH;
    00355
    00356 GDALProxyPoolDatasetH CPL_DLL GDALProxyPoolDatasetCreate(const char* pszSourceDatasetDescription,
    00357                                                          int nRasterXSize, int nRasterYSize,
    00358                                                          GDALAccess eAccess, int bShared,
    00359                                                          const char * pszProjectionRef,
    00360                                                          double * padfGeoTransform);
    00361
    00362 void CPL_DLL GDALProxyPoolDatasetDelete(GDALProxyPoolDatasetH hProxyPoolDataset);
    00363
    00364 void CPL_DLL GDALProxyPoolDatasetAddSrcBandDescription( GDALProxyPoolDatasetH hProxyPoolDataset,
    00365                                                         GDALDataType eDataType,
    00366                                                         int nBlockXSize, int nBlockYSize);
    00367
    00368 CPL_C_END
    00369
    00370 #endif /* GDAL_PROXY_H_INCLUDED */

Generated for GDAL by 1.5.9.