32 #ifndef GDAL_PRIV_H_INCLUDED 33 #define GDAL_PRIV_H_INCLUDED 50 class GDALProxyDataset;
51 class GDALProxyRasterBand;
61 #include "gdal_frmts.h" 66 #include "cpl_multiproc.h" 67 #include "cpl_atomic_ops.h" 83 #define GMO_VALID 0x0001 84 #define GMO_IGNORE_UNIMPLEMENTED 0x0002 85 #define GMO_SUPPORT_MD 0x0004 86 #define GMO_SUPPORT_MDMD 0x0008 87 #define GMO_MD_DIRTY 0x0010 88 #define GMO_PAM_CLASS 0x0020 96 class CPL_DLL GDALMultiDomainMetadata
99 char **papszDomainList;
103 GDALMultiDomainMetadata();
104 ~GDALMultiDomainMetadata();
106 int XMLInit(
CPLXMLNode *psMetadata,
int bMerge );
109 char **GetDomainList() {
return papszDomainList; }
111 char **GetMetadata(
const char * pszDomain =
"" );
112 CPLErr SetMetadata(
char ** papszMetadata,
113 const char * pszDomain =
"" );
114 const char *GetMetadataItem(
const char * pszName,
115 const char * pszDomain =
"" );
116 CPLErr SetMetadataItem(
const char * pszName,
117 const char * pszValue,
118 const char * pszDomain =
"" );
141 GDALMultiDomainMetadata oMDMD{};
145 char **BuildMetadataDomainList(
char** papszList,
151 int GetMOFlags()
const;
152 void SetMOFlags(
int nFlagsIn );
154 virtual const char *GetDescription()
const;
155 virtual void SetDescription(
const char * );
157 virtual char **GetMetadataDomainList();
159 virtual char **GetMetadata(
const char * pszDomain =
"" );
160 virtual CPLErr SetMetadata(
char ** papszMetadata,
161 const char * pszDomain =
"" );
162 virtual const char *GetMetadataItem(
const char * pszName,
163 const char * pszDomain =
"" );
164 virtual CPLErr SetMetadataItem(
const char * pszName,
165 const char * pszValue,
166 const char * pszDomain =
"" );
186 class CPL_DLL GDALDefaultOverviews
197 bool bCheckedForMask;
206 bool bCheckedForOverviews;
210 char **papszInitSiblingFiles;
213 GDALDefaultOverviews();
214 ~GDALDefaultOverviews();
216 void Initialize(
GDALDataset *poDSIn,
const char *pszName =
nullptr,
217 char **papszSiblingFiles =
nullptr,
218 int bNameIsOVR = FALSE );
220 void TransferSiblingFiles(
char** papszSiblingFiles );
228 int GetOverviewCount(
int nBand );
232 const char * pszResampling,
233 int nOverviews,
int * panOverviewList,
234 int nBands,
int * panBandList,
235 GDALProgressFunc pfnProgress,
236 void *pProgressData );
238 CPLErr BuildOverviewsSubDataset(
const char * pszPhysicalFile,
239 const char * pszResampling,
240 int nOverviews,
int * panOverviewList,
241 int nBands,
int * panBandList,
242 GDALProgressFunc pfnProgress,
243 void *pProgressData );
251 int GetMaskFlags(
int nBand );
253 int HaveMaskFile(
char **papszSiblings =
nullptr,
254 const char *pszBasename =
nullptr );
256 char** GetSiblingFiles() {
return papszInitSiblingFiles; }
270 bool bHasGotSiblingFiles;
271 char **papszSiblingFiles;
272 int nHeaderBytesTried;
276 const char *
const * papszSiblingFiles =
nullptr );
305 int TryToIngest(
int nBytes);
306 char **GetSiblingFiles();
307 char **StealSiblingFiles();
308 bool AreSiblingFilesLoaded()
const;
323 class swq_select_parse_options;
327 typedef struct GDALSQLParseInfo GDALSQLParseInfo;
331 #ifdef GDAL_COMPILATION 332 #define OPTIONAL_OUTSIDE_GDAL(val) 334 #define OPTIONAL_OUTSIDE_GDAL(val) = val 342 unsigned int nOpenFlags,
343 const char*
const* papszAllowedDrivers,
344 const char*
const* papszOpenOptions,
345 const char*
const* papszSiblingFiles );
349 friend class GDALDefaultOverviews;
350 friend class GDALProxyDataset;
353 CPL_INTERNAL
void AddToDatasetOpenList();
355 CPL_INTERNAL
static void ReportErrorV(
356 const char* pszDSName,
358 const char *fmt, va_list args);
365 int nRasterXSize = 512;
366 int nRasterYSize = 512;
373 bool bForceCachedIO =
false;
374 bool bShared =
false;
375 bool bIsInternal =
true;
376 bool bSuppressOnClose =
false;
378 mutable std::map<std::string, std::unique_ptr<OGRFieldDomain>> m_oMapFieldDomains{};
383 void RasterInitialize(
int,
int );
386 GDALDefaultOverviews oOvManager{};
388 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
389 int,
int *, GDALProgressFunc,
void * );
400 void BlockBasedFlushCache(
bool bAtClosing);
403 int nXOff,
int nYOff,
int nXSize,
int nYSize,
404 void * pData,
int nBufXSize,
int nBufYSize,
406 int nBandCount,
int *panBandMap,
412 int nXOff,
int nYOff,
int nXSize,
int nYSize,
413 void * pData,
int nBufXSize,
int nBufYSize,
415 int nBandCount,
int *panBandMap,
420 CPLErr ValidateRasterIOOrAdviseReadParameters(
421 const char* pszCallingFunc,
422 int* pbStopProcessingOnCENone,
423 int nXOff,
int nYOff,
int nXSize,
int nYSize,
424 int nBufXSize,
int nBufYSize,
425 int nBandCount,
int *panBandMap);
428 int nXOff,
int nYOff,
int nXSize,
int nYSize,
429 void * pData,
int nBufXSize,
int nBufYSize,
431 int nBandCount,
int *panBandMap,
437 void ShareLockWithParentDataset(
GDALDataset* poParentDataset);
441 void CleanupPostFileClosing();
443 virtual int CloseDependentDatasets();
445 int ValidateLayerCreationOptions(
const char*
const* papszLCO );
447 char **papszOpenOptions =
nullptr;
454 void LeaveReadWrite();
457 void TemporarilyDropReadWriteLock();
458 void ReacquireReadWriteLock();
460 void DisableReadWriteMutex();
469 int GetRasterXSize();
470 int GetRasterYSize();
471 int GetRasterCount();
483 class CPL_DLL Iterator
486 std::unique_ptr<Private> m_poPrivate;
489 Iterator(
const Iterator& oOther);
490 Iterator(Iterator&& oOther) noexcept;
493 Iterator& operator++();
494 bool operator!=(
const Iterator& it)
const;
499 const Iterator
begin()
const;
501 const Iterator
end()
const;
511 virtual void FlushCache(
bool bAtClosing =
false);
517 const char *GetProjectionRef(
void)
const;
518 CPLErr SetProjection(
const char * pszProjection );
520 virtual CPLErr GetGeoTransform(
double * padfTransform );
521 virtual CPLErr SetGeoTransform(
double * padfTransform );
524 char **papszOptions=
nullptr );
526 virtual void *GetInternalHandle(
const char * pszHandleName );
528 virtual char **GetFileList(
void);
530 virtual const char* GetDriverName();
533 virtual int GetGCPCount();
535 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
539 const char *GetGCPProjection();
541 const char *pszGCPProjection );
543 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
544 int nBufXSize,
int nBufYSize,
546 int nBandCount,
int *panBandList,
547 char **papszOptions );
549 virtual CPLErr CreateMaskBand(
int nFlagsIn );
552 BeginAsyncReader(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
553 void *pBuf,
int nBufXSize,
int nBufYSize,
555 int nBandCount,
int* panBandMap,
556 int nPixelSpace,
int nLineSpace,
int nBandSpace,
557 char **papszOptions);
561 struct RawBinaryLayout
563 enum class Interleaving
570 std::string osRawFilename{};
571 Interleaving eInterleaving = Interleaving::UNKNOWN;
573 bool bLittleEndianOrder =
false;
581 virtual bool GetRawBinaryLayout(RawBinaryLayout&);
589 OPTIONAL_OUTSIDE_GDAL(
nullptr)
602 int GetShared()
const;
605 void MarkSuppressOnClose();
612 static GDALDataset **GetOpenDatasets(
int *pnDatasetCount );
614 CPLErr BuildOverviews(
const char *,
int,
int *,
615 int,
int *, GDALProgressFunc,
void * );
620 static
void ReportError(const
char* pszDSName,
625 char ** GetMetadata(
const char * pszDomain =
"")
override;
629 CPLErr SetMetadata(
char ** papszMetadata,
630 const char * pszDomain )
override;
631 CPLErr SetMetadataItem(
const char * pszName,
632 const char * pszValue,
633 const char * pszDomain )
override;
636 char **GetMetadataDomainList()
override;
638 virtual void ClearStatistics();
656 unsigned int nOpenFlags = 0,
657 const char*
const* papszAllowedDrivers =
nullptr,
658 const char*
const* papszOpenOptions =
nullptr,
659 const char*
const* papszSiblingFiles =
nullptr )
661 return FromHandle(
GDALOpenEx(pszFilename, nOpenFlags,
679 void SetEnableOverviews(
bool bEnable);
682 bool AreOverviewsEnabled()
const;
687 Private *m_poPrivate;
689 CPL_INTERNAL
OGRLayer* BuildLayerFromSelectInfo(swq_select* psSelectInfo,
691 const char *pszDialect,
692 swq_select_parse_options* poSelectParseOptions);
697 virtual int GetLayerCount();
698 virtual OGRLayer *GetLayer(
int iLayer);
700 virtual bool IsLayerPrivate(
int iLayer)
const;
721 std::unique_ptr<Private> m_poPrivate;
742 bool operator!=(
const Iterator& it)
const;
751 OGRLayer* operator[](
size_t iLayer);
752 OGRLayer* operator[](
const char* pszLayername);
757 virtual OGRLayer *GetLayerByName(
const char *);
758 virtual OGRErr DeleteLayer(
int iLayer);
760 virtual void ResetReading();
762 double* pdfProgressPct,
763 GDALProgressFunc pfnProgress,
764 void* pProgressData );
776 class CPL_DLL Iterator
779 std::unique_ptr<Private> m_poPrivate;
782 Iterator(
const Iterator& oOther);
783 Iterator(Iterator&& oOther) noexcept;
786 Iterator& operator++();
787 bool operator!=(
const Iterator& it)
const;
792 const Iterator
begin()
const;
794 const Iterator
end()
const;
799 virtual int TestCapability(
const char * );
801 virtual const OGRFieldDomain* GetFieldDomain(
const std::string& name)
const;
803 virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain>&& domain,
804 std::string& failureReason);
806 virtual OGRLayer *CreateLayer(
const char *pszName,
809 char ** papszOptions =
nullptr );
811 const char *pszNewName,
812 char **papszOptions =
nullptr );
815 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable );
819 virtual OGRLayer * ExecuteSQL(
const char *pszStatement,
821 const char *pszDialect );
822 virtual void ReleaseResultSet(
OGRLayer * poResultsSet );
823 virtual OGRErr AbortSQL( );
825 int GetRefCount()
const;
826 int GetSummaryRefCount()
const;
829 virtual OGRErr StartTransaction(
int bForce=FALSE);
830 virtual OGRErr CommitTransaction();
831 virtual OGRErr RollbackTransaction();
833 virtual std::shared_ptr<GDALGroup> GetRootGroup()
const;
836 static int IsGenericSQLDialect(
const char* pszDialect);
839 GDALSQLParseInfo* BuildParseInfo(swq_select* psSelectInfo,
840 swq_select_parse_options* poSelectParseOptions);
841 static void DestroyParseInfo(GDALSQLParseInfo* psParseInfo );
842 OGRLayer * ExecuteSQL(
const char *pszStatement,
844 const char *pszDialect,
845 swq_select_parse_options* poSelectParseOptions);
849 virtual OGRLayer *ICreateLayer(
const char *pszName,
852 char ** papszOptions =
nullptr );
855 OGRErr ProcessSQLCreateIndex(
const char * );
856 OGRErr ProcessSQLDropIndex(
const char * );
857 OGRErr ProcessSQLDropTable(
const char * );
858 OGRErr ProcessSQLAlterTableAddColumn(
const char * );
859 OGRErr ProcessSQLAlterTableDropColumn(
const char * );
860 OGRErr ProcessSQLAlterTableAlterColumn(
const char * );
861 OGRErr ProcessSQLAlterTableRenameColumn(
const char * );
869 CPLErr OldSetGCPsFromNew(
int nGCPCount,
const GDAL_GCP *pasGCPList,
872 friend class GDALProxyPoolDataset;
873 virtual const char *_GetProjectionRef();
875 virtual const char *_GetGCPProjection();
877 virtual CPLErr _SetProjection(
const char * pszProjection );
878 virtual CPLErr _SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
879 const char *pszGCPProjection );
887 struct CPL_DLL GDALDatasetUniquePtrDeleter
911 friend class GDALAbstractBandBlockCache;
916 volatile int nLockCount;
933 CPL_INTERNAL
void Detach_unlocked(
void );
934 CPL_INTERNAL
void Touch_unlocked(
void );
936 CPL_INTERNAL
void RecycleFor(
int nXOffIn,
int nYOffIn );
943 CPLErr Internalize(
void );
945 void MarkDirty(
void );
946 void MarkClean(
void );
948 int AddLock(
void ) {
return CPLAtomicInc(&nLockCount); }
950 int DropLock(
void ) {
return CPLAtomicDec(&nLockCount); }
990 int DropLockForRemovalFromStorage();
996 static void FlushDirtyBlocks();
997 static int FlushCacheBlock(
int bDirtyBlocksOnly = FALSE);
998 static void Verify();
1000 static void EnterDisableDirtyBlockFlush();
1001 static void LeaveDisableDirtyBlockFlush();
1006 static void DumpAll();
1011 CPL_INTERNAL
static void DestroyRBMutex();
1028 std::vector<GDALColorEntry> aoEntries{};
1039 int GetColorEntryCount()
const;
1045 bool IsIdentity()
const;
1070 class GDALAbstractBandBlockCache
1073 CPLLock *hSpinLock =
nullptr;
1077 CPLCond *hCond =
nullptr;
1078 CPLMutex *hCondMutex =
nullptr;
1079 volatile int nKeepAliveCounter = 0;
1081 volatile int m_nDirtyBlocks = 0;
1088 int m_nInitialDirtyBlocksInFlushCache = 0;
1089 int m_nLastTick = -1;
1090 bool m_bWriteDirtyBlocks =
true;
1092 void FreeDanglingBlocks();
1093 void UnreferenceBlockBase();
1095 void StartDirtyBlockFlushingLog();
1096 void UpdateDirtyBlockFlushingLog();
1097 void EndDirtyBlockFlushingLog();
1101 virtual ~GDALAbstractBandBlockCache();
1105 void IncDirtyBlocks(
int nInc);
1106 void WaitCompletionPendingTasks();
1107 void DisableDirtyBlockWriting() { m_bWriteDirtyBlocks =
false; }
1109 virtual bool Init() = 0;
1110 virtual bool IsInitOK() = 0;
1111 virtual CPLErr FlushCache() = 0;
1114 int nYBlockYOff ) = 0;
1116 virtual CPLErr FlushBlock(
int nXBlockOff,
int nYBlockOff,
1117 int bWriteDirtyBlock ) = 0;
1120 GDALAbstractBandBlockCache* GDALArrayBandBlockCacheCreate(
GDALRasterBand* poBand);
1121 GDALAbstractBandBlockCache* GDALHashSetBandBlockCacheCreate(
GDALRasterBand* poBand);
1136 friend class GDALArrayBandBlockCache;
1137 friend class GDALHashSetBandBlockCache;
1141 CPLErr eFlushBlockErr = CE_None;
1142 GDALAbstractBandBlockCache* poBandBlockCache =
nullptr;
1144 CPL_INTERNAL
void SetFlushBlockErr(
CPLErr eErr );
1146 CPL_INTERNAL
void SetValidPercent(
GUIntBig nSampleCount,
GUIntBig nValidCount );
1147 CPL_INTERNAL
void IncDirtyBlocks(
int nInc);
1154 int nRasterXSize = 0;
1155 int nRasterYSize = 0;
1161 int nBlockXSize = -1;
1162 int nBlockYSize = -1;
1163 int nBlocksPerRow = 0;
1164 int nBlocksPerColumn = 0;
1166 int nBlockReads = 0;
1167 int bForceCachedIO = 0;
1170 bool bOwnMask =
false;
1173 void InvalidateMaskBand();
1175 friend class GDALProxyRasterBand;
1176 friend class GDALDefaultOverviews;
1183 void LeaveReadWrite();
1188 virtual CPLErr IReadBlock(
int nBlockXOff,
int nBlockYOff,
void * pData ) = 0;
1189 virtual CPLErr IWriteBlock(
int nBlockXOff,
int nBlockYOff,
void * pData );
1195 virtual int IGetDataCoverageStatus(
int nXOff,
int nYOff,
1196 int nXSize,
int nYSize,
1198 double* pdfDataPct);
1205 int nXOff,
int nYOff,
int nXSize,
int nYSize,
1206 void * pData,
int nBufXSize,
int nBufYSize,
1212 int InitBlockInfo();
1229 void GetBlockSize(
int *,
int * );
1230 CPLErr GetActualBlockSize (
int,
int,
int *,
int * );
1236 #ifndef DOXYGEN_SKIP
1237 OPTIONAL_OUTSIDE_GDAL(
nullptr)
1247 CPLErr FlushBlock(
int,
int,
int bWriteDirtyBlock = TRUE );
1249 unsigned char* GetIndexColorTranslationTo(
GDALRasterBand* poReferenceBand,
1250 unsigned char* pTranslationTable =
nullptr,
1251 int* pApproximateMatching =
nullptr);
1255 virtual CPLErr FlushCache(
bool bAtClosing =
false);
1256 virtual char **GetCategoryNames();
1257 virtual double GetNoDataValue(
int *pbSuccess =
nullptr );
1258 virtual double GetMinimum(
int *pbSuccess =
nullptr );
1259 virtual double GetMaximum(
int *pbSuccess =
nullptr );
1260 virtual double GetOffset(
int *pbSuccess =
nullptr );
1261 virtual double GetScale(
int *pbSuccess =
nullptr );
1262 virtual const char *GetUnitType();
1265 virtual CPLErr Fill(
double dfRealValue,
double dfImaginaryValue = 0);
1267 virtual CPLErr SetCategoryNames(
char ** papszNames );
1268 virtual CPLErr SetNoDataValue(
double dfNoData );
1269 virtual CPLErr DeleteNoDataValue();
1272 virtual CPLErr SetOffset(
double dfNewOffset );
1273 virtual CPLErr SetScale(
double dfNewScale );
1274 virtual CPLErr SetUnitType(
const char * pszNewValue );
1276 virtual CPLErr GetStatistics(
int bApproxOK,
int bForce,
1277 double *pdfMin,
double *pdfMax,
1278 double *pdfMean,
double *padfStdDev );
1279 virtual CPLErr ComputeStatistics(
int bApproxOK,
1280 double *pdfMin,
double *pdfMax,
1281 double *pdfMean,
double *pdfStdDev,
1282 GDALProgressFunc,
void *pProgressData );
1283 virtual CPLErr SetStatistics(
double dfMin,
double dfMax,
1284 double dfMean,
double dfStdDev );
1285 virtual CPLErr ComputeRasterMinMax(
int,
double* );
1290 const char * pszDomain )
override;
1292 const char * pszValue,
1293 const char * pszDomain )
override;
1296 virtual int HasArbitraryOverviews();
1297 virtual int GetOverviewCount();
1300 virtual CPLErr BuildOverviews(
const char * pszResampling,
1302 int * panOverviewList,
1303 GDALProgressFunc pfnProgress,
1304 void * pProgressData );
1306 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1307 int nBufXSize,
int nBufYSize,
1310 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
1311 int nBuckets,
GUIntBig * panHistogram,
1312 int bIncludeOutOfRange,
int bApproxOK,
1313 GDALProgressFunc,
void *pProgressData );
1315 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
1316 int *pnBuckets,
GUIntBig ** ppanHistogram,
1318 GDALProgressFunc,
void *pProgressData);
1319 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
1320 int nBuckets,
GUIntBig *panHistogram );
1326 virtual int GetMaskFlags();
1327 virtual CPLErr CreateMaskBand(
int nFlagsIn );
1334 int GetDataCoverageStatus(
int nXOff,
int nYOff,
1335 int nXSize,
int nYSize,
1336 int nMaskFlagStop = 0,
1337 double* pdfDataPct =
nullptr );
1339 std::shared_ptr<GDALMDArray> AsMDArray()
const;
1375 ~GDALAllValidMaskBand()
override;
1381 double *pdfMin,
double *pdfMax,
1382 double *pdfMean,
double *pdfStdDev,
1383 GDALProgressFunc,
void *pProgressData )
override;
1393 double dfNoDataValue;
1406 ~GDALNoDataMaskBand()
override;
1408 static bool IsNoDataInRange(
double dfNoDataValue,
1418 double *padfNodataValues;
1426 explicit GDALNoDataValuesMaskBand(
GDALDataset * );
1427 ~GDALNoDataValuesMaskBand()
override;
1450 ~GDALRescaledAlphaBand()
override;
1495 const char * pszValue,
1496 const char * pszDomain =
"" )
override;
1502 int nXSize,
int nYSize,
int nBands,
1505 GDALDataset *CreateMultiDimensional(
const char * pszName,
1509 CPLErr Delete(
const char * pszName );
1510 CPLErr Rename(
const char * pszNewName,
1511 const char * pszOldName );
1512 CPLErr CopyFiles(
const char * pszNewName,
1513 const char * pszOldName );
1517 GDALProgressFunc pfnProgress,
1529 int nXSize,
int nYSize,
int nBands,
1531 char ** papszOptions );
1534 int nXSize,
int nYSize,
int nBands,
1536 char ** papszOptions );
1538 GDALDataset *(*pfnCreateMultiDimensional)(
const char * pszName,
1542 CPLErr (*pfnDelete)(
const char * pszName );
1546 GDALProgressFunc pfnProgress,
1547 void * pProgressData );
1563 CPLErr (*pfnRename)(
const char * pszNewName,
1564 const char * pszOldName );
1565 CPLErr (*pfnCopyFiles)(
const char * pszNewName,
1566 const char * pszOldName );
1573 const char * pszName,
1574 char ** papszOptions );
1576 const char * pszName );
1585 GDALProgressFunc pfnProgress,
1588 static CPLErr DefaultCreateCopyMultiDimensional(
1593 GDALProgressFunc pfnProgress,
1594 void * pProgressData );
1603 GDALProgressFunc pfnProgress,
1604 void * pProgressData );
1606 static CPLErr QuietDelete(
const char * pszName,
1610 static CPLErr DefaultRename(
const char * pszNewName,
1611 const char * pszOldName );
1612 static CPLErr DefaultCopyFiles(
const char * pszNewName,
1613 const char * pszOldName );
1626 {
return static_cast<GDALDriver*
>(hDriver); }
1647 std::map<CPLString, GDALDriver*> oMapNameToDrivers{};
1649 GDALDriver *GetDriver_unlocked(
int iDriver )
1650 {
return (iDriver >= 0 && iDriver < nDrivers) ?
1651 papoDrivers[iDriver] :
nullptr; }
1653 GDALDriver *GetDriverByName_unlocked(
const char * pszName )
1656 static char** GetSearchPaths(
const char* pszGDAL_DRIVER_PATH);
1658 static void CleanupPythonDrivers();
1666 int GetDriverCount(
void )
const;
1674 static void AutoLoadDrivers();
1675 void AutoSkipDrivers();
1677 static void AutoLoadPythonDrivers();
1778 GetNextUpdatedRegion(
double dfTimeout,
1779 int* pnBufXOff,
int* pnBufYOff,
1780 int* pnBufXSize,
int* pnBufYSize) = 0;
1781 virtual int LockBuffer(
double dfTimeout = -1.0 );
1782 virtual void UnlockBuffer();
1817 std::vector<std::unique_ptr<GDALEDTComponent>>&& components);
1829 const std::string&
GetName()
const {
return m_osName; }
1855 const std::vector<std::unique_ptr<GDALEDTComponent>>&
GetComponents()
const {
return m_aoComponents; }
1873 bool NeedsFreeDynamicMemory()
const;
1875 void FreeDynamicMemory(
void* pBuffer)
const;
1886 std::vector<std::unique_ptr<GDALEDTComponent>>&& components);
1888 std::string m_osName{};
1892 std::vector<std::unique_ptr<GDALEDTComponent>> m_aoComponents{};
1894 size_t m_nMaxStringLength = 0;
1919 const std::string&
GetName()
const {
return m_osName; }
1934 std::string m_osName;
1951 std::shared_ptr<GDALAttribute> GetAttributeFromAttributes(
const std::string& osName)
const;
1956 virtual std::shared_ptr<GDALAttribute> GetAttribute(
const std::string& osName)
const;
1958 virtual std::vector<std::shared_ptr<GDALAttribute>> GetAttributes(
CSLConstList papszOptions =
nullptr)
const;
1960 virtual std::shared_ptr<GDALAttribute> CreateAttribute(
1961 const std::string& osName,
1962 const std::vector<GUInt64>& anDimensions,
1983 std::string m_osName{};
1984 std::string m_osFullName{};
1986 GDALGroup(
const std::string& osParentName,
const std::string& osName);
1988 const GDALGroup* GetInnerMostGroup(
const std::string& osPathOrArrayOrDim,
1989 std::shared_ptr<GDALGroup>& curGroupHolder,
1990 std::string& osLastPart)
const;
2000 const std::string&
GetName()
const {
return m_osName; }
2008 virtual std::vector<std::string> GetMDArrayNames(
CSLConstList papszOptions =
nullptr)
const;
2009 virtual std::shared_ptr<GDALMDArray> OpenMDArray(
const std::string& osName,
2012 virtual std::vector<std::string> GetGroupNames(
CSLConstList papszOptions =
nullptr)
const;
2013 virtual std::shared_ptr<GDALGroup> OpenGroup(
const std::string& osName,
2016 virtual std::vector<std::string> GetVectorLayerNames(
CSLConstList papszOptions =
nullptr)
const;
2017 virtual OGRLayer* OpenVectorLayer(
const std::string& osName,
2020 virtual std::vector<std::shared_ptr<GDALDimension>> GetDimensions(
CSLConstList papszOptions =
nullptr)
const;
2022 virtual std::shared_ptr<GDALGroup> CreateGroup(
const std::string& osName,
2025 virtual std::shared_ptr<GDALDimension> CreateDimension(
const std::string& osName,
2026 const std::string& osType,
2027 const std::string& osDirection,
2031 virtual std::shared_ptr<GDALMDArray> CreateMDArray(
const std::string& osName,
2032 const std::vector<std::shared_ptr<GDALDimension>>& aoDimensions,
2036 GUInt64 GetTotalCopyCost()
const;
2038 virtual bool CopyFrom(
const std::shared_ptr<GDALGroup>& poDstRootGroup,
2040 const std::shared_ptr<GDALGroup>& poSrcGroup,
2044 GDALProgressFunc pfnProgress,
2045 void * pProgressData,
2050 std::shared_ptr<GDALMDArray> OpenMDArrayFromFullname(
2051 const std::string& osFullName,
2054 std::shared_ptr<GDALMDArray> ResolveMDArray(
const std::string& osName,
2055 const std::string& osStartingPath,
2058 std::shared_ptr<GDALGroup> OpenGroupFromFullname(
2059 const std::string& osFullName,
2062 std::shared_ptr<GDALDimension> OpenDimensionFromFullname(
2063 const std::string& osFullName)
const;
2065 virtual void ClearStatistics();
2068 static constexpr
GUInt64 COPY_COST = 1000;
2085 std::string m_osName{};
2086 std::string m_osFullName{};
2087 std::weak_ptr<GDALAbstractMDArray> m_pSelf{};
2091 void SetSelf(std::weak_ptr<GDALAbstractMDArray>
self) { m_pSelf =
self; }
2093 bool CheckReadWriteParams(
const GUInt64* arrayStartIdx,
2094 const size_t* count,
2095 const GInt64*& arrayStep,
2099 const void* buffer_alloc_start,
2100 size_t buffer_alloc_size,
2101 std::vector<GInt64>& tmp_arrayStep,
2102 std::vector<GPtrDiff_t>& tmp_bufferStride)
const;
2104 virtual bool IRead(
const GUInt64* arrayStartIdx,
2105 const size_t* count,
2109 void* pDstBuffer)
const = 0;
2111 virtual bool IWrite(
const GUInt64* arrayStartIdx,
2112 const size_t* count,
2116 const void* pSrcBuffer);
2126 const std::string&
GetName()
const{
return m_osName; }
2134 GUInt64 GetTotalElementsCount()
const;
2136 virtual size_t GetDimensionCount()
const;
2138 virtual const std::vector<std::shared_ptr<GDALDimension>>& GetDimensions()
const = 0;
2142 virtual std::vector<GUInt64> GetBlockSize()
const;
2144 virtual std::vector<size_t> GetProcessingChunkSize(
size_t nMaxChunkMemory)
const;
2161 typedef bool (*FuncProcessPerChunkType)(
2163 const GUInt64* chunkArrayStartIdx,
2164 const size_t* chunkCount,
2169 virtual bool ProcessPerChunk(
const GUInt64* arrayStartIdx,
2171 const size_t* chunkSize,
2172 FuncProcessPerChunkType pfnFunc,
2175 virtual bool Read(
const GUInt64* arrayStartIdx,
2176 const size_t* count,
2181 const void* pDstBufferAllocStart =
nullptr,
2182 size_t nDstBufferAllocSize = 0)
const;
2184 bool Write(
const GUInt64* arrayStartIdx,
2185 const size_t* count,
2189 const void* pSrcBuffer,
2190 const void* pSrcBufferAllocStart =
nullptr,
2191 size_t nSrcBufferAllocSize = 0);
2235 size_t size()
const {
return m_nSize; }
2259 mutable std::string m_osCachedVal{};
2263 GDALAttribute(
const std::string& osParentName,
const std::string& osName);
2268 std::vector<GUInt64> GetDimensionsSize()
const;
2271 const char* ReadAsString()
const;
2272 int ReadAsInt()
const;
2273 double ReadAsDouble()
const;
2275 std::vector<int> ReadAsIntArray()
const;
2276 std::vector<double> ReadAsDoubleArray()
const;
2279 bool Write(
const void* pabyValue,
size_t nLen);
2280 bool Write(
const char*);
2284 bool Write(
const double*,
size_t);
2287 static constexpr
GUInt64 COPY_COST = 100;
2297 class CPL_DLL GDALAttributeString final:
public GDALAttribute 2299 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
2301 std::string m_osValue;
2310 void* pDstBuffer)
const override;
2313 GDALAttributeString(
const std::string& osParentName,
2314 const std::string& osName,
2315 const std::string& osValue,
2318 const std::vector<std::shared_ptr<GDALDimension>>&
GetDimensions()
const override;
2329 class CPL_DLL GDALAttributeNumeric final:
public GDALAttribute 2331 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
2334 double m_dfValue = 0;
2335 std::vector<GUInt32> m_anValuesUInt32{};
2344 void* pDstBuffer)
const override;
2347 GDALAttributeNumeric(
const std::string& osParentName,
2348 const std::string& osName,
2350 GDALAttributeNumeric(
const std::string& osParentName,
2351 const std::string& osName,
2353 GDALAttributeNumeric(
const std::string& osParentName,
2354 const std::string& osName,
2355 const std::vector<GUInt32>& anValues);
2357 const std::vector<std::shared_ptr<GDALDimension>>&
GetDimensions()
const override;
2377 friend class GDALMDArrayResampled;
2378 std::shared_ptr<GDALMDArray> GetView(
const std::vector<GUInt64>& indices)
const;
2380 inline std::shared_ptr<GDALMDArray> atInternal(std::vector<GUInt64>& indices)
const 2382 return GetView(indices);
2385 template<
typename... GUInt64VarArg>
2387 inline std::shared_ptr<GDALMDArray> atInternal(std::vector<GUInt64>& indices,
2388 GUInt64 idx, GUInt64VarArg... tail)
const 2390 indices.push_back(idx);
2391 return atInternal(indices, tail...);
2394 mutable bool m_bHasTriedCachedArray =
false;
2395 mutable std::shared_ptr<GDALMDArray> m_poCachedArray{};
2399 GDALMDArray(
const std::string& osParentName,
const std::string& osName);
2401 virtual bool IAdviseRead(
const GUInt64* arrayStartIdx,
2402 const size_t* count,
2405 virtual bool IsCacheable()
const {
return true; }
2407 virtual bool SetStatistics(
bool bApproxStats,
2408 double dfMin,
double dfMax,
2409 double dfMean,
double dfStdDev,
2412 static std::string MassageName(
const std::string& inputName);
2414 std::shared_ptr<GDALGroup> GetCacheRootGroup(
bool bCanCreate,
2415 std::string& osCacheFilenameOut)
const;
2420 GUInt64 GetTotalCopyCost()
const;
2427 GDALProgressFunc pfnProgress,
2428 void * pProgressData);
2431 virtual bool IsWritable()
const = 0;
2441 virtual const std::string& GetFilename()
const = 0;
2445 virtual const std::string& GetUnit()
const;
2447 virtual bool SetUnit(
const std::string& osUnit);
2451 virtual std::shared_ptr<OGRSpatialReference> GetSpatialRef()
const;
2453 virtual const void* GetRawNoDataValue()
const;
2455 double GetNoDataValueAsDouble(
bool* pbHasNoData =
nullptr)
const;
2457 virtual bool SetRawNoDataValue(
const void* pRawNoData);
2459 bool SetNoDataValue(
double dfNoData);
2461 virtual double GetOffset(
bool* pbHasOffset =
nullptr,
GDALDataType* peStorageType =
nullptr)
const;
2463 virtual double GetScale(
bool* pbHasScale =
nullptr,
GDALDataType* peStorageType =
nullptr)
const;
2469 std::shared_ptr<GDALMDArray> GetView(
const std::string& viewExpr)
const;
2471 std::shared_ptr<GDALMDArray> operator[](
const std::string& fieldName)
const;
2484 template<
typename... GUInt64VarArg>
2487 std::shared_ptr<GDALMDArray>
at(
GUInt64 idx, GUInt64VarArg... tail)
const 2489 std::vector<GUInt64> indices;
2490 indices.push_back(idx);
2491 return atInternal(indices, tail...);
2494 virtual std::shared_ptr<GDALMDArray> Transpose(
const std::vector<int>& anMapNewAxisToOldAxis)
const;
2496 std::shared_ptr<GDALMDArray> GetUnscaled()
const;
2498 virtual std::shared_ptr<GDALMDArray> GetMask(
CSLConstList papszOptions)
const;
2500 std::shared_ptr<GDALMDArray>
2501 GetResampled(
const std::vector<std::shared_ptr<GDALDimension>>& apoNewDims,
2506 virtual GDALDataset* AsClassicDataset(
size_t iXDim,
size_t iYDim)
const;
2508 virtual CPLErr GetStatistics(
bool bApproxOK,
bool bForce,
2509 double *pdfMin,
double *pdfMax,
2510 double *pdfMean,
double *padfStdDev,
2512 GDALProgressFunc pfnProgress,
void *pProgressData );
2514 virtual bool ComputeStatistics(
bool bApproxOK,
2515 double *pdfMin,
double *pdfMax,
2516 double *pdfMean,
double *pdfStdDev,
2518 GDALProgressFunc,
void *pProgressData );
2520 virtual void ClearStatistics();
2522 virtual std::vector<std::shared_ptr<GDALMDArray>> GetCoordinateVariables()
const;
2524 bool AdviseRead(
const GUInt64* arrayStartIdx,
2525 const size_t* count,
2528 bool IsRegularlySpaced(
double& dfStart,
double& dfIncrement)
const;
2530 bool GuessGeoTransform(
size_t nDimX,
size_t nDimY,
bool bPixelIsPoint,
2531 double adfGeoTransform[6])
const;
2533 bool Cache(
CSLConstList papszOptions =
nullptr )
const;
2536 const size_t* count,
2541 const void* pDstBufferAllocStart =
nullptr,
2542 size_t nDstBufferAllocSize = 0) const override final;
2545 static constexpr
GUInt64 COPY_COST = 1000;
2547 bool CopyFromAllExceptValues(const
GDALMDArray* poSrcArray,
2551 GDALProgressFunc pfnProgress,
2552 void * pProgressData);
2558 m_nStartIdx(nStartIdx), m_nIncr(nIncr) {}
2563 std::string m_osFieldName{};
2567 std::vector<size_t> m_mapDimIdxToParentDimIdx{};
2568 std::vector<Range> m_parentRanges{} ;
2571 virtual std::shared_ptr<GDALMDArray> GetView(
const std::string& viewExpr,
2572 bool bRenameDimensions,
2573 std::vector<ViewSpec>& viewSpecs)
const;
2583 const size_t* count,
2595 class CPL_DLL GDALMDArrayRegularlySpaced:
public GDALMDArray 2598 double m_dfIncrement;
2599 double m_dfOffsetInIncrement;
2601 std::vector<std::shared_ptr<GDALDimension>> m_dims;
2602 std::vector<std::shared_ptr<GDALAttribute>> m_attributes{};
2603 std::string m_osEmptyFilename{};
2612 void* pDstBuffer)
const override;
2615 GDALMDArrayRegularlySpaced(
2616 const std::string& osParentName,
2617 const std::string& osName,
2618 const std::shared_ptr<GDALDimension>& poDim,
2619 double dfStart,
double dfIncrement,
2620 double dfOffsetInIncrement);
2622 bool IsWritable()
const override {
return false; }
2624 const std::string&
GetFilename()
const override {
return m_osEmptyFilename; }
2626 const std::vector<std::shared_ptr<GDALDimension>>&
GetDimensions()
const override;
2632 void AddAttribute(
const std::shared_ptr<GDALAttribute>& poAttr);
2656 const std::string& osName,
2657 const std::string& osType,
2658 const std::string& osDirection,
2668 const std::string&
GetName()
const {
return m_osName; }
2684 const std::string&
GetType()
const {
return m_osType; }
2702 virtual std::shared_ptr<GDALMDArray> GetIndexingVariable()
const;
2704 virtual bool SetIndexingVariable(std::shared_ptr<GDALMDArray> poIndexingVariable);
2708 std::string m_osName;
2709 std::string m_osFullName;
2710 std::string m_osType;
2711 std::string m_osDirection;
2722 class CPL_DLL GDALDimensionWeakIndexingVar:
public GDALDimension 2724 std::weak_ptr<GDALMDArray> m_poIndexingVariable{};
2727 GDALDimensionWeakIndexingVar(
const std::string& osParentName,
2728 const std::string& osName,
2729 const std::string& osType,
2730 const std::string& osDirection,
2744 struct GDALAntiRecursionStruct;
2745 class GDALAntiRecursionGuard
2747 GDALAntiRecursionStruct* m_psAntiRecursionStruct;
2748 std::string m_osIdentifier;
2751 GDALAntiRecursionGuard(
const GDALAntiRecursionGuard&) =
delete;
2752 GDALAntiRecursionGuard& operator= (
const GDALAntiRecursionGuard&) =
delete;
2755 explicit GDALAntiRecursionGuard(
const std::string& osIdentifier);
2756 GDALAntiRecursionGuard(
const GDALAntiRecursionGuard& other,
const std::string& osIdentifier);
2757 ~GDALAntiRecursionGuard();
2758 int GetCallDepth()
const {
return m_nDepth; }
2770 GDALRegenerateOverviewsMultiBand(
int nBands,
GDALRasterBand** papoSrcBands,
2773 const char * pszResampling,
2774 GDALProgressFunc pfnProgress,
void * pProgressData );
2776 typedef CPLErr (*GDALResampleFunction)
2777 (
double dfXRatioDstToSrc,
2778 double dfYRatioDstToSrc,
2782 const void * pChunk,
2783 const GByte * pabyChunkNodataMask,
2784 int nChunkXOff,
int nChunkXSize,
2785 int nChunkYOff,
int nChunkYSize,
2786 int nDstXOff,
int nDstXOff2,
2787 int nDstYOff,
int nDstYOff2,
2791 const char * pszResampling,
2792 int bHasNoData,
float fNoDataValue,
2795 bool bPropagateNoData );
2797 GDALResampleFunction GDALGetResampleFunction(
const char* pszResampling,
2800 GDALDataType GDALGetOvrWorkDataType(
const char* pszResampling,
2806 HFAAuxBuildOverviews(
const char *pszOvrFilename,
GDALDataset *poParentDS,
2808 int nBands,
int *panBandList,
2809 int nNewOverviews,
int *panNewOverviewList,
2810 const char *pszResampling,
2811 GDALProgressFunc pfnProgress,
2812 void *pProgressData );
2815 GTIFFBuildOverviews(
const char * pszFilename,
2817 int nOverviews,
int * panOverviewList,
2818 const char * pszResampling,
2819 GDALProgressFunc pfnProgress,
void * pProgressData );
2822 int &nXOff,
int &nYOff,
2823 int &nXSize,
int &nYSize,
2824 int nBufXSize,
int nBufYSize) CPL_WARN_DEPRECATED(
"Use GDALBandGetBestOverviewLevel2 instead");
2825 int CPL_DLL GDALBandGetBestOverviewLevel2(
GDALRasterBand* poBand,
2826 int &nXOff,
int &nYOff,
2827 int &nXSize,
int &nYSize,
2828 int nBufXSize,
int nBufYSize,
2831 int CPL_DLL GDALOvLevelAdjust(
int nOvLevel,
int nXSize ) CPL_WARN_DEPRECATED(
"Use GDALOvLevelAdjust2 instead");
2832 int CPL_DLL GDALOvLevelAdjust2(
int nOvLevel,
int nXSize,
int nYSize );
2833 int CPL_DLL GDALComputeOvFactor(
int nOvrXSize,
int nRasterXSize,
2834 int nOvrYSize,
int nRasterYSize );
2837 GDALFindAssociatedAuxFile(
const char *pszBasefile,
GDALAccess eAccess,
2844 int CPL_DLL GDALCheckDatasetDimensions(
int nXSize,
int nYSize );
2845 int CPL_DLL GDALCheckBandCount(
int nBands,
int bIsZeroAllowed );
2850 int CPL_DLL GDALReadWorldFile2(
const char *pszBaseFilename,
const char *pszExtension,
2851 double *padfGeoTransform,
char** papszSiblingFiles,
2852 char** ppszWorldFileNameOut);
2853 int GDALReadTabFile2(
const char * pszBaseFilename,
2854 double *padfGeoTransform,
char **ppszWKT,
2855 int *pnGCPCount,
GDAL_GCP **ppasGCPs,
2856 char** papszSiblingFiles,
char** ppszTabFileNameOut );
2863 void GDALNullifyOpenDatasetsList();
2864 CPLMutex** GDALGetphDMMutex();
2865 CPLMutex** GDALGetphDLMutex();
2866 void GDALNullifyProxyPoolSingleton();
2867 void GDALSetResponsiblePIDForCurrentThread(
GIntBig responsiblePID);
2868 GIntBig GDALGetResponsiblePIDForCurrentThread();
2870 CPLString GDALFindAssociatedFile(
const char *pszBasename,
const char *pszExt,
2873 CPLErr CPL_DLL EXIFExtractMetadata(
char**& papszMetadata,
2874 void *fpL,
int nOffset,
2875 int bSwabflag,
int nTIFFHEADER,
2876 int& nExifOffset,
int& nInterOffset,
int& nGPSOffset);
2879 const char*
const* papszOptionOptions);
2880 int GDALValidateOptions(
const char* pszOptionList,
2881 const char*
const* papszOptionsToValidate,
2882 const char* pszErrorMessageOptionType,
2883 const char* pszErrorMessageContainerName);
2889 int nXSize,
int nYSize,
2890 int nBufXSize,
int nBufYSize);
2894 int bThisLevelOnly);
2899 template<
class T>
inline bool ARE_REAL_EQUAL(T fVal1, T fVal2,
int ulp = 2)
2901 return fVal1 == fVal2 ||
2902 std::abs(fVal1 - fVal2) < std::numeric_limits<float>::epsilon() * std::abs(fVal1+fVal2) * ulp;
2905 double GDALAdjustNoDataCloseToFloatMax(
double dfVal);
2907 #define DIV_ROUND_UP(a, b) ( ((a) % (b)) == 0 ? ((a) / (b)) : (((a) / (b)) + 1) ) 2911 #define GDALSTAT_APPROX_NUMSAMPLES 2500 2913 void GDALSerializeGCPListToXML(
CPLXMLNode* psParentNode,
2917 void GDALDeserializeGCPListFromXML(
CPLXMLNode* psGCPList,
2922 void GDALSerializeOpenOptionsToXML(
CPLXMLNode* psParentNode,
char** papszOpenOptions);
2923 char** GDALDeserializeOpenOptionsFromXML(
CPLXMLNode* psParentNode );
2925 int GDALCanFileAcceptSidecarFile(
const char* pszFilename);
2927 bool GDALCanReliablyUseSiblingFileList(
const char* pszFilename);
2929 bool CPL_DLL GDALIsDriverDeprecatedForGDAL35StillEnabled(
const char* pszDriverName,
const char* pszExtraMsg =
"");
2936 } GDALBufferSampleFormat;
2938 bool CPL_DLL GDALBufferHasOnlyNoData(
const void* pBuffer,
2939 double dfNoDataValue,
2940 size_t nWidth,
size_t nHeight,
2944 GDALBufferSampleFormat nSampleFormat);
const GByte & operator[](size_t idx) const
Return byte at specified index.
Definition: gdal_priv.h:2231
The GDALRasterAttributeTable (or RAT) class is used to encapsulate a table used to provide attribute ...
Definition: gdal_rat.h:47
Layer iterator.
Definition: gdal_priv.h:718
size_t size() const
Return the size in bytes of the raw result.
Definition: gdal_priv.h:2235
std::shared_ptr< GDALMDArray > at(GUInt64 idx, GUInt64VarArg... tail) const
Return a view of the array using integer indexing.
Definition: gdal_priv.h:2487
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition: ogr_feature.h:796
GDALExtendedDataTypeClass GetClass() const
Return type class.
Definition: gdal_priv.h:1835
int GetYSize() const
Return height.
Definition: gdal_priv.h:1739
GDALDataType
Definition: gdal.h:62
Definition of a field domain.
Definition: ogr_feature.h:835
Identify could not determine if the file is recognized or not by the probed driver.
Definition: gdal_priv.h:1466
Document node structure.
Definition: cpl_minixml.h:69
virtual GDALRasterBand * GetMaskBand()
Return the mask band associated with the band.
Definition: gdalrasterband.cpp:5957
size_t GetMaxStringLength() const
Return the maximum length of a string in bytes.
Definition: gdal_priv.h:1869
Definitions for CPL mini XML Parser/Serializer.
void static GDALRasterBandH ToHandle(GDALRasterBand *poBand)
Convert a GDALRasterBand* to a GDALRasterBandH.
Definition: gdal_priv.h:1348
GDALDataset * GetGDALDataset()
Return dataset.
Definition: gdal_priv.h:1723
int GetBandCount() const
Return band count.
Definition: gdal_priv.h:1759
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:329
const std::vector< std::unique_ptr< GDALEDTComponent > > & GetComponents() const
Return the components of the data type (only valid when GetClass() == GEDTC_COMPOUND) ...
Definition: gdal_priv.h:1855
Object returned by GetFeatures() iterators.
Definition: gdal_priv.h:668
const char *const * papszAllowedDrivers
Allowed drivers (NULL for all)
Definition: gdal_priv.h:303
int GetXOffset() const
Return x offset.
Definition: gdal_priv.h:1727
GUInt64 GetSize() const
Return the size, that is the number of values along the dimension.
Definition: gdal_priv.h:2700
GDALExtendedDataTypeSubType
Enumeration giving the subtype of a GDALExtendedDataType.
Definition: gdal.h:303
GDALDataType GetNumericDataType() const
Return numeric data type (only valid when GetClass() == GEDTC_NUMERIC)
Definition: gdal_priv.h:1841
int * GetBandMap()
Return band map.
Definition: gdal_priv.h:1763
int DropLock(void)
Decrement the lock count.
Definition: gdal_priv.h:950
Class modeling a named container of GDALAttribute, GDALMDArray, OGRLayer or other GDALGroup...
Definition: gdal_priv.h:1979
FILE VSILFILE
Opaque type for a FILE that implements the VSIVirtualHandle API.
Definition: cpl_vsi.h:156
char ** GetOpenOptions()
Return open options.
Definition: gdal_priv.h:610
virtual bool IsWritable() const =0
Return whether an array is writable.
void pointer
pointer
Definition: gdal_priv.h:727
GByte * pabyHeader
Buffer with first bytes of the file.
Definition: gdal_priv.h:300
size_t GetSize() const
Return data type size in bytes.
Definition: gdal_priv.h:1863
int GetLineSpace() const
Return line spacing.
Definition: gdal_priv.h:1771
GDALAccess eAccess
Access flag.
Definition: gdal_priv.h:285
const std::string & GetName() const
Return type name.
Definition: gdal_priv.h:1829
GDALDataType GetDataType() const
Return the data type.
Definition: gdal_priv.h:958
GDALRIOResampleAlg
RasterIO() resampling method.
Definition: gdal.h:130
VSILFILE * fpL
Pointer to the file.
Definition: gdal_priv.h:295
int GetBufferYSize() const
Return buffer height.
Definition: gdal_priv.h:1751
const std::string & GetName() const
Return the name of the group.
Definition: gdal_priv.h:2000
static GDALRasterBand * FromHandle(GDALRasterBandH hBand)
Convert a GDALRasterBandH to a GDALRasterBand*.
Definition: gdal_priv.h:1354
virtual bool Read(const GUInt64 *arrayStartIdx, const size_t *count, const GInt64 *arrayStep, const GPtrDiff_t *bufferStride, const GDALExtendedDataType &bufferDataType, void *pDstBuffer, const void *pDstBufferAllocStart=nullptr, size_t nDstBufferAllocSize=0) const
Read part or totality of a multidimensional array or attribute.
Definition: gdalmultidim.cpp:1724
int GetBandSpace() const
Return band spacing.
Definition: gdal_priv.h:1775
GDALRWFlag
Definition: gdal.h:121
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition: gdal.h:268
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:215
char * pszFilename
Filename.
Definition: gdal_priv.h:280
Color tuple.
Definition: gdal.h:1286
int nOpenFlags
Open flags.
Definition: gdal_priv.h:287
A single raster block in the block cache.
Definition: gdal_priv.h:909
virtual int GetMaskFlags()
Return the status flags of the mask band associated with the band.
Definition: gdalrasterband.cpp:6222
void * GDALRasterBandH
Opaque type used for the C bindings of the C++ GDALRasterBand class.
Definition: gdal.h:271
int AddLock(void)
Increment the lock count.
Definition: gdal_priv.h:948
Convenient string class based on std::string.
Definition: cpl_string.h:332
#define CPL_PRINT_FUNC_FORMAT(format_idx, arg_idx)
Tag a function to have printf() formatting.
Definition: cpl_port.h:869
Class modeling an attribute that has a name, a value and a type, and is typically used to describe a ...
Definition: gdal_priv.h:2257
virtual CPLErr ComputeStatistics(int bApproxOK, double *pdfMin, double *pdfMax, double *pdfMean, double *pdfStdDev, GDALProgressFunc, void *pProgressData)
Compute image statistics.
Definition: gdalrasterband.cpp:4927
unknown type, non-standard
Definition: ogr_core.h:347
struct CPLVirtualMem CPLVirtualMem
Opaque type that represents a virtual memory mapping.
Definition: cpl_virtualmem.h:62
const std::string & GetFullName() const
Return the full name of the group.
Definition: gdal_priv.h:2006
const GDALExtendedDataType & GetType() const
Return the data type of the component.
Definition: gdal_priv.h:1931
virtual CPLErr IReadBlock(int nBlockXOff, int nBlockYOff, void *pData)=0
Read a block of data.
Class modeling a a dimension / axis used to index multidimensional arrays.
Definition: gdal_priv.h:2651
GDALExtendedDataTypeSubType GetSubType() const
Return subtype.
Definition: gdal_priv.h:1849
CPLErr BuildOverviews(const char *, int, int *, int, int *, GDALProgressFunc, void *)
Build raster overview(s)
Definition: gdaldataset.cpp:1980
virtual std::shared_ptr< GDALMDArray > GetIndexingVariable() const
Return the variable that is used to index the dimension (if there is one).
Definition: gdalmultidim.cpp:8033
Various convenience functions for working with strings and string lists.
virtual const GDALExtendedDataType & GetDataType() const =0
Return the data type of an attribute/array.
virtual std::vector< std::shared_ptr< GDALAttribute > > GetAttributes(CSLConstList papszOptions=nullptr) const
Return the list of attributes contained in a GDALMDArray or GDALGroup.
Definition: gdalmultidim.cpp:223
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition: gdal.h:286
int bIsDirectory
Whether the file is a directory.
Definition: gdal_priv.h:292
static GDALColorTableH ToHandle(GDALColorTable *poCT)
Convert a GDALColorTable* to a GDALRasterBandH.
Definition: gdal_priv.h:1050
int GetDirty() const
Return the dirty flag.
Definition: gdal_priv.h:978
GUIntBig GUInt64
Unsigned 64 bit integer type.
Definition: cpl_port.h:265
int GetXOff() const
Return the x offset of the top-left corner of the block.
Definition: gdal_priv.h:962
GIntBig GPtrDiff_t
Integer type large enough to hold the difference between 2 addresses.
Definition: cpl_port.h:282
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:345
static GDALDriverH ToHandle(GDALDriver *poDriver)
Convert a GDALDriver* to a GDALDriverH.
Definition: gdal_priv.h:1619
Public (C callable) GDAL entry points.
bool Write(const GUInt64 *arrayStartIdx, const size_t *count, const GInt64 *arrayStep, const GPtrDiff_t *bufferStride, const GDALExtendedDataType &bufferDataType, const void *pSrcBuffer, const void *pSrcBufferAllocStart=nullptr, size_t nSrcBufferAllocSize=0)
Write part or totality of a multidimensional array or attribute.
Definition: gdalmultidim.cpp:1841
static GDALDataset * Open(const char *pszFilename, unsigned int nOpenFlags=0, const char *const *papszAllowedDrivers=nullptr, const char *const *papszOpenOptions=nullptr, const char *const *papszSiblingFiles=nullptr)
Definition: gdal_priv.h:655
GDALAsyncStatusType
status of the asynchronous stream
Definition: gdal.h:102
const std::string & GetFullName() const
Return the full name.
Definition: gdal_priv.h:2674
int GetPixelSpace() const
Return pixel spacing.
Definition: gdal_priv.h:1767
virtual const std::vector< std::shared_ptr< GDALDimension > > & GetDimensions() const =0
Return the dimensions of an attribute/array.
GPtrDiff_t GetBlockSize() const
Return the block size in bytes.
Definition: gdal_priv.h:986
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:326
virtual CPLErr SetMetadata(char **papszMetadata, const char *pszDomain="")
Set metadata.
Definition: gdalmajorobject.cpp:292
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1169
GDALExtendedDataTypeClass
Enumeration giving the class of a GDALExtendedDataType.
Definition: gdal.h:291
void * GetBuffer()
Return buffer.
Definition: gdal_priv.h:1743
GDALRasterBand * GetBand()
Accessor to source GDALRasterBand object.
Definition: gdal_priv.h:994
Class for dataset open functions.
Definition: gdal_priv.h:268
GDALAccess GetAccess() const
Return access mode.
Definition: gdal_priv.h:600
Class used to represent potentially complex data types.
Definition: gdal_priv.h:1805
GDALDatasetH GDALOpenEx(const char *pszFilename, unsigned int nOpenFlags, const char *const *papszAllowedDrivers, const char *const *papszOpenOptions, const char *const *papszSiblingFiles)
Open a raster or vector file as a GDALDataset.
Definition: gdaldataset.cpp:3338
const std::string & GetDirection() const
Return the axis direction.
Definition: gdal_priv.h:2694
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:441
virtual const std::string & GetFilename() const =0
Return the filename that contains that array.
static GDALDriver * FromHandle(GDALDriverH hDriver)
Convert a GDALDriverH to a GDALDriver*.
Definition: gdal_priv.h:1625
Identify determined the file is recognized by the probed driver.
Definition: gdal_priv.h:1470
const std::string & GetType() const
Return the axis type.
Definition: gdal_priv.h:2684
static GDALMajorObjectH ToHandle(GDALMajorObject *poMajorObject)
Convert a GDALMajorObject* to a GDALMajorObjectH.
Definition: gdal_priv.h:171
const std::string & GetName() const
Return the name of an array or attribute.
Definition: gdal_priv.h:2126
GDALPaletteInterp
Definition: gdal.h:229
Core portability services for cross-platform OGR code.
int bStatOK
Whether stat()'ing the file was successful.
Definition: gdal_priv.h:290
int nHeaderBytes
Number of bytes in pabyHeader.
Definition: gdal_priv.h:298
Class returned by GetBands() that act as a container for raster bands.
Definition: gdal_priv.h:475
virtual int CloseDependentDatasets()
Drop references to any other datasets referenced by this dataset.
Definition: gdaldataset.cpp:4144
Store the raw result of an attribute value, which might contain dynamically allocated structures (lik...
Definition: gdal_priv.h:2204
void * GetDataRef(void)
Return the data buffer.
Definition: gdal_priv.h:982
virtual CPLErr CreateMaskBand(int nFlagsIn)
Adds a mask band to the dataset.
Definition: gdaldataset.cpp:3147
unsigned long long GUIntBig
Large unsigned integer type (generally 64-bit unsigned integer type).
Definition: cpl_port.h:247
int CPLErrorNum
Error number.
Definition: cpl_error.h:94
Various convenience functions for CPL.
std::unique_ptr< GDALDataset, GDALDatasetUniquePtrDeleter > GDALDatasetUniquePtr
Unique pointer type for GDALDataset.
Definition: gdal_priv.h:899
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:157
int GetXSize() const
Return width.
Definition: gdal_priv.h:1735
Abstract class, implemented by GDALAttribute and GDALMDArray.
Definition: gdal_priv.h:2081
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition: gdal.h:274
int GetXSize() const
Return the width of the block.
Definition: gdal_priv.h:970
void GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition: gdaldataset.cpp:3757
static GDALDatasetH ToHandle(GDALDataset *poDS)
Convert a GDALDataset* to a GDALDatasetH.
Definition: gdal_priv.h:643
void * GDALMajorObjectH
Opaque type used for the C bindings of the C++ GDALMajorObject class.
Definition: gdal.h:265
virtual bool SetIndexingVariable(std::shared_ptr< GDALMDArray > poIndexingVariable)
Set the variable that is used to index the dimension.
Definition: gdalmultidim.cpp:8054
char ** papszOpenOptions
Open options.
Definition: gdal_priv.h:282
Object with metadata.
Definition: gdal_priv.h:135
int GetYSize() const
Return the height of the block.
Definition: gdal_priv.h:974
Class returned by GetLayers() that acts as a range of layers.
Definition: gdal_priv.h:705
static GDALDataset * FromHandle(GDALDatasetH hDS)
Convert a GDALDatasetH to a GDALDataset*.
Definition: gdal_priv.h:649
None.
Definition: gdal.h:305
std::input_iterator_tag iterator_category
iterator_category
Definition: gdal_priv.h:728
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:70
GUIntBig vsi_l_offset
Type for a file offset.
Definition: cpl_vsi.h:140
const std::string & GetName() const
Return the name.
Definition: gdal_priv.h:1919
int GetYOffset() const
Return y offset.
Definition: gdal_priv.h:1731
A single raster band (or channel).
Definition: gdal_priv.h:1133
GDALAccess
Definition: gdal.h:115
const GByte * data() const
Return pointer to the start of data.
Definition: gdal_priv.h:2233
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:370
This class represents a style table.
Definition: ogr_featurestyle.h:84
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:339
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:331
GDALDataType GetBufferType() const
Return buffer data type.
Definition: gdal_priv.h:1755
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:244
void * GDALColorTableH
Opaque type used for the C bindings of the C++ GDALColorTable class.
Definition: gdal.h:277
static GDALExtendedDataType CreateString(size_t nMaxStringLength=0, GDALExtendedDataTypeSubType eSubType=GEDTST_NONE)
Return a new GDALExtendedDataType of class GEDTC_STRING.
Definition: gdalmultidim.cpp:7780
virtual CPLErr IRasterIO(GDALRWFlag, int, int, int, int, void *, int, int, GDALDataType, GSpacing, GSpacing, GDALRasterIOExtraArg *psExtraArg)
Read/write a region of image data for this band.
Definition: rasterio.cpp:209
Class for managing the registration of file format drivers.
Definition: gdal_priv.h:1643
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:287
#define CPL_NULL_TERMINATED
Null terminated variadic.
Definition: cpl_port.h:859
int GetYOff() const
Return the y offset of the top-left corner of the block.
Definition: gdal_priv.h:966
CPLString & toupper(void)
Convert to upper case in place.
Definition: cplstring.cpp:316
Interface used to get a single GDALAttribute or a set of GDALAttribute.
Definition: gdal_priv.h:1948
GDALIdentifyEnum
Enumeration used by GDALDriver::pfnIdentify().
Definition: gdal_priv.h:1463
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:318
GDALColorInterp
Definition: gdal.h:203
int GDALGetDataTypeSizeBytes(GDALDataType)
Get data type size in bytes.
Definition: gdal_misc.cpp:308
Class modeling a multi-dimensional array.
Definition: gdal_priv.h:2375
virtual CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain="")
Set single metadata item.
Definition: gdalmajorobject.cpp:388
Numeric value.
Definition: gdal.h:293
Class returned by GetFeatures() that act as a container for vector features.
Definition: gdal_priv.h:768
static GDALMajorObject * FromHandle(GDALMajorObjectH hMajorObject)
Convert a GDALMajorObjectH to a GDALMajorObject*.
Definition: gdal_priv.h:177
const std::string & GetName() const
Return the name.
Definition: gdal_priv.h:2668
Identify determined the file is not recognized by the probed driver.
Definition: gdal_priv.h:1468
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:292
size_t GetOffset() const
Return the offset (in bytes) of the component in the compound data type.
Definition: gdal_priv.h:1925
GIntBig GInt64
Signed 64 bit integer type.
Definition: cpl_port.h:263
Class for a component of a compound extended data type.
Definition: gdal_priv.h:1906
static GDALExtendedDataType Create(GDALDataType eType)
Return a new GDALExtendedDataType of class GEDTC_NUMERIC.
Definition: gdalmultidim.cpp:7716
void difference_type
difference_type
Definition: gdal_priv.h:726
Format specific driver.
Definition: gdal_priv.h:1488
A color table / palette.
Definition: gdal_priv.h:1024
const std::string & GetFullName() const
Return the name of an array or attribute.
Definition: gdal_priv.h:2132
Ground Control Point.
Definition: gdal.h:710
CPLErr
Error category.
Definition: cpl_error.h:52
GDALDriverManager * GetGDALDriverManager(void)
Fetch the global GDAL driver manager.
Definition: gdaldrivermanager.cpp:99
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition: cpl_port.h:955
int GetBufferXSize() const
Return buffer width.
Definition: gdal_priv.h:1747
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:894
Class used as a session object for asynchronous requests.
Definition: gdal_priv.h:1693
static GDALColorTable * FromHandle(GDALColorTableH hCT)
Convert a GDALColorTableH to a GDALColorTable*.
Definition: gdal_priv.h:1056