GDAL
gdal_priv.h
00001 /******************************************************************************
00002  * $Id: gdal_priv.h 18501 2010-01-09 18:43:12Z mloskot $
00003  *
00004  * Name:     gdal_priv.h
00005  * Project:  GDAL Core
00006  * Purpose:  GDAL Core C++/Private declarations. 
00007  * Author:   Frank Warmerdam, warmerdam@pobox.com
00008  *
00009  ******************************************************************************
00010  * Copyright (c) 1998, Frank Warmerdam
00011  *
00012  * Permission is hereby granted, free of charge, to any person obtaining a
00013  * copy of this software and associated documentation files (the "Software"),
00014  * to deal in the Software without restriction, including without limitation
00015  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00016  * and/or sell copies of the Software, and to permit persons to whom the
00017  * Software is furnished to do so, subject to the following conditions:
00018  *
00019  * The above copyright notice and this permission notice shall be included
00020  * in all copies or substantial portions of the Software.
00021  *
00022  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00023  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00024  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00025  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00026  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00027  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00028  * DEALINGS IN THE SOFTWARE.
00029  ****************************************************************************/
00030 
00031 #ifndef GDAL_PRIV_H_INCLUDED
00032 #define GDAL_PRIV_H_INCLUDED
00033 
00034 /* -------------------------------------------------------------------- */
00035 /*      Predeclare various classes before pulling in gdal.h, the        */
00036 /*      public declarations.                                            */
00037 /* -------------------------------------------------------------------- */
00038 class GDALMajorObject;
00039 class GDALDataset;
00040 class GDALRasterBand;
00041 class GDALDriver;
00042 class GDALRasterAttributeTable;
00043 class GDALProxyDataset;
00044 class GDALProxyRasterBand;
00045 
00046 /* -------------------------------------------------------------------- */
00047 /*      Pull in the public declarations.  This gets the C apis, and     */
00048 /*      also various constants.  However, we will still get to          */
00049 /*      provide the real class definitions for the GDAL classes.        */
00050 /* -------------------------------------------------------------------- */
00051 
00052 #include "gdal.h"
00053 #include "gdal_frmts.h"
00054 #include "cpl_vsi.h"
00055 #include "cpl_conv.h"
00056 #include "cpl_string.h"
00057 #include "cpl_minixml.h"
00058 #include <vector>
00059 
00060 #define GMO_VALID                0x0001
00061 #define GMO_IGNORE_UNIMPLEMENTED 0x0002
00062 #define GMO_SUPPORT_MD           0x0004
00063 #define GMO_SUPPORT_MDMD         0x0008
00064 #define GMO_MD_DIRTY             0x0010
00065 #define GMO_PAM_CLASS            0x0020
00066 
00067 /************************************************************************/
00068 /*                       GDALMultiDomainMetadata                        */
00069 /************************************************************************/
00070 
00071 class CPL_DLL GDALMultiDomainMetadata
00072 {
00073 private:
00074     char **papszDomainList;
00075     char ***papapszMetadataLists;
00076 
00077 public:
00078     GDALMultiDomainMetadata();
00079     ~GDALMultiDomainMetadata();
00080 
00081     int         XMLInit( CPLXMLNode *psMetadata, int bMerge );
00082     CPLXMLNode  *Serialize();
00083 
00084     char      **GetDomainList() { return papszDomainList; }
00085 
00086     char      **GetMetadata( const char * pszDomain = "" );
00087     CPLErr      SetMetadata( char ** papszMetadata,
00088                              const char * pszDomain = "" );
00089     const char *GetMetadataItem( const char * pszName,
00090                                  const char * pszDomain = "" );
00091     CPLErr      SetMetadataItem( const char * pszName,
00092                                  const char * pszValue,
00093                                  const char * pszDomain = "" );
00094 
00095     void        Clear();
00096 };
00097 
00098 /* ******************************************************************** */
00099 /*                           GDALMajorObject                            */
00100 /*                                                                      */
00101 /*      Base class providing metadata, description and other            */
00102 /*      services shared by major objects.                               */
00103 /* ******************************************************************** */
00104 
00106 
00107 class CPL_DLL GDALMajorObject
00108 {
00109   protected:
00110     int                 nFlags; // GMO_* flags. 
00111     CPLString           sDescription;
00112     GDALMultiDomainMetadata oMDMD;
00113     
00114   public:
00115                         GDALMajorObject();
00116     virtual            ~GDALMajorObject();
00117 
00118     int                 GetMOFlags();
00119     void                SetMOFlags(int nFlags);
00120                         
00121     virtual const char *GetDescription() const;
00122     virtual void        SetDescription( const char * );
00123 
00124     virtual char      **GetMetadata( const char * pszDomain = "" );
00125     virtual CPLErr      SetMetadata( char ** papszMetadata,
00126                                      const char * pszDomain = "" );
00127     virtual const char *GetMetadataItem( const char * pszName,
00128                                          const char * pszDomain = "" );
00129     virtual CPLErr      SetMetadataItem( const char * pszName,
00130                                          const char * pszValue,
00131                                          const char * pszDomain = "" );
00132 };
00133 
00134 /* ******************************************************************** */
00135 /*                         GDALDefaultOverviews                         */
00136 /* ******************************************************************** */
00137 class CPL_DLL GDALDefaultOverviews
00138 {
00139     friend class GDALDataset;
00140 
00141     GDALDataset *poDS;
00142     GDALDataset *poODS;
00143     
00144     CPLString   osOvrFilename;
00145 
00146     int         bOvrIsAux;
00147 
00148     int         bCheckedForMask;
00149     int         bOwnMaskDS;
00150     GDALDataset *poMaskDS;
00151 
00152     // for "overview datasets" we record base level info so we can 
00153     // find our way back to get overview masks.
00154     GDALDataset *poBaseDS;
00155 
00156     // Stuff for deferred initialize/overviewscans...
00157     bool        bCheckedForOverviews;
00158     void        OverviewScan();
00159     char       *pszInitName;
00160     int         bInitNameIsOVR;
00161     char      **papszInitSiblingFiles;
00162 
00163   public:
00164                GDALDefaultOverviews();
00165                ~GDALDefaultOverviews();
00166 
00167     void       Initialize( GDALDataset *poDS, const char *pszName = NULL, 
00168                            char **papszSiblingFiles = NULL,
00169                            int bNameIsOVR = FALSE );
00170 
00171     int        IsInitialized();
00172 
00173     // Overview Related
00174 
00175     int        GetOverviewCount(int);
00176     GDALRasterBand *GetOverview(int,int);
00177 
00178     CPLErr     BuildOverviews( const char * pszBasename,
00179                                const char * pszResampling, 
00180                                int nOverviews, int * panOverviewList,
00181                                int nBands, int * panBandList,
00182                                GDALProgressFunc pfnProgress,
00183                                void *pProgressData );
00184 
00185     CPLErr     BuildOverviewsSubDataset( const char * pszPhysicalFile,
00186                                          const char * pszResampling, 
00187                                          int nOverviews, int * panOverviewList,
00188                                          int nBands, int * panBandList,
00189                                          GDALProgressFunc pfnProgress,
00190                                          void *pProgressData );
00191 
00192     CPLErr     CleanOverviews();
00193 
00194     // Mask Related
00195 
00196     CPLErr     CreateMaskBand( int nFlags, int nBand = -1 );
00197     GDALRasterBand *GetMaskBand( int nBand );
00198     int        GetMaskFlags( int nBand );
00199 
00200     int        HaveMaskFile( char **papszSiblings = NULL, 
00201                              const char *pszBasename = NULL );
00202 
00203 };
00204 
00205 /* ******************************************************************** */
00206 /*                             GDALDataset                              */
00207 /* ******************************************************************** */
00208 
00210 
00211 class CPL_DLL GDALDataset : public GDALMajorObject
00212 {
00213     friend GDALDatasetH CPL_STDCALL GDALOpen( const char *, GDALAccess);
00214     friend GDALDatasetH CPL_STDCALL GDALOpenShared( const char *, GDALAccess);
00215     friend class GDALDriver;
00216     friend class GDALDefaultOverviews;
00217     friend class GDALProxyDataset;
00218 
00219   protected:
00220     GDALDriver  *poDriver;
00221     GDALAccess  eAccess;
00222     
00223     // Stored raster information.
00224     int         nRasterXSize;
00225     int         nRasterYSize;
00226     int         nBands;
00227     GDALRasterBand **papoBands;
00228 
00229     int         bForceCachedIO;
00230 
00231     int         nRefCount;
00232     int         bShared;
00233 
00234                 GDALDataset(void);
00235     void        RasterInitialize( int, int );
00236     void        SetBand( int, GDALRasterBand * );
00237 
00238     GDALDefaultOverviews oOvManager;
00239     
00240     virtual CPLErr IBuildOverviews( const char *, int, int *,
00241                                     int, int *, GDALProgressFunc, void * );
00242     
00243     virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00244                               void *, int, int, GDALDataType,
00245                               int, int *, int, int, int );
00246 
00247     CPLErr BlockBasedRasterIO( GDALRWFlag, int, int, int, int,
00248                                void *, int, int, GDALDataType,
00249                                int, int *, int, int, int );
00250     void   BlockBasedFlushCache();
00251 
00252     friend class GDALRasterBand;
00253     
00254   public:
00255     virtual     ~GDALDataset();
00256 
00257     int         GetRasterXSize( void );
00258     int         GetRasterYSize( void );
00259     int         GetRasterCount( void );
00260     GDALRasterBand *GetRasterBand( int );
00261 
00262     virtual void FlushCache(void);
00263 
00264     virtual const char *GetProjectionRef(void);
00265     virtual CPLErr SetProjection( const char * );
00266 
00267     virtual CPLErr GetGeoTransform( double * );
00268     virtual CPLErr SetGeoTransform( double * );
00269 
00270     virtual CPLErr        AddBand( GDALDataType eType, 
00271                                    char **papszOptions=NULL );
00272 
00273     virtual void *GetInternalHandle( const char * );
00274     virtual GDALDriver *GetDriver(void);
00275     virtual char      **GetFileList(void);
00276 
00277     virtual int    GetGCPCount();
00278     virtual const char *GetGCPProjection();
00279     virtual const GDAL_GCP *GetGCPs();
00280     virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList,
00281                             const char *pszGCPProjection );
00282 
00283     virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
00284                                int nBufXSize, int nBufYSize, 
00285                                GDALDataType eDT, 
00286                                int nBandCount, int *panBandList,
00287                                char **papszOptions );
00288 
00289     virtual CPLErr          CreateMaskBand( int nFlags );
00290 
00291     CPLErr      RasterIO( GDALRWFlag, int, int, int, int,
00292                           void *, int, int, GDALDataType,
00293                           int, int *, int, int, int );
00294 
00295     int           Reference();
00296     int           Dereference();
00297     GDALAccess    GetAccess() { return eAccess; }
00298 
00299     int           GetShared();
00300     void          MarkAsShared();
00301 
00302     static GDALDataset **GetOpenDatasets( int *pnDatasetCount );
00303 
00304     CPLErr BuildOverviews( const char *, int, int *,
00305                            int, int *, GDALProgressFunc, void * );
00306 };
00307 
00308 /* ******************************************************************** */
00309 /*                           GDALRasterBlock                            */
00310 /* ******************************************************************** */
00311 
00313 
00314 class CPL_DLL GDALRasterBlock
00315 {
00316     GDALDataType        eType;
00317     
00318     int                 bDirty;
00319     int                 nLockCount;
00320 
00321     int                 nXOff;
00322     int                 nYOff;
00323        
00324     int                 nXSize;
00325     int                 nYSize;
00326     
00327     void                *pData;
00328 
00329     GDALRasterBand      *poBand;
00330     
00331     GDALRasterBlock     *poNext;
00332     GDALRasterBlock     *poPrevious;
00333 
00334   public:
00335                 GDALRasterBlock( GDALRasterBand *, int, int );
00336     virtual     ~GDALRasterBlock();
00337 
00338     CPLErr      Internalize( void );
00339     void        Touch( void );      
00340     void        MarkDirty( void );  
00341     void        MarkClean( void );
00342     void        AddLock( void ) { nLockCount++; }
00343     void        DropLock( void ) { nLockCount--; }
00344     void        Detach();
00345 
00346     CPLErr      Write();
00347 
00348     GDALDataType GetDataType() { return eType; }
00349     int         GetXOff() { return nXOff; }
00350     int         GetYOff() { return nYOff; }
00351     int         GetXSize() { return nXSize; }
00352     int         GetYSize() { return nYSize; }
00353     int         GetDirty() { return bDirty; }
00354     int         GetLockCount() { return nLockCount; }
00355 
00356     void        *GetDataRef( void ) { return pData; }
00357 
00360     GDALRasterBand *GetBand() { return poBand; }
00361 
00362     static int  FlushCacheBlock();
00363     static void Verify();
00364 
00365     static int  SafeLockBlock( GDALRasterBlock ** );
00366 };
00367 
00368 /* ******************************************************************** */
00369 /*                             GDALColorTable                           */
00370 /* ******************************************************************** */
00371 
00374 class CPL_DLL GDALColorTable
00375 {
00376     GDALPaletteInterp eInterp;
00377 
00378     std::vector<GDALColorEntry> aoEntries;
00379 
00380 public:
00381                 GDALColorTable( GDALPaletteInterp = GPI_RGB );
00382                 ~GDALColorTable();
00383 
00384     GDALColorTable *Clone() const;
00385 
00386     GDALPaletteInterp GetPaletteInterpretation() const;
00387 
00388     int           GetColorEntryCount() const;
00389     const GDALColorEntry *GetColorEntry( int ) const;
00390     int           GetColorEntryAsRGB( int, GDALColorEntry * ) const;
00391     void          SetColorEntry( int, const GDALColorEntry * );
00392     int           CreateColorRamp( int, const GDALColorEntry * ,
00393                                    int, const GDALColorEntry * );
00394 };
00395 
00396 /* ******************************************************************** */
00397 /*                            GDALRasterBand                            */
00398 /* ******************************************************************** */
00399 
00401 
00402 class CPL_DLL GDALRasterBand : public GDALMajorObject
00403 {
00404   protected:
00405     GDALDataset *poDS;
00406     int         nBand; /* 1 based */
00407 
00408     int         nRasterXSize;
00409     int         nRasterYSize;
00410     
00411     GDALDataType eDataType;
00412     GDALAccess  eAccess;
00413 
00414     /* stuff related to blocking, and raster cache */
00415     int         nBlockXSize;
00416     int         nBlockYSize;
00417     int         nBlocksPerRow;
00418     int         nBlocksPerColumn;
00419 
00420     int         bSubBlockingActive;
00421     int         nSubBlocksPerRow;
00422     int         nSubBlocksPerColumn;
00423     GDALRasterBlock **papoBlocks;
00424 
00425     int         nBlockReads;
00426     int         bForceCachedIO;
00427 
00428     GDALRasterBand *poMask;
00429     bool        bOwnMask;
00430     int         nMaskFlags;
00431 
00432     friend class GDALDataset;
00433     friend class GDALRasterBlock;
00434     friend class GDALProxyRasterBand;
00435 
00436   protected:
00437     virtual CPLErr IReadBlock( int, int, void * ) = 0;
00438     virtual CPLErr IWriteBlock( int, int, void * );
00439     virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00440                               void *, int, int, GDALDataType,
00441                               int, int );
00442     CPLErr         OverviewRasterIO( GDALRWFlag, int, int, int, int,
00443                                      void *, int, int, GDALDataType,
00444                                      int, int );
00445 
00446     int            InitBlockInfo();
00447 
00448     CPLErr         AdoptBlock( int, int, GDALRasterBlock * );
00449     GDALRasterBlock *TryGetLockedBlockRef( int nXBlockOff, int nYBlockYOff );
00450 
00451   public:
00452                 GDALRasterBand();
00453                 
00454     virtual     ~GDALRasterBand();
00455 
00456     int         GetXSize();
00457     int         GetYSize();
00458     int         GetBand();
00459     GDALDataset*GetDataset();
00460 
00461     GDALDataType GetRasterDataType( void );
00462     void        GetBlockSize( int *, int * );
00463     GDALAccess  GetAccess();
00464     
00465     CPLErr      RasterIO( GDALRWFlag, int, int, int, int,
00466                           void *, int, int, GDALDataType,
00467                           int, int );
00468     CPLErr      ReadBlock( int, int, void * );
00469 
00470     CPLErr      WriteBlock( int, int, void * );
00471 
00472     GDALRasterBlock *GetLockedBlockRef( int nXBlockOff, int nYBlockOff, 
00473                                         int bJustInitialize = FALSE );
00474     CPLErr      FlushBlock( int = -1, int = -1 );
00475 
00476     unsigned char*  GetIndexColorTranslationTo(/* const */ GDALRasterBand* poReferenceBand,
00477                                                unsigned char* pTranslationTable = NULL,
00478                                                int* pApproximateMatching = NULL);
00479 
00480     // New OpengIS CV_SampleDimension stuff.
00481 
00482     virtual CPLErr FlushCache();
00483     virtual char **GetCategoryNames();
00484     virtual double GetNoDataValue( int *pbSuccess = NULL );
00485     virtual double GetMinimum( int *pbSuccess = NULL );
00486     virtual double GetMaximum(int *pbSuccess = NULL );
00487     virtual double GetOffset( int *pbSuccess = NULL );
00488     virtual double GetScale( int *pbSuccess = NULL );
00489     virtual const char *GetUnitType();
00490     virtual GDALColorInterp GetColorInterpretation();
00491     virtual GDALColorTable *GetColorTable();
00492     virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0);
00493 
00494     virtual CPLErr SetCategoryNames( char ** );
00495     virtual CPLErr SetNoDataValue( double );
00496     virtual CPLErr SetColorTable( GDALColorTable * ); 
00497     virtual CPLErr SetColorInterpretation( GDALColorInterp );
00498     virtual CPLErr SetOffset( double );
00499     virtual CPLErr SetScale( double );
00500     virtual CPLErr SetUnitType( const char * );
00501 
00502     virtual CPLErr GetStatistics( int bApproxOK, int bForce,
00503                                   double *pdfMin, double *pdfMax, 
00504                                   double *pdfMean, double *padfStdDev );
00505     virtual CPLErr ComputeStatistics( int bApproxOK, 
00506                                       double *pdfMin, double *pdfMax, 
00507                                       double *pdfMean, double *pdfStdDev,
00508                                       GDALProgressFunc, void *pProgressData );
00509     virtual CPLErr SetStatistics( double dfMin, double dfMax, 
00510                                   double dfMean, double dfStdDev );
00511     virtual CPLErr ComputeRasterMinMax( int, double* );
00512 
00513     virtual int HasArbitraryOverviews();
00514     virtual int GetOverviewCount();
00515     virtual GDALRasterBand *GetOverview(int);
00516     virtual GDALRasterBand *GetRasterSampleOverview( int );
00517     virtual CPLErr BuildOverviews( const char *, int, int *,
00518                                    GDALProgressFunc, void * );
00519 
00520     virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
00521                                int nBufXSize, int nBufYSize, 
00522                                GDALDataType eDT, char **papszOptions );
00523 
00524     virtual CPLErr  GetHistogram( double dfMin, double dfMax,
00525                           int nBuckets, int * panHistogram,
00526                           int bIncludeOutOfRange, int bApproxOK,
00527                           GDALProgressFunc, void *pProgressData );
00528 
00529     virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax,
00530                                         int *pnBuckets, int ** ppanHistogram,
00531                                         int bForce,
00532                                         GDALProgressFunc, void *pProgressData);
00533     virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax,
00534                                         int nBuckets, int *panHistogram );
00535 
00536     virtual const GDALRasterAttributeTable *GetDefaultRAT();
00537     virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * );
00538 
00539     virtual GDALRasterBand *GetMaskBand();
00540     virtual int             GetMaskFlags();
00541     virtual CPLErr          CreateMaskBand( int nFlags );
00542 };
00543 
00544 /* ******************************************************************** */
00545 /*                         GDALAllValidMaskBand                         */
00546 /* ******************************************************************** */
00547 
00548 class CPL_DLL GDALAllValidMaskBand : public GDALRasterBand
00549 {
00550   protected:
00551     virtual CPLErr IReadBlock( int, int, void * );
00552 
00553   public:
00554                 GDALAllValidMaskBand( GDALRasterBand * );
00555     virtual     ~GDALAllValidMaskBand();
00556 
00557     virtual GDALRasterBand *GetMaskBand();
00558     virtual int             GetMaskFlags();
00559 };
00560 
00561 /* ******************************************************************** */
00562 /*                         GDALNoDataMaskBand                           */
00563 /* ******************************************************************** */
00564 
00565 class CPL_DLL GDALNoDataMaskBand : public GDALRasterBand
00566 {
00567     double          dfNoDataValue;
00568     GDALRasterBand *poParent;
00569 
00570   protected:
00571     virtual CPLErr IReadBlock( int, int, void * );
00572 
00573   public:
00574                 GDALNoDataMaskBand( GDALRasterBand * );
00575     virtual     ~GDALNoDataMaskBand();
00576 };
00577 
00578 /* ******************************************************************** */
00579 /*                  GDALNoDataValuesMaskBand                            */
00580 /* ******************************************************************** */
00581 
00582 class CPL_DLL GDALNoDataValuesMaskBand : public GDALRasterBand
00583 {
00584     double      *padfNodataValues;
00585 
00586   protected:
00587     virtual CPLErr IReadBlock( int, int, void * );
00588 
00589   public:
00590                 GDALNoDataValuesMaskBand( GDALDataset * );
00591     virtual     ~GDALNoDataValuesMaskBand();
00592 };
00593 
00594 /* ******************************************************************** */
00595 /*                             GDALOpenInfo                             */
00596 /*                                                                      */
00597 /*      Structure of data about dataset for open functions.             */
00598 /* ******************************************************************** */
00599 
00600 class CPL_DLL GDALOpenInfo
00601 {
00602   public:
00603                 GDALOpenInfo( const char * pszFile, GDALAccess eAccessIn,
00604                               char **papszSiblingFiles = NULL );
00605                 ~GDALOpenInfo( void );
00606     
00607     char        *pszFilename;
00608     char        **papszSiblingFiles;
00609 
00610     GDALAccess  eAccess;
00611 
00612     int         bStatOK;
00613     int         bIsDirectory;
00614 
00615     FILE        *fp;
00616 
00617     int         nHeaderBytes;
00618     GByte       *pabyHeader;
00619 
00620 };
00621 
00622 /* ******************************************************************** */
00623 /*                              GDALDriver                              */
00624 /* ******************************************************************** */
00625 
00626 
00638 class CPL_DLL GDALDriver : public GDALMajorObject
00639 {
00640   public:
00641                         GDALDriver();
00642                         ~GDALDriver();
00643 
00644 /* -------------------------------------------------------------------- */
00645 /*      Public C++ methods.                                             */
00646 /* -------------------------------------------------------------------- */
00647     GDALDataset         *Create( const char * pszName,
00648                                  int nXSize, int nYSize, int nBands,
00649                                  GDALDataType eType, char ** papszOptions );
00650 
00651     CPLErr              Delete( const char * pszName );
00652     CPLErr              Rename( const char * pszNewName,
00653                                 const char * pszOldName );
00654     CPLErr              CopyFiles( const char * pszNewName,
00655                                    const char * pszOldName );
00656 
00657     GDALDataset         *CreateCopy( const char *, GDALDataset *, 
00658                                      int, char **,
00659                                      GDALProgressFunc pfnProgress, 
00660                                      void * pProgressData );
00661     
00662 /* -------------------------------------------------------------------- */
00663 /*      The following are semiprivate, not intended to be accessed      */
00664 /*      by anyone but the formats instantiating and populating the      */
00665 /*      drivers.                                                        */
00666 /* -------------------------------------------------------------------- */
00667     GDALDataset         *(*pfnOpen)( GDALOpenInfo * );
00668 
00669     GDALDataset         *(*pfnCreate)( const char * pszName,
00670                                        int nXSize, int nYSize, int nBands,
00671                                        GDALDataType eType,
00672                                        char ** papszOptions );
00673 
00674     CPLErr              (*pfnDelete)( const char * pszName );
00675 
00676     GDALDataset         *(*pfnCreateCopy)( const char *, GDALDataset *, 
00677                                            int, char **,
00678                                            GDALProgressFunc pfnProgress, 
00679                                            void * pProgressData );
00680 
00681     void                *pDriverData;
00682 
00683     void                (*pfnUnloadDriver)(GDALDriver *);
00684 
00685     int                 (*pfnIdentify)( GDALOpenInfo * );
00686 
00687     CPLErr              (*pfnRename)( const char * pszNewName,
00688                                       const char * pszOldName );
00689     CPLErr              (*pfnCopyFiles)( const char * pszNewName,
00690                                          const char * pszOldName );
00691 
00692 /* -------------------------------------------------------------------- */
00693 /*      Helper methods.                                                 */
00694 /* -------------------------------------------------------------------- */
00695     GDALDataset         *DefaultCreateCopy( const char *, GDALDataset *, 
00696                                             int, char **,
00697                                             GDALProgressFunc pfnProgress, 
00698                                             void * pProgressData );
00699     static CPLErr        DefaultCopyMasks( GDALDataset *poSrcDS, 
00700                                            GDALDataset *poDstDS, 
00701                                            int bStrict );
00702     static CPLErr       QuietDelete( const char * pszName );
00703 };
00704 
00705 /* ******************************************************************** */
00706 /*                          GDALDriverManager                           */
00707 /* ******************************************************************** */
00708 
00716 class CPL_DLL GDALDriverManager : public GDALMajorObject
00717 {
00718     int         nDrivers;
00719     GDALDriver  **papoDrivers;
00720 
00721     char        *pszHome;
00722     
00723  public:
00724                 GDALDriverManager();
00725                 ~GDALDriverManager();
00726                 
00727     int         GetDriverCount( void );
00728     GDALDriver  *GetDriver( int );
00729     GDALDriver  *GetDriverByName( const char * );
00730 
00731     int         RegisterDriver( GDALDriver * );
00732     void        MoveDriver( GDALDriver *, int );
00733     void        DeregisterDriver( GDALDriver * );
00734 
00735     void        AutoLoadDrivers();
00736     void        AutoSkipDrivers();
00737 
00738     const char *GetHome();
00739     void        SetHome( const char * );
00740 };
00741 
00742 /* Not a public symbol for the moment */
00743 CPLErr 
00744 GDALRegenerateOverviewsMultiBand(int nBands, GDALRasterBand** papoSrcBands,
00745                                  int nOverviews,
00746                                  GDALRasterBand*** papapoOverviewBands,
00747                                  const char * pszResampling, 
00748                                  GDALProgressFunc pfnProgress, void * pProgressData );
00749 
00750 CPL_C_START
00751 GDALDriverManager CPL_DLL * GetGDALDriverManager( void );
00752 CPL_C_END
00753 
00754 /* ==================================================================== */
00755 /*      An assortment of overview related stuff.                        */
00756 /* ==================================================================== */
00757 
00758 CPL_C_START
00759 
00760 #ifndef WIN32CE
00761 
00762 CPLErr CPL_DLL
00763 HFAAuxBuildOverviews( const char *pszOvrFilename, GDALDataset *poParentDS,
00764                       GDALDataset **ppoDS,
00765                       int nBands, int *panBandList,
00766                       int nNewOverviews, int *panNewOverviewList, 
00767                       const char *pszResampling, 
00768                       GDALProgressFunc pfnProgress, 
00769                       void *pProgressData );
00770 
00771 #endif /* WIN32CE */
00772 
00773 CPLErr CPL_DLL 
00774 GTIFFBuildOverviews( const char * pszFilename,
00775                      int nBands, GDALRasterBand **papoBandList, 
00776                      int nOverviews, int * panOverviewList,
00777                      const char * pszResampling, 
00778                      GDALProgressFunc pfnProgress, void * pProgressData );
00779 
00780 CPLErr CPL_DLL
00781 GDALDefaultBuildOverviews( GDALDataset *hSrcDS, const char * pszBasename,
00782                            const char * pszResampling, 
00783                            int nOverviews, int * panOverviewList,
00784                            int nBands, int * panBandList,
00785                            GDALProgressFunc pfnProgress, void * pProgressData);
00786                            
00787 int CPL_DLL GDALBandGetBestOverviewLevel(GDALRasterBand* poBand,
00788                                          int &nXOff, int &nYOff,
00789                                          int &nXSize, int &nYSize,
00790                                          int nBufXSize, int nBufYSize);
00791 
00792 int CPL_DLL GDALOvLevelAdjust( int nOvLevel, int nXSize );
00793 
00794 GDALDataset CPL_DLL *
00795 GDALFindAssociatedAuxFile( const char *pszBasefile, GDALAccess eAccess,
00796                            GDALDataset *poDependentDS );
00797 
00798 /* ==================================================================== */
00799 /*      Misc functions.                                                 */
00800 /* ==================================================================== */
00801 
00802 CPLErr CPL_DLL GDALParseGMLCoverage( CPLXMLNode *psTree, 
00803                                      int *pnXSize, int *pnYSize,
00804                                      double *padfGeoTransform,
00805                                      char **ppszProjection );
00806 
00807 /* ==================================================================== */
00808 /*  Infrastructure to check that dataset characteristics are valid      */
00809 /* ==================================================================== */
00810 
00811 int CPL_DLL GDALCheckDatasetDimensions( int nXSize, int nYSize );
00812 int CPL_DLL GDALCheckBandCount( int nBands, int bIsZeroAllowed );
00813 
00814 CPL_C_END
00815 
00816 #endif /* ndef GDAL_PRIV_H_INCLUDED */

Generated for GDAL by doxygen 1.7.4.