gdal_priv.h

00001 /******************************************************************************
00002  * $Id: gdal_priv.h 12795 2007-11-16 01:40:02Z warmerdam $
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 
00044 /* -------------------------------------------------------------------- */
00045 /*      Pull in the public declarations.  This gets the C apis, and     */
00046 /*      also various constants.  However, we will still get to          */
00047 /*      provide the real class definitions for the GDAL classes.        */
00048 /* -------------------------------------------------------------------- */
00049 
00050 #include "gdal.h"
00051 #include "gdal_frmts.h"
00052 #include "cpl_vsi.h"
00053 #include "cpl_conv.h"
00054 #include "cpl_string.h"
00055 #include "cpl_minixml.h"
00056 #include <vector>
00057 
00058 #define GMO_VALID                0x0001
00059 #define GMO_IGNORE_UNIMPLEMENTED 0x0002
00060 #define GMO_SUPPORT_MD           0x0004
00061 #define GMO_SUPPORT_MDMD         0x0008
00062 #define GMO_MD_DIRTY             0x0010
00063 #define GMO_PAM_CLASS            0x0020
00064 
00065 /************************************************************************/
00066 /*                       GDALMultiDomainMetadata                        */
00067 /************************************************************************/
00068 
00069 class CPL_DLL GDALMultiDomainMetadata
00070 {
00071 private:
00072     char **papszDomainList;
00073     char ***papapszMetadataLists;
00074 
00075 public:
00076     GDALMultiDomainMetadata();
00077     ~GDALMultiDomainMetadata();
00078 
00079     int         XMLInit( CPLXMLNode *psMetadata, int bMerge );
00080     CPLXMLNode  *Serialize();
00081 
00082     char      **GetDomainList() { return papszDomainList; }
00083 
00084     char      **GetMetadata( const char * pszDomain = "" );
00085     CPLErr      SetMetadata( char ** papszMetadata,
00086                              const char * pszDomain = "" );
00087     const char *GetMetadataItem( const char * pszName,
00088                                  const char * pszDomain = "" );
00089     CPLErr      SetMetadataItem( const char * pszName,
00090                                  const char * pszValue,
00091                                  const char * pszDomain = "" );
00092 
00093     void        Clear();
00094 };
00095 
00096 /* ******************************************************************** */
00097 /*                           GDALMajorObject                            */
00098 /*                                                                      */
00099 /*      Base class providing metadata, description and other            */
00100 /*      services shared by major objects.                               */
00101 /* ******************************************************************** */
00102 
00104 
00105 class CPL_DLL GDALMajorObject
00106 {
00107   protected:
00108     int                 nFlags; // GMO_* flags. 
00109     CPLString           sDescription;
00110     GDALMultiDomainMetadata oMDMD;
00111     
00112   public:
00113                         GDALMajorObject();
00114     virtual            ~GDALMajorObject();
00115 
00116     int                 GetMOFlags();
00117     void                SetMOFlags(int nFlags);
00118                         
00119     virtual const char *GetDescription() const;
00120     virtual void        SetDescription( const char * );
00121 
00122     virtual char      **GetMetadata( const char * pszDomain = "" );
00123     virtual CPLErr      SetMetadata( char ** papszMetadata,
00124                                      const char * pszDomain = "" );
00125     virtual const char *GetMetadataItem( const char * pszName,
00126                                          const char * pszDomain = "" );
00127     virtual CPLErr      SetMetadataItem( const char * pszName,
00128                                          const char * pszValue,
00129                                          const char * pszDomain = "" );
00130 };
00131 
00132 /* ******************************************************************** */
00133 /*                         GDALDefaultOverviews                         */
00134 /* ******************************************************************** */
00135 class CPL_DLL GDALDefaultOverviews
00136 {
00137     friend class GDALDataset;
00138 
00139     GDALDataset *poDS;
00140     GDALDataset *poODS;
00141     
00142     CPLString   osOvrFilename;
00143 
00144     int         bOvrIsAux;
00145 
00146     int         bCheckedForMask;
00147     int         bOwnMaskDS;
00148     GDALDataset *poMaskDS;
00149 
00150     // for "overview datasets" we record base level info so we can 
00151     // find our way back to get overview masks.
00152     GDALDataset *poBaseDS;
00153 
00154   public:
00155                GDALDefaultOverviews();
00156                ~GDALDefaultOverviews();
00157 
00158     void       Initialize( GDALDataset *poDS, const char *pszName = NULL, 
00159                            char **papszSiblingFiles = NULL,
00160                            int bNameIsOVR = FALSE );
00161 
00162     int        IsInitialized() { return poDS != NULL && strlen(osOvrFilename) > 0; }
00163 
00164     // Overview Related
00165 
00166     int        GetOverviewCount(int);
00167     GDALRasterBand *GetOverview(int,int);
00168 
00169     CPLErr     BuildOverviews( const char * pszBasename,
00170                                const char * pszResampling, 
00171                                int nOverviews, int * panOverviewList,
00172                                int nBands, int * panBandList,
00173                                GDALProgressFunc pfnProgress,
00174                                void *pProgressData );
00175 
00176     // Mask Related
00177 
00178     CPLErr     CreateMaskBand( int nFlags, int nBand = -1 );
00179     GDALRasterBand *GetMaskBand( int nBand );
00180     int        GetMaskFlags( int nBand );
00181 
00182     int        HaveMaskFile( char **papszSiblings = NULL, 
00183                              const char *pszBasename = NULL );
00184     
00185 };
00186 
00187 /* ******************************************************************** */
00188 /*                             GDALDataset                              */
00189 /* ******************************************************************** */
00190 
00192 
00193 class CPL_DLL GDALDataset : public GDALMajorObject
00194 {
00195     friend GDALDatasetH CPL_STDCALL GDALOpen( const char *, GDALAccess);
00196     friend GDALDatasetH CPL_STDCALL GDALOpenShared( const char *, GDALAccess);
00197     friend class GDALDriver;
00198     friend class GDALDefaultOverviews;
00199 
00200   protected:
00201     GDALDriver  *poDriver;
00202     GDALAccess  eAccess;
00203     
00204     // Stored raster information.
00205     int         nRasterXSize;
00206     int         nRasterYSize;
00207     int         nBands;
00208     GDALRasterBand **papoBands;
00209 
00210     int         bForceCachedIO;
00211 
00212     int         nRefCount;
00213     int         bShared;
00214 
00215                 GDALDataset(void);
00216     void        RasterInitialize( int, int );
00217     void        SetBand( int, GDALRasterBand * );
00218 
00219     GDALDefaultOverviews oOvManager;
00220     
00221     virtual CPLErr IBuildOverviews( const char *, int, int *,
00222                                     int, int *, GDALProgressFunc, void * );
00223     
00224     virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00225                               void *, int, int, GDALDataType,
00226                               int, int *, int, int, int );
00227 
00228     CPLErr BlockBasedRasterIO( GDALRWFlag, int, int, int, int,
00229                                void *, int, int, GDALDataType,
00230                                int, int *, int, int, int );
00231     void   BlockBasedFlushCache();
00232 
00233     friend class GDALRasterBand;
00234     
00235   public:
00236     virtual     ~GDALDataset();
00237 
00238     int         GetRasterXSize( void );
00239     int         GetRasterYSize( void );
00240     int         GetRasterCount( void );
00241     GDALRasterBand *GetRasterBand( int );
00242 
00243     virtual void FlushCache(void);
00244 
00245     virtual const char *GetProjectionRef(void);
00246     virtual CPLErr SetProjection( const char * );
00247 
00248     virtual CPLErr GetGeoTransform( double * );
00249     virtual CPLErr SetGeoTransform( double * );
00250 
00251     virtual CPLErr        AddBand( GDALDataType eType, 
00252                                    char **papszOptions=NULL );
00253 
00254     virtual void *GetInternalHandle( const char * );
00255     virtual GDALDriver *GetDriver(void);
00256     virtual char      **GetFileList(void);
00257 
00258     virtual int    GetGCPCount();
00259     virtual const char *GetGCPProjection();
00260     virtual const GDAL_GCP *GetGCPs();
00261     virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList,
00262                             const char *pszGCPProjection );
00263 
00264     virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
00265                                int nBufXSize, int nBufYSize, 
00266                                GDALDataType eDT, 
00267                                int nBandCount, int *panBandList,
00268                                char **papszOptions );
00269 
00270     virtual CPLErr          CreateMaskBand( int nFlags );
00271 
00272     CPLErr      RasterIO( GDALRWFlag, int, int, int, int,
00273                           void *, int, int, GDALDataType,
00274                           int, int *, int, int, int );
00275 
00276     int           Reference();
00277     int           Dereference();
00278     GDALAccess    GetAccess() { return eAccess; }
00279 
00280     int           GetShared();
00281     void          MarkAsShared();
00282 
00283     static GDALDataset **GetOpenDatasets( int *pnDatasetCount );
00284 
00285     CPLErr BuildOverviews( const char *, int, int *,
00286                            int, int *, GDALProgressFunc, void * );
00287 };
00288 
00289 /* ******************************************************************** */
00290 /*                           GDALRasterBlock                            */
00291 /* ******************************************************************** */
00292 
00293 class CPL_DLL GDALRasterBlock
00294 {
00295     GDALDataType        eType;
00296     
00297     int                 bDirty;
00298     int                 nLockCount;
00299 
00300     int                 nXOff;
00301     int                 nYOff;
00302        
00303     int                 nXSize;
00304     int                 nYSize;
00305     
00306     void                *pData;
00307 
00308     GDALRasterBand      *poBand;
00309     
00310     GDALRasterBlock     *poNext;
00311     GDALRasterBlock     *poPrevious;
00312 
00313   public:
00314                 GDALRasterBlock( GDALRasterBand *, int, int );
00315     virtual     ~GDALRasterBlock();
00316 
00317     CPLErr      Internalize( void );    /* make copy of data */
00318     void        Touch( void );          /* update age */
00319     void        MarkDirty( void );      /* data has been modified since read */
00320     void        MarkClean( void );
00321     void        AddLock( void ) { nLockCount++; }
00322     void        DropLock( void ) { nLockCount--; }
00323     void        Detach();
00324 
00325     CPLErr      Write();
00326 
00327     GDALDataType GetDataType() { return eType; }
00328     int         GetXOff() { return nXOff; }
00329     int         GetYOff() { return nYOff; }
00330     int         GetXSize() { return nXSize; }
00331     int         GetYSize() { return nYSize; }
00332     int         GetDirty() { return bDirty; }
00333     int         GetLockCount() { return nLockCount; }
00334 
00335     void        *GetDataRef( void ) { return pData; }
00336 
00337     GDALRasterBand *GetBand() { return poBand; }
00338 
00339     static int  FlushCacheBlock();
00340     static void Verify();
00341 
00342     static int  SafeLockBlock( GDALRasterBlock ** );
00343 };
00344 
00345 /* ******************************************************************** */
00346 /*                             GDALColorTable                           */
00347 /* ******************************************************************** */
00348 
00351 class CPL_DLL GDALColorTable
00352 {
00353     GDALPaletteInterp eInterp;
00354 
00355     std::vector<GDALColorEntry> aoEntries;
00356 
00357 public:
00358                 GDALColorTable( GDALPaletteInterp = GPI_RGB );
00359                 ~GDALColorTable();
00360 
00361     GDALColorTable *Clone() const;
00362 
00363     GDALPaletteInterp GetPaletteInterpretation() const;
00364 
00365     int           GetColorEntryCount() const;
00366     const GDALColorEntry *GetColorEntry( int ) const;
00367     int           GetColorEntryAsRGB( int, GDALColorEntry * ) const;
00368     void          SetColorEntry( int, const GDALColorEntry * );
00369     int           CreateColorRamp( int, const GDALColorEntry * ,
00370                                    int, const GDALColorEntry * );
00371 };
00372 
00373 /* ******************************************************************** */
00374 /*                            GDALRasterBand                            */
00375 /* ******************************************************************** */
00376 
00378 
00379 class CPL_DLL GDALRasterBand : public GDALMajorObject
00380 {
00381   protected:
00382     GDALDataset *poDS;
00383     int         nBand; /* 1 based */
00384 
00385     int         nRasterXSize;
00386     int         nRasterYSize;
00387     
00388     GDALDataType eDataType;
00389     GDALAccess  eAccess;
00390 
00391     /* stuff related to blocking, and raster cache */
00392     int         nBlockXSize;
00393     int         nBlockYSize;
00394     int         nBlocksPerRow;
00395     int         nBlocksPerColumn;
00396 
00397     int         bSubBlockingActive;
00398     int         nSubBlocksPerRow;
00399     int         nSubBlocksPerColumn;
00400     GDALRasterBlock **papoBlocks;
00401 
00402     int         nBlockReads;
00403     int         bForceCachedIO;
00404 
00405     GDALRasterBand *poMask;
00406     bool        bOwnMask;
00407     int         nMaskFlags;
00408 
00409     friend class GDALDataset;
00410     friend class GDALRasterBlock;
00411 
00412   protected:
00413     virtual CPLErr IReadBlock( int, int, void * ) = 0;
00414     virtual CPLErr IWriteBlock( int, int, void * );
00415     virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
00416                               void *, int, int, GDALDataType,
00417                               int, int );
00418     CPLErr         OverviewRasterIO( GDALRWFlag, int, int, int, int,
00419                                      void *, int, int, GDALDataType,
00420                                      int, int );
00421 
00422     int            InitBlockInfo();
00423 
00424     CPLErr         AdoptBlock( int, int, GDALRasterBlock * );
00425     GDALRasterBlock *TryGetLockedBlockRef( int nXBlockOff, int nYBlockYOff );
00426 
00427   public:
00428                 GDALRasterBand();
00429                 
00430     virtual     ~GDALRasterBand();
00431 
00432     int         GetXSize();
00433     int         GetYSize();
00434     int         GetBand();
00435     GDALDataset*GetDataset();
00436 
00437     GDALDataType GetRasterDataType( void );
00438     void        GetBlockSize( int *, int * );
00439     GDALAccess  GetAccess();
00440     
00441     CPLErr      RasterIO( GDALRWFlag, int, int, int, int,
00442                           void *, int, int, GDALDataType,
00443                           int, int );
00444     CPLErr      ReadBlock( int, int, void * );
00445 
00446     CPLErr      WriteBlock( int, int, void * );
00447 
00448     GDALRasterBlock *GetLockedBlockRef( int nXBlockOff, int nYBlockOff, 
00449                                         int bJustInitialize = FALSE );
00450     CPLErr      FlushBlock( int = -1, int = -1 );
00451 
00452     unsigned char*  GetIndexColorTranslationTo(/* const */ GDALRasterBand* poReferenceBand,
00453                                                unsigned char* pTranslationTable = NULL,
00454                                                int* pApproximateMatching = NULL);
00455 
00456     // New OpengIS CV_SampleDimension stuff.
00457 
00458     virtual CPLErr FlushCache();
00459     virtual char **GetCategoryNames();
00460     virtual double GetNoDataValue( int *pbSuccess = NULL );
00461     virtual double GetMinimum( int *pbSuccess = NULL );
00462     virtual double GetMaximum(int *pbSuccess = NULL );
00463     virtual double GetOffset( int *pbSuccess = NULL );
00464     virtual double GetScale( int *pbSuccess = NULL );
00465     virtual const char *GetUnitType();
00466     virtual GDALColorInterp GetColorInterpretation();
00467     virtual GDALColorTable *GetColorTable();
00468     virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0);
00469 
00470     virtual CPLErr SetCategoryNames( char ** );
00471     virtual CPLErr SetNoDataValue( double );
00472     virtual CPLErr SetColorTable( GDALColorTable * ); 
00473     virtual CPLErr SetColorInterpretation( GDALColorInterp );
00474     virtual CPLErr SetOffset( double );
00475     virtual CPLErr SetScale( double );
00476     virtual CPLErr SetUnitType( const char * );
00477 
00478     virtual CPLErr GetStatistics( int bApproxOK, int bForce,
00479                                   double *pdfMin, double *pdfMax, 
00480                                   double *pdfMean, double *padfStdDev );
00481     virtual CPLErr ComputeStatistics( int bApproxOK, 
00482                                       double *pdfMin, double *pdfMax, 
00483                                       double *pdfMean, double *pdfStdDev,
00484                                       GDALProgressFunc, void *pProgressData );
00485     virtual CPLErr SetStatistics( double dfMin, double dfMax, 
00486                                   double dfMean, double dfStdDev );
00487 
00488     virtual int HasArbitraryOverviews();
00489     virtual int GetOverviewCount();
00490     virtual GDALRasterBand *GetOverview(int);
00491     virtual CPLErr BuildOverviews( const char *, int, int *,
00492                                    GDALProgressFunc, void * );
00493 
00494     virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize,
00495                                int nBufXSize, int nBufYSize, 
00496                                GDALDataType eDT, char **papszOptions );
00497 
00498     virtual CPLErr  GetHistogram( double dfMin, double dfMax,
00499                           int nBuckets, int * panHistogram,
00500                           int bIncludeOutOfRange, int bApproxOK,
00501                           GDALProgressFunc, void *pProgressData );
00502 
00503     virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax,
00504                                         int *pnBuckets, int ** ppanHistogram,
00505                                         int bForce,
00506                                         GDALProgressFunc, void *pProgressData);
00507     virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax,
00508                                         int nBuckets, int *panHistogram );
00509 
00510     virtual const GDALRasterAttributeTable *GetDefaultRAT();
00511     virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * );
00512 
00513     virtual GDALRasterBand *GetMaskBand();
00514     virtual int             GetMaskFlags();
00515     virtual CPLErr          CreateMaskBand( int nFlags );
00516 };
00517 
00518 /* ******************************************************************** */
00519 /*                         GDALAllValidMaskBand                         */
00520 /* ******************************************************************** */
00521 
00522 class CPL_DLL GDALAllValidMaskBand : public GDALRasterBand
00523 {
00524   protected:
00525     virtual CPLErr IReadBlock( int, int, void * );
00526 
00527   public:
00528                 GDALAllValidMaskBand( GDALRasterBand * );
00529     virtual     ~GDALAllValidMaskBand();
00530 
00531     virtual GDALRasterBand *GetMaskBand();
00532     virtual int             GetMaskFlags();
00533 };
00534 
00535 /* ******************************************************************** */
00536 /*                         GDALNoDataMaskBand                           */
00537 /* ******************************************************************** */
00538 
00539 class CPL_DLL GDALNoDataMaskBand : public GDALRasterBand
00540 {
00541     double          dfNoDataValue;
00542     GDALRasterBand *poParent;
00543 
00544   protected:
00545     virtual CPLErr IReadBlock( int, int, void * );
00546 
00547   public:
00548                 GDALNoDataMaskBand( GDALRasterBand * );
00549     virtual     ~GDALNoDataMaskBand();
00550 };
00551 
00552 /* ******************************************************************** */
00553 /*                             GDALOpenInfo                             */
00554 /*                                                                      */
00555 /*      Structure of data about dataset for open functions.             */
00556 /* ******************************************************************** */
00557 
00558 class CPL_DLL GDALOpenInfo
00559 {
00560   public:
00561                 GDALOpenInfo( const char * pszFile, GDALAccess eAccessIn,
00562                               char **papszSiblingFiles = NULL );
00563                 ~GDALOpenInfo( void );
00564     
00565     char        *pszFilename;
00566     char        **papszSiblingFiles;
00567 
00568     GDALAccess  eAccess;
00569 
00570     int         bStatOK;
00571     int         bIsDirectory;
00572 
00573     FILE        *fp;
00574 
00575     int         nHeaderBytes;
00576     GByte       *pabyHeader;
00577 
00578 };
00579 
00580 /* ******************************************************************** */
00581 /*                              GDALDriver                              */
00582 /* ******************************************************************** */
00583 
00584 
00596 class CPL_DLL GDALDriver : public GDALMajorObject
00597 {
00598   public:
00599                         GDALDriver();
00600                         ~GDALDriver();
00601 
00602 /* -------------------------------------------------------------------- */
00603 /*      Public C++ methods.                                             */
00604 /* -------------------------------------------------------------------- */
00605     GDALDataset         *Create( const char * pszName,
00606                                  int nXSize, int nYSize, int nBands,
00607                                  GDALDataType eType, char ** papszOptions );
00608 
00609     CPLErr              Delete( const char * pszName );
00610     CPLErr              Rename( const char * pszNewName,
00611                                 const char * pszOldName );
00612     CPLErr              CopyFiles( const char * pszNewName,
00613                                    const char * pszOldName );
00614 
00615     GDALDataset         *CreateCopy( const char *, GDALDataset *, 
00616                                      int, char **,
00617                                      GDALProgressFunc pfnProgress, 
00618                                      void * pProgressData );
00619     
00620 /* -------------------------------------------------------------------- */
00621 /*      The following are semiprivate, not intended to be accessed      */
00622 /*      by anyone but the formats instantiating and populating the      */
00623 /*      drivers.                                                        */
00624 /* -------------------------------------------------------------------- */
00625     GDALDataset         *(*pfnOpen)( GDALOpenInfo * );
00626 
00627     GDALDataset         *(*pfnCreate)( const char * pszName,
00628                                        int nXSize, int nYSize, int nBands,
00629                                        GDALDataType eType,
00630                                        char ** papszOptions );
00631 
00632     CPLErr              (*pfnDelete)( const char * pszName );
00633 
00634     GDALDataset         *(*pfnCreateCopy)( const char *, GDALDataset *, 
00635                                            int, char **,
00636                                            GDALProgressFunc pfnProgress, 
00637                                            void * pProgressData );
00638 
00639     void                *pDriverData;
00640 
00641     void                (*pfnUnloadDriver)(GDALDriver *);
00642 
00643     int                 (*pfnIdentify)( GDALOpenInfo * );
00644 
00645     CPLErr              (*pfnRename)( const char * pszNewName,
00646                                       const char * pszOldName );
00647     CPLErr              (*pfnCopyFiles)( const char * pszNewName,
00648                                          const char * pszOldName );
00649 
00650 /* -------------------------------------------------------------------- */
00651 /*      Helper methods.                                                 */
00652 /* -------------------------------------------------------------------- */
00653     GDALDataset         *DefaultCreateCopy( const char *, GDALDataset *, 
00654                                             int, char **,
00655                                             GDALProgressFunc pfnProgress, 
00656                                             void * pProgressData );
00657     static CPLErr        DefaultCopyMasks( GDALDataset *poSrcDS, 
00658                                            GDALDataset *poDstDS, 
00659                                            int bStrict );
00660     static CPLErr       QuietDelete( const char * pszName );
00661 };
00662 
00663 /* ******************************************************************** */
00664 /*                          GDALDriverManager                           */
00665 /* ******************************************************************** */
00666 
00674 class CPL_DLL GDALDriverManager : public GDALMajorObject
00675 {
00676     int         nDrivers;
00677     GDALDriver  **papoDrivers;
00678 
00679     char        *pszHome;
00680     
00681  public:
00682                 GDALDriverManager();
00683                 ~GDALDriverManager();
00684                 
00685     int         GetDriverCount( void );
00686     GDALDriver  *GetDriver( int );
00687     GDALDriver  *GetDriverByName( const char * );
00688 
00689     int         RegisterDriver( GDALDriver * );
00690     void        MoveDriver( GDALDriver *, int );
00691     void        DeregisterDriver( GDALDriver * );
00692 
00693     void        AutoLoadDrivers();
00694     void        AutoSkipDrivers();
00695 
00696     const char *GetHome();
00697     void        SetHome( const char * );
00698 };
00699 
00700 CPL_C_START
00701 GDALDriverManager CPL_DLL * GetGDALDriverManager( void );
00702 CPL_C_END
00703 
00704 /* ==================================================================== */
00705 /*      An assortment of overview related stuff.                        */
00706 /* ==================================================================== */
00707 
00708 CPL_C_START
00709 
00710 #ifndef WIN32CE
00711 
00712 CPLErr CPL_DLL
00713 HFAAuxBuildOverviews( const char *pszOvrFilename, GDALDataset *poParentDS,
00714                       GDALDataset **ppoDS,
00715                       int nBands, int *panBandList,
00716                       int nNewOverviews, int *panNewOverviewList, 
00717                       const char *pszResampling, 
00718                       GDALProgressFunc pfnProgress, 
00719                       void *pProgressData );
00720 
00721 #endif /* WIN32CE */
00722 
00723 CPLErr CPL_DLL 
00724 GTIFFBuildOverviews( const char * pszFilename,
00725                      int nBands, GDALRasterBand **papoBandList, 
00726                      int nOverviews, int * panOverviewList,
00727                      const char * pszResampling, 
00728                      GDALProgressFunc pfnProgress, void * pProgressData );
00729 
00730 CPLErr CPL_DLL
00731 GDALDefaultBuildOverviews( GDALDataset *hSrcDS, const char * pszBasename,
00732                            const char * pszResampling, 
00733                            int nOverviews, int * panOverviewList,
00734                            int nBands, int * panBandList,
00735                            GDALProgressFunc pfnProgress, void * pProgressData);
00736                            
00737 
00738 CPLErr CPL_DLL 
00739 GDALRegenerateOverviews( GDALRasterBand *, int, GDALRasterBand **,
00740                          const char *, GDALProgressFunc, void * );
00741 
00742 int CPL_DLL GDALOvLevelAdjust( int nOvLevel, int nXSize );
00743 
00744 GDALDataset CPL_DLL *
00745 GDALFindAssociatedAuxFile( const char *pszBasefile, GDALAccess eAccess );
00746 
00747 /* ==================================================================== */
00748 /*      Misc functions.                                                 */
00749 /* ==================================================================== */
00750 
00751 CPLErr CPL_DLL GDALParseGMLCoverage( CPLXMLNode *psTree, 
00752                                      int *pnXSize, int *pnYSize,
00753                                      double *padfGeoTransform,
00754                                      char **ppszProjection );
00755                                   
00756 CPL_C_END
00757 
00758 #endif /* ndef GDAL_PRIV_H_INCLUDED */

Generated for GDAL by doxygen 1.5.1.