Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

gdal_priv.h

00001 /****************************************************************************** 00002 * $Id: gdal_priv.h,v 1.46 2003/07/27 11:01:01 dron Exp $ 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 * $Log: gdal_priv.h,v $ 00032 * Revision 1.46 2003/07/27 11:01:01 dron 00033 * GDALRasterBlock::IsCached() method added. 00034 * 00035 * Revision 1.45 2003/05/08 14:38:40 warmerda 00036 * added BlockBasedFlushCache 00037 * 00038 * Revision 1.44 2003/05/06 05:20:38 sperkins 00039 * cleaned up comments 00040 * 00041 * Revision 1.43 2003/05/06 05:13:36 sperkins 00042 * added Fill() and GDALFillRaster() 00043 * 00044 * Revision 1.42 2003/04/25 19:47:57 warmerda 00045 * added RasterIO on GDALDataset, added lock count on blocks 00046 * 00047 * Revision 1.41 2003/03/20 22:10:53 warmerda 00048 * added support for reporting cache thrashing 00049 * 00050 * Revision 1.40 2003/03/18 06:00:57 warmerda 00051 * made GDALRasterBand::FlushCache() virtual 00052 * 00053 * Revision 1.39 2003/01/28 16:07:30 warmerda 00054 * improved documentation 00055 * 00056 * Revision 1.38 2002/10/21 18:05:42 warmerda 00057 * added AutoSkipDrivers() method on driver manager 00058 * 00059 * Revision 1.37 2002/09/11 14:17:52 warmerda 00060 * make SetDescription() and GetDescription() virtual 00061 * 00062 * Revision 1.36 2002/09/04 06:52:05 warmerda 00063 * added unload driver support to GDALDriver 00064 * 00065 * Revision 1.35 2002/07/09 20:33:12 warmerda 00066 * expand tabs 00067 * 00068 * Revision 1.34 2002/06/19 18:19:59 warmerda 00069 * GDALOpenInfo: added bIsDirecory flag, removed VSIStatBuf 00070 * 00071 * Revision 1.33 2002/06/12 21:13:27 warmerda 00072 * use metadata based driver info 00073 * 00074 * Revision 1.32 2002/05/29 15:58:26 warmerda 00075 * removed GetDescription(), added SetColorInterpretation() 00076 * 00077 * Revision 1.31 2002/05/28 18:56:22 warmerda 00078 * added shared dataset concept 00079 * 00080 * Revision 1.30 2002/03/01 14:29:09 warmerda 00081 * added GetBand() method on GDALRasterBand 00082 * 00083 * Revision 1.29 2001/12/15 15:42:27 warmerda 00084 * *** empty log message *** 00085 * 00086 * Revision 1.28 2001/11/18 00:52:15 warmerda 00087 * removed GDALProjDef 00088 * 00089 * Revision 1.27 2001/11/16 21:36:01 warmerda 00090 * added the AddBand() method on GDALDataset 00091 * 00092 * Revision 1.26 2001/10/17 21:47:02 warmerda 00093 * added SetGCPs() on GDALDataset 00094 * 00095 * Revision 1.25 2001/10/02 13:15:16 warmerda 00096 * added CPL_DLL for GDALDefaultOverviews 00097 * 00098 * Revision 1.24 2001/06/20 16:08:54 warmerda 00099 * GDALDefaultOverviews now remembers ovr filename, and allows explicit setting 00100 * 00101 * Revision 1.23 2001/02/06 16:30:21 warmerda 00102 * Added gdal_frmts.h 00103 * 00104 * Revision 1.22 2000/10/06 15:26:08 warmerda 00105 * added SetNoDataValue, SetCategoryNames 00106 * 00107 * Revision 1.21 2000/07/20 13:38:26 warmerda 00108 * make GetGDALDriverManager public with CPL_DLL 00109 * 00110 * Revision 1.20 2000/04/30 23:22:16 warmerda 00111 * added CreateCopy support 00112 * 00113 * Revision 1.19 2000/04/21 21:55:01 warmerda 00114 * majorobject updates, and overview building 00115 * 00116 * Revision 1.18 2000/04/04 23:44:29 warmerda 00117 * added AutoLoadDrivers() to GDALDriverManager 00118 * 00119 * Revision 1.17 2000/03/31 13:41:24 warmerda 00120 * added gcps 00121 * 00122 * Revision 1.16 2000/03/24 00:09:05 warmerda 00123 * rewrote cache management 00124 * 00125 * Revision 1.15 2000/03/09 23:22:03 warmerda 00126 * added GetHistogram 00127 * 00128 * Revision 1.14 2000/03/06 02:20:35 warmerda 00129 * added colortables, overviews, etc 00130 * 00131 * Revision 1.12 2000/01/31 15:00:25 warmerda 00132 * added some documentation 00133 * 00134 * Revision 1.11 2000/01/31 14:24:36 warmerda 00135 * implemented dataset delete 00136 * 00137 * Revision 1.10 1999/11/11 21:59:07 warmerda 00138 * added GetDriver() for datasets 00139 * 00140 * Revision 1.9 1999/10/21 13:23:45 warmerda 00141 * Added a bit of driver related documentation. 00142 * 00143 * Revision 1.8 1999/10/21 12:04:11 warmerda 00144 * Reorganized header. 00145 * 00146 * Revision 1.7 1999/10/01 14:44:02 warmerda 00147 * added documentation 00148 * 00149 * Revision 1.6 1999/04/21 04:16:25 warmerda 00150 * experimental docs 00151 * 00152 * Revision 1.5 1999/01/11 15:36:18 warmerda 00153 * Added projections support, and a few other things. 00154 * 00155 * Revision 1.4 1998/12/31 18:54:25 warmerda 00156 * Implement initial GDALRasterBlock support, and block cache 00157 * 00158 * Revision 1.3 1998/12/06 22:17:09 warmerda 00159 * Fill out rasterio support. 00160 * 00161 * Revision 1.2 1998/12/03 18:34:06 warmerda 00162 * Update to use CPL 00163 * 00164 * Revision 1.1 1998/10/18 06:15:11 warmerda 00165 * Initial implementation. 00166 * 00167 */ 00168 00169 #ifndef GDAL_PRIV_H_INCLUDED 00170 #define GDAL_PRIV_H_INCLUDED 00171 00172 /* -------------------------------------------------------------------- */ 00173 /* Predeclare various classes before pulling in gdal.h, the */ 00174 /* public declarations. */ 00175 /* -------------------------------------------------------------------- */ 00176 class GDALMajorObject; 00177 class GDALDataset; 00178 class GDALRasterBand; 00179 class GDALDriver; 00180 00181 /* -------------------------------------------------------------------- */ 00182 /* Pull in the public declarations. This gets the C apis, and */ 00183 /* also various constants. However, we will still get to */ 00184 /* provide the real class definitions for the GDAL classes. */ 00185 /* -------------------------------------------------------------------- */ 00186 00187 #include "gdal.h" 00188 #include "gdal_frmts.h" 00189 #include "cpl_vsi.h" 00190 #include "cpl_conv.h" 00191 00192 /* ******************************************************************** */ 00193 /* GDALMajorObject */ 00194 /* */ 00195 /* Base class providing metadata, description and other */ 00196 /* services shared by major objects. */ 00197 /* ******************************************************************** */ 00198 00199 class CPL_DLL GDALMajorObject 00200 { 00201 protected: 00202 char *pszDescription; 00203 char **papszMetadata; 00204 00205 public: 00206 GDALMajorObject(); 00207 virtual ~GDALMajorObject(); 00208 00209 virtual const char *GetDescription() const; 00210 virtual void SetDescription( const char * ); 00211 00212 virtual char **GetMetadata( const char * pszDomain = "" ); 00213 virtual CPLErr SetMetadata( char ** papszMetadata, 00214 const char * pszDomain = "" ); 00215 virtual const char *GetMetadataItem( const char * pszName, 00216 const char * pszDomain = "" ); 00217 virtual CPLErr SetMetadataItem( const char * pszName, 00218 const char * pszValue, 00219 const char * pszDomain = "" ); 00220 }; 00221 00222 /* ******************************************************************** */ 00223 /* GDALDefaultOverviews */ 00224 /* ******************************************************************** */ 00225 class CPL_DLL GDALDefaultOverviews 00226 { 00227 GDALDataset *poDS; 00228 GDALDataset *poODS; 00229 00230 char *pszOvrFilename; 00231 00232 public: 00233 GDALDefaultOverviews(); 00234 ~GDALDefaultOverviews(); 00235 00236 void Initialize( GDALDataset *poDS, const char *pszName = NULL, 00237 int bNameIsOVR = FALSE ); 00238 int IsInitialized() { return poDS != NULL; } 00239 00240 int GetOverviewCount(int); 00241 GDALRasterBand *GetOverview(int,int); 00242 00243 CPLErr BuildOverviews( const char * pszBasename, 00244 const char * pszResampling, 00245 int nOverviews, int * panOverviewList, 00246 int nBands, int * panBandList, 00247 GDALProgressFunc pfnProgress, 00248 void *pProgressData ); 00249 }; 00250 00251 /* ******************************************************************** */ 00252 /* GDALDataset */ 00253 /* ******************************************************************** */ 00254 00255 class CPL_DLL GDALDataset : public GDALMajorObject 00256 { 00257 friend GDALDatasetH GDALOpen( const char *, GDALAccess); 00258 friend GDALDatasetH GDALOpenShared( const char *, GDALAccess); 00259 friend class GDALDriver; 00260 00261 protected: 00262 GDALDriver *poDriver; 00263 GDALAccess eAccess; 00264 00265 // Stored raster information. 00266 int nRasterXSize; 00267 int nRasterYSize; 00268 int nBands; 00269 GDALRasterBand **papoBands; 00270 00271 int nRefCount; 00272 int bShared; 00273 00274 GDALDataset(void); 00275 void RasterInitialize( int, int ); 00276 void SetBand( int, GDALRasterBand * ); 00277 00278 GDALDefaultOverviews oOvManager; 00279 00280 virtual CPLErr IBuildOverviews( const char *, int, int *, 00281 int, int *, GDALProgressFunc, void * ); 00282 00283 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int, 00284 void *, int, int, GDALDataType, 00285 int, int *, int, int, int ); 00286 00287 CPLErr BlockBasedRasterIO( GDALRWFlag, int, int, int, int, 00288 void *, int, int, GDALDataType, 00289 int, int *, int, int, int ); 00290 void BlockBasedFlushCache(); 00291 00292 friend class GDALRasterBand; 00293 00294 public: 00295 virtual ~GDALDataset(); 00296 00297 int GetRasterXSize( void ); 00298 int GetRasterYSize( void ); 00299 int GetRasterCount( void ); 00300 GDALRasterBand *GetRasterBand( int ); 00301 00302 virtual void FlushCache(void); 00303 00304 virtual const char *GetProjectionRef(void); 00305 virtual CPLErr SetProjection( const char * ); 00306 00307 virtual CPLErr GetGeoTransform( double * ); 00308 virtual CPLErr SetGeoTransform( double * ); 00309 00310 virtual CPLErr AddBand( GDALDataType eType, 00311 char **papszOptions=NULL ); 00312 00313 virtual void *GetInternalHandle( const char * ); 00314 virtual GDALDriver *GetDriver(void); 00315 00316 virtual int GetGCPCount(); 00317 virtual const char *GetGCPProjection(); 00318 virtual const GDAL_GCP *GetGCPs(); 00319 virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList, 00320 const char *pszGCPProjection ); 00321 00322 CPLErr RasterIO( GDALRWFlag, int, int, int, int, 00323 void *, int, int, GDALDataType, 00324 int, int *, int, int, int ); 00325 00326 int Reference(); 00327 int Dereference(); 00328 GDALAccess GetAccess() { return eAccess; } 00329 00330 int GetShared(); 00331 void MarkAsShared(); 00332 00333 static GDALDataset **GetOpenDatasets( int *pnDatasetCount ); 00334 00335 CPLErr BuildOverviews( const char *, int, int *, 00336 int, int *, GDALProgressFunc, void * ); 00337 }; 00338 00339 /* ******************************************************************** */ 00340 /* GDALRasterBlock */ 00341 /* ******************************************************************** */ 00342 00345 class CPL_DLL GDALRasterBlock 00346 { 00347 GDALDataType eType; 00348 00349 int nAge; 00350 int bDirty; 00351 int nLockCount; 00352 00353 int nXOff; 00354 int nYOff; 00355 00356 int nXSize; 00357 int nYSize; 00358 00359 void *pData; 00360 00361 GDALRasterBand *poBand; 00362 00363 GDALRasterBlock *poNext; 00364 GDALRasterBlock *poPrevious; 00365 00366 public: 00367 GDALRasterBlock( GDALRasterBand *, int, int ); 00368 virtual ~GDALRasterBlock(); 00369 00370 CPLErr Internalize( void ); /* make copy of data */ 00371 void Touch( void ); /* update age */ 00372 void MarkDirty( void ); /* data has been modified since read */ 00373 void MarkClean( void ); 00374 void AddLock( void ) { nLockCount++; } 00375 void DropLock( void ) { nLockCount--; } 00376 00377 CPLErr Write(); 00378 00379 GDALDataType GetDataType() { return eType; } 00380 int GetXOff() { return nXOff; } 00381 int GetYOff() { return nYOff; } 00382 int GetXSize() { return nXSize; } 00383 int GetYSize() { return nYSize; } 00384 int GetAge() { return nAge; } 00385 int GetDirty() { return bDirty; } 00386 int GetLockCount() { return nLockCount; } 00387 00388 void *GetDataRef( void ) { return pData; } 00389 00390 GDALRasterBand *GetBand() { return poBand; } 00391 00392 static int FlushCacheBlock(); 00393 static void Verify(); 00394 static int IsCached( int nXOff, int nYOff ); 00395 }; 00396 00397 00398 /* ******************************************************************** */ 00399 /* GDALColorTable */ 00400 /* ******************************************************************** */ 00401 00402 class CPL_DLL GDALColorTable 00403 { 00404 GDALPaletteInterp eInterp; 00405 00406 int nEntryCount; 00407 GDALColorEntry *paoEntries; 00408 00409 public: 00410 GDALColorTable( GDALPaletteInterp = GPI_RGB ); 00411 ~GDALColorTable(); 00412 00413 GDALColorTable *Clone() const; 00414 00415 GDALPaletteInterp GetPaletteInterpretation() const; 00416 00417 int GetColorEntryCount() const; 00418 const GDALColorEntry *GetColorEntry( int ) const; 00419 int GetColorEntryAsRGB( int, GDALColorEntry * ) const; 00420 void SetColorEntry( int, const GDALColorEntry * ); 00421 }; 00422 00423 /* ******************************************************************** */ 00424 /* GDALRasterBand */ 00425 /* ******************************************************************** */ 00426 00428 00429 class CPL_DLL GDALRasterBand : public GDALMajorObject 00430 { 00431 protected: 00432 GDALDataset *poDS; 00433 int nBand; /* 1 based */ 00434 00435 int nRasterXSize; 00436 int nRasterYSize; 00437 00438 GDALDataType eDataType; 00439 GDALAccess eAccess; 00440 00441 /* stuff related to blocking, and raster cache */ 00442 int nBlockXSize; 00443 int nBlockYSize; 00444 int nBlocksPerRow; 00445 int nBlocksPerColumn; 00446 00447 GDALRasterBlock **papoBlocks; 00448 00449 int nBlockReads; 00450 00451 friend class GDALDataset; 00452 friend class GDALRasterBlock; 00453 00454 protected: 00455 virtual CPLErr IReadBlock( int, int, void * ) = 0; 00456 virtual CPLErr IWriteBlock( int, int, void * ); 00457 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int, 00458 void *, int, int, GDALDataType, 00459 int, int ); 00460 CPLErr OverviewRasterIO( GDALRWFlag, int, int, int, int, 00461 void *, int, int, GDALDataType, 00462 int, int ); 00463 00464 CPLErr AdoptBlock( int, int, GDALRasterBlock * ); 00465 void InitBlockInfo(); 00466 00467 public: 00468 GDALRasterBand(); 00469 00470 virtual ~GDALRasterBand(); 00471 00472 int GetXSize(); 00473 int GetYSize(); 00474 int GetBand(); 00475 GDALDataset*GetDataset(); 00476 00477 GDALDataType GetRasterDataType( void ); 00478 void GetBlockSize( int *, int * ); 00479 GDALAccess GetAccess(); 00480 00481 CPLErr RasterIO( GDALRWFlag, int, int, int, int, 00482 void *, int, int, GDALDataType, 00483 int, int ); 00484 CPLErr ReadBlock( int, int, void * ); 00485 00486 CPLErr WriteBlock( int, int, void * ); 00487 00488 GDALRasterBlock *GetBlockRef( int nXBlockOff, int nYBlockOff, 00489 int bJustInitialize = FALSE ); 00490 CPLErr FlushBlock( int = -1, int = -1 ); 00491 00492 // New OpengIS CV_SampleDimension stuff. 00493 00494 virtual CPLErr FlushCache(); 00495 virtual char **GetCategoryNames(); 00496 virtual double GetNoDataValue( int *pbSuccess = NULL ); 00497 virtual double GetMinimum( int *pbSuccess = NULL ); 00498 virtual double GetMaximum(int *pbSuccess = NULL ); 00499 virtual double GetOffset( int *pbSuccess = NULL ); 00500 virtual double GetScale( int *pbSuccess = NULL ); 00501 virtual const char *GetUnitType(); 00502 virtual GDALColorInterp GetColorInterpretation(); 00503 virtual GDALColorTable *GetColorTable(); 00504 virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0); 00505 00506 virtual CPLErr SetCategoryNames( char ** ); 00507 virtual CPLErr SetNoDataValue( double ); 00508 virtual CPLErr SetColorTable( GDALColorTable * ); 00509 virtual CPLErr SetColorInterpretation( GDALColorInterp ); 00510 00511 virtual int HasArbitraryOverviews(); 00512 virtual int GetOverviewCount(); 00513 virtual GDALRasterBand *GetOverview(int); 00514 virtual CPLErr BuildOverviews( const char *, int, int *, 00515 GDALProgressFunc, void * ); 00516 00517 CPLErr GetHistogram( double dfMin, double dfMax, 00518 int nBuckets, int * panHistogram, 00519 int bIncludeOutOfRange, int bApproxOK, 00520 GDALProgressFunc, void *pProgressData ); 00521 }; 00522 00523 /* ******************************************************************** */ 00524 /* GDALOpenInfo */ 00525 /* */ 00526 /* Structure of data about dataset for open functions. */ 00527 /* ******************************************************************** */ 00528 00529 class CPL_DLL GDALOpenInfo 00530 { 00531 public: 00532 00533 GDALOpenInfo( const char * pszFile, GDALAccess eAccessIn ); 00534 ~GDALOpenInfo( void ); 00535 00536 char *pszFilename; 00537 00538 GDALAccess eAccess; 00539 00540 int bStatOK; 00541 int bIsDirectory; 00542 00543 FILE *fp; 00544 00545 int nHeaderBytes; 00546 GByte *pabyHeader; 00547 00548 }; 00549 00550 /* ******************************************************************** */ 00551 /* GDALDriver */ 00552 /* ******************************************************************** */ 00553 00563 class CPL_DLL GDALDriver : public GDALMajorObject 00564 { 00565 public: 00566 GDALDriver(); 00567 ~GDALDriver(); 00568 00569 /* -------------------------------------------------------------------- */ 00570 /* Public C++ methods. */ 00571 /* -------------------------------------------------------------------- */ 00572 GDALDataset *Create( const char * pszName, 00573 int nXSize, int nYSize, int nBands, 00574 GDALDataType eType, char ** papszOptions ); 00575 00576 CPLErr Delete( const char * pszName ); 00577 00578 GDALDataset *CreateCopy( const char *, GDALDataset *, 00579 int, char **, 00580 GDALProgressFunc pfnProgress, 00581 void * pProgressData ); 00582 00583 /* -------------------------------------------------------------------- */ 00584 /* The following are semiprivate, not intended to be accessed */ 00585 /* by anyone but the formats instantiating and populating the */ 00586 /* drivers. */ 00587 /* -------------------------------------------------------------------- */ 00588 GDALDataset *(*pfnOpen)( GDALOpenInfo * ); 00589 00590 GDALDataset *(*pfnCreate)( const char * pszName, 00591 int nXSize, int nYSize, int nBands, 00592 GDALDataType eType, 00593 char ** papszOptions ); 00594 00595 CPLErr (*pfnDelete)( const char * pszName ); 00596 00597 GDALDataset *(*pfnCreateCopy)( const char *, GDALDataset *, 00598 int, char **, 00599 GDALProgressFunc pfnProgress, 00600 void * pProgressData ); 00601 00602 void *pDriverData; 00603 00604 void (*pfnUnloadDriver)(GDALDriver *); 00605 }; 00606 00607 /* ******************************************************************** */ 00608 /* GDALDriverManager */ 00609 /* ******************************************************************** */ 00610 00618 class CPL_DLL GDALDriverManager : public GDALMajorObject 00619 { 00620 int nDrivers; 00621 GDALDriver **papoDrivers; 00622 00623 char *pszHome; 00624 00625 public: 00626 GDALDriverManager(); 00627 ~GDALDriverManager(); 00628 00629 int GetDriverCount( void ); 00630 GDALDriver *GetDriver( int ); 00631 GDALDriver *GetDriverByName( const char * ); 00632 00633 int RegisterDriver( GDALDriver * ); 00634 void MoveDriver( GDALDriver *, int ); 00635 void DeregisterDriver( GDALDriver * ); 00636 00637 void AutoLoadDrivers(); 00638 void AutoSkipDrivers(); 00639 00640 const char *GetHome(); 00641 void SetHome( const char * ); 00642 }; 00643 00644 CPL_C_START 00645 GDALDriverManager CPL_DLL * GetGDALDriverManager( void ); 00646 CPL_C_END 00647 00648 /* ==================================================================== */ 00649 /* An assortment of overview related stuff. */ 00650 /* ==================================================================== */ 00651 00652 CPL_C_START 00653 00654 CPLErr 00655 GTIFFBuildOverviews( const char * pszFilename, 00656 int nBands, GDALRasterBand **papoBandList, 00657 int nOverviews, int * panOverviewList, 00658 const char * pszResampling, 00659 GDALProgressFunc pfnProgress, void * pProgressData ); 00660 00661 CPLErr 00662 GDALDefaultBuildOverviews( GDALDataset *hSrcDS, const char * pszBasename, 00663 const char * pszResampling, 00664 int nOverviews, int * panOverviewList, 00665 int nBands, int * panBandList, 00666 GDALProgressFunc pfnProgress, void * pProgressData); 00667 00668 00669 CPLErr 00670 GDALRegenerateOverviews( GDALRasterBand *, int, GDALRasterBand **, 00671 const char *, GDALProgressFunc, void * ); 00672 00673 CPL_C_END 00674 00675 #endif /* ndef GDAL_PRIV_H_INCLUDED */

Generated on Thu Jul 29 19:47:52 2004 for GDAL by doxygen 1.3.7