- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

# gdal_proxy.h

    00001 /******************************************************************************
    00002  * $Id: gdal_proxy.h 28899 2015-04-14 09:27:00Z rouault $
    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-2014, Even Rouault <even dot rouault at mines-paris dot org>
    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 *, GSpacing, GSpacing, GSpacing,
    00055                                 GDALRasterIOExtraArg* psExtraArg );
    00056     public:
    00057
    00058         virtual char      **GetMetadataDomainList();
    00059         virtual char      **GetMetadata( const char * pszDomain  );
    00060         virtual CPLErr      SetMetadata( char ** papszMetadata,
    00061                                         const char * pszDomain  );
    00062         virtual const char *GetMetadataItem( const char * pszName,
    00063                                             const char * pszDomain  );
    00064         virtual CPLErr      SetMetadataItem( const char * pszName,
    00065                                             const char * pszValue,
    00066                                             const char * pszDomain );
    00067
    00068         virtual void FlushCache(void);
    00069
    00070         virtual const char *GetProjectionRef(void);
    00071         virtual CPLErr SetProjection( const char * );
    00072
    00073         virtual CPLErr GetGeoTransform( double * );
    00074         virtual CPLErr SetGeoTransform( double * );
    00075
    00076         virtual void *GetInternalHandle( const char * );
    00077         virtual GDALDriver *GetDriver(void);
    00078         virtual char      **GetFileList(void);
    00079
    00080         virtual int    GetGCPCount();
    00081         virtual const char *GetGCPProjection();
    00082         virtual const GDAL_GCP *GetGCPs();
    00083         virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList,
    00084                                 const char *pszGCPProjection );
    00085
    00086         virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
    00087                                 int nBufXSize, int nBufYSize,
    00088                                 GDALDataType eDT,
    00089                                 int nBandCount, int *panBandList,
    00090                                 char **papszOptions );
    00091
    00092         virtual CPLErr          CreateMaskBand( int nFlags );
    00093
    00094 };
    00095
    00096 /* ******************************************************************** */
    00097 /*                         GDALProxyRasterBand                          */
    00098 /* ******************************************************************** */
    00099
    00100 class CPL_DLL GDALProxyRasterBand : public GDALRasterBand
    00101 {
    00102     protected:
    00103         virtual GDALRasterBand* RefUnderlyingRasterBand() = 0;
    00104         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00105
    00106         virtual CPLErr IReadBlock( int, int, void * );
    00107         virtual CPLErr IWriteBlock( int, int, void * );
    00108         virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
    00109                                 void *, int, int, GDALDataType,
    00110                                 GSpacing, GSpacing, GDALRasterIOExtraArg* psExtraArg );
    00111
    00112     public:
    00113
    00114         virtual char      **GetMetadataDomainList();
    00115         virtual char      **GetMetadata( const char * pszDomain  );
    00116         virtual CPLErr      SetMetadata( char ** papszMetadata,
    00117                                         const char * pszDomain  );
    00118         virtual const char *GetMetadataItem( const char * pszName,
    00119                                             const char * pszDomain  );
    00120         virtual CPLErr      SetMetadataItem( const char * pszName,
    00121                                             const char * pszValue,
    00122                                             const char * pszDomain );
    00123         virtual CPLErr FlushCache();
    00124         virtual char **GetCategoryNames();
    00125         virtual double GetNoDataValue( int *pbSuccess = NULL );
    00126         virtual double GetMinimum( int *pbSuccess = NULL );
    00127         virtual double GetMaximum(int *pbSuccess = NULL );
    00128         virtual double GetOffset( int *pbSuccess = NULL );
    00129         virtual double GetScale( int *pbSuccess = NULL );
    00130         virtual const char *GetUnitType();
    00131         virtual GDALColorInterp GetColorInterpretation();
    00132         virtual GDALColorTable *GetColorTable();
    00133         virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0);
    00134
    00135         virtual CPLErr SetCategoryNames( char ** );
    00136         virtual CPLErr SetNoDataValue( double );
    00137         virtual CPLErr SetColorTable( GDALColorTable * );
    00138         virtual CPLErr SetColorInterpretation( GDALColorInterp );
    00139         virtual CPLErr SetOffset( double );
    00140         virtual CPLErr SetScale( double );
    00141         virtual CPLErr SetUnitType( const char * );
    00142
    00143         virtual CPLErr GetStatistics( int bApproxOK, int bForce,
    00144                                     double *pdfMin, double *pdfMax,
    00145                                     double *pdfMean, double *padfStdDev );
    00146         virtual CPLErr ComputeStatistics( int bApproxOK,
    00147                                         double *pdfMin, double *pdfMax,
    00148                                         double *pdfMean, double *pdfStdDev,
    00149                                         GDALProgressFunc, void *pProgressData );
    00150         virtual CPLErr SetStatistics( double dfMin, double dfMax,
    00151                                     double dfMean, double dfStdDev );
    00152         virtual CPLErr ComputeRasterMinMax( int, double* );
    00153
    00154         virtual int HasArbitraryOverviews();
    00155         virtual int GetOverviewCount();
    00156         virtual GDALRasterBand *GetOverview(int);
    00157         virtual GDALRasterBand *GetRasterSampleOverview( GUIntBig );
    00158         virtual CPLErr BuildOverviews( const char *, int, int *,
    00159                                     GDALProgressFunc, void * );
    00160
    00161         virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
    00162                                 int nBufXSize, int nBufYSize,
    00163                                 GDALDataType eDT, char **papszOptions );
    00164
    00165         virtual CPLErr  GetHistogram( double dfMin, double dfMax,
    00166                             int nBuckets, GUIntBig * panHistogram,
    00167                             int bIncludeOutOfRange, int bApproxOK,
    00168                             GDALProgressFunc, void *pProgressData );
    00169
    00170         virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax,
    00171                                             int *pnBuckets, GUIntBig ** ppanHistogram,
    00172                                             int bForce,
    00173                                             GDALProgressFunc, void *pProgressData);
    00174         virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax,
    00175                                             int nBuckets, GUIntBig *panHistogram );
    00176
    00177         virtual GDALRasterAttributeTable *GetDefaultRAT();
    00178         virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * );
    00179
    00180         virtual GDALRasterBand *GetMaskBand();
    00181         virtual int             GetMaskFlags();
    00182         virtual CPLErr          CreateMaskBand( int nFlags );
    00183
    00184         virtual CPLVirtualMem  *GetVirtualMemAuto( GDALRWFlag eRWFlag,
    00185                                                 int *pnPixelSpace,
    00186                                                 GIntBig *pnLineSpace,
    00187                                                 char **papszOptions );
    00188 };
    00189
    00190
    00191 /* ******************************************************************** */
    00192 /*                     GDALProxyPoolDataset                             */
    00193 /* ******************************************************************** */
    00194
    00195 typedef struct _GDALProxyPoolCacheEntry GDALProxyPoolCacheEntry;
    00196 class     GDALProxyPoolRasterBand;
    00197
    00198 class CPL_DLL GDALProxyPoolDataset : public GDALProxyDataset
    00199 {
    00200     private:
    00201         GIntBig          responsiblePID;
    00202
    00203         char            *pszProjectionRef;
    00204         double           adfGeoTransform[6];
    00205         int              bHasSrcProjection;
    00206         int              bHasSrcGeoTransform;
    00207         char            *pszGCPProjection;
    00208         int              nGCPCount;
    00209         GDAL_GCP        *pasGCPList;
    00210         CPLHashSet      *metadataSet;
    00211         CPLHashSet      *metadataItemSet;
    00212
    00213         GDALProxyPoolCacheEntry* cacheEntry;
    00214
    00215     protected:
    00216         virtual GDALDataset *RefUnderlyingDataset();
    00217         virtual void UnrefUnderlyingDataset(GDALDataset* poUnderlyingDataset);
    00218
    00219         friend class     GDALProxyPoolRasterBand;
    00220
    00221     public:
    00222         GDALProxyPoolDataset(const char* pszSourceDatasetDescription,
    00223                             int nRasterXSize, int nRasterYSize,
    00224                             GDALAccess eAccess = GA_ReadOnly,
    00225                             int bShared = FALSE,
    00226                             const char * pszProjectionRef = NULL,
    00227                             double * padfGeoTransform = NULL);
    00228         ~GDALProxyPoolDataset();
    00229
    00230         void         SetOpenOptions(char** papszOpenOptions);
    00231         void         AddSrcBandDescription( GDALDataType eDataType, int nBlockXSize, int nBlockYSize);
    00232
    00233         virtual const char *GetProjectionRef(void);
    00234         virtual CPLErr SetProjection( const char * );
    00235
    00236         virtual CPLErr GetGeoTransform( double * );
    00237         virtual CPLErr SetGeoTransform( double * );
    00238
    00239         /* Special behaviour for the following methods : they return a pointer */
    00240         /* data type, that must be cached by the proxy, so it doesn't become invalid */
    00241         /* when the underlying object get closed */
    00242         virtual char      **GetMetadata( const char * pszDomain  );
    00243         virtual const char *GetMetadataItem( const char * pszName,
    00244                                             const char * pszDomain  );
    00245
    00246         virtual void *GetInternalHandle( const char * pszRequest );
    00247
    00248         virtual const char *GetGCPProjection();
    00249         virtual const GDAL_GCP *GetGCPs();
    00250 };
    00251
    00252 /* ******************************************************************** */
    00253 /*                  GDALProxyPoolRasterBand                             */
    00254 /* ******************************************************************** */
    00255
    00256 class GDALProxyPoolOverviewRasterBand;
    00257 class GDALProxyPoolMaskBand;
    00258
    00259 class CPL_DLL GDALProxyPoolRasterBand : public GDALProxyRasterBand
    00260 {
    00261     private:
    00262         CPLHashSet      *metadataSet;
    00263         CPLHashSet      *metadataItemSet;
    00264         char            *pszUnitType;
    00265         char           **papszCategoryNames;
    00266         GDALColorTable  *poColorTable;
    00267
    00268         int                               nSizeProxyOverviewRasterBand;
    00269         GDALProxyPoolOverviewRasterBand **papoProxyOverviewRasterBand;
    00270         GDALProxyPoolMaskBand            *poProxyMaskBand;
    00271
    00272         void Init();
    00273
    00274     protected:
    00275         virtual GDALRasterBand* RefUnderlyingRasterBand();
    00276         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00277
    00278         friend class GDALProxyPoolOverviewRasterBand;
    00279         friend class GDALProxyPoolMaskBand;
    00280
    00281     public:
    00282         GDALProxyPoolRasterBand(GDALProxyPoolDataset* poDS, int nBand,
    00283                                 GDALDataType eDataType,
    00284                                 int nBlockXSize, int nBlockYSize);
    00285         GDALProxyPoolRasterBand(GDALProxyPoolDataset* poDS,
    00286                                 GDALRasterBand* poUnderlyingRasterBand);
    00287         ~GDALProxyPoolRasterBand();
    00288
    00289         void AddSrcMaskBandDescription( GDALDataType eDataType, int nBlockXSize, int nBlockYSize);
    00290
    00291         /* Special behaviour for the following methods : they return a pointer */
    00292         /* data type, that must be cached by the proxy, so it doesn't become invalid */
    00293         /* when the underlying object get closed */
    00294         virtual char      **GetMetadata( const char * pszDomain  );
    00295         virtual const char *GetMetadataItem( const char * pszName,
    00296                                             const char * pszDomain  );
    00297         virtual char **GetCategoryNames();
    00298         virtual const char *GetUnitType();
    00299         virtual GDALColorTable *GetColorTable();
    00300         virtual GDALRasterBand *GetOverview(int);
    00301         virtual GDALRasterBand *GetRasterSampleOverview( GUIntBig nDesiredSamples); // TODO
    00302         virtual GDALRasterBand *GetMaskBand();
    00303
    00304 };
    00305
    00306 /* ******************************************************************** */
    00307 /*                  GDALProxyPoolOverviewRasterBand                     */
    00308 /* ******************************************************************** */
    00309
    00310 class GDALProxyPoolOverviewRasterBand : public GDALProxyPoolRasterBand
    00311 {
    00312     private:
    00313         GDALProxyPoolRasterBand *poMainBand;
    00314         int                      nOverviewBand;
    00315
    00316         GDALRasterBand          *poUnderlyingMainRasterBand;
    00317         int                      nRefCountUnderlyingMainRasterBand;
    00318
    00319     protected:
    00320         virtual GDALRasterBand* RefUnderlyingRasterBand();
    00321         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00322
    00323     public:
    00324         GDALProxyPoolOverviewRasterBand(GDALProxyPoolDataset* poDS,
    00325                                         GDALRasterBand* poUnderlyingOverviewBand,
    00326                                         GDALProxyPoolRasterBand* poMainBand,
    00327                                         int nOverviewBand);
    00328         ~GDALProxyPoolOverviewRasterBand();
    00329 };
    00330
    00331 /* ******************************************************************** */
    00332 /*                      GDALProxyPoolMaskBand                           */
    00333 /* ******************************************************************** */
    00334
    00335 class GDALProxyPoolMaskBand : public GDALProxyPoolRasterBand
    00336 {
    00337     private:
    00338         GDALProxyPoolRasterBand *poMainBand;
    00339
    00340         GDALRasterBand          *poUnderlyingMainRasterBand;
    00341         int                      nRefCountUnderlyingMainRasterBand;
    00342
    00343     protected:
    00344         virtual GDALRasterBand* RefUnderlyingRasterBand();
    00345         virtual void UnrefUnderlyingRasterBand(GDALRasterBand* poUnderlyingRasterBand);
    00346
    00347     public:
    00348         GDALProxyPoolMaskBand(GDALProxyPoolDataset* poDS,
    00349                               GDALRasterBand* poUnderlyingMaskBand,
    00350                               GDALProxyPoolRasterBand* poMainBand);
    00351         GDALProxyPoolMaskBand(GDALProxyPoolDataset* poDS,
    00352                               GDALProxyPoolRasterBand* poMainBand,
    00353                               GDALDataType eDataType,
    00354                               int nBlockXSize, int nBlockYSize);
    00355         ~GDALProxyPoolMaskBand();
    00356 };
    00357
    00358 #endif
    00359
    00360
    00361 /* ******************************************************************** */
    00362 /*            C types and methods declarations                          */
    00363 /* ******************************************************************** */
    00364
    00365
    00366 CPL_C_START
    00367
    00368 typedef struct GDALProxyPoolDatasetHS *GDALProxyPoolDatasetH;
    00369
    00370 GDALProxyPoolDatasetH CPL_DLL GDALProxyPoolDatasetCreate(const char* pszSourceDatasetDescription,
    00371                                                          int nRasterXSize, int nRasterYSize,
    00372                                                          GDALAccess eAccess, int bShared,
    00373                                                          const char * pszProjectionRef,
    00374                                                          double * padfGeoTransform);
    00375
    00376 void CPL_DLL GDALProxyPoolDatasetDelete(GDALProxyPoolDatasetH hProxyPoolDataset);
    00377
    00378 void CPL_DLL GDALProxyPoolDatasetAddSrcBandDescription( GDALProxyPoolDatasetH hProxyPoolDataset,
    00379                                                         GDALDataType eDataType,
    00380                                                         int nBlockXSize, int nBlockYSize);
    00381
    00382 CPL_C_END
    00383
    00384 #endif /* GDAL_PROXY_H_INCLUDED */

Generated for GDAL by 1.7.1.