16#ifndef GDAL_PRIV_H_INCLUDED
17#define GDAL_PRIV_H_INCLUDED
34class GDALProxyDataset;
35class GDALProxyRasterBand;
46#include "gdal_frmts.h"
47#include "gdalsubdatasetinfo.h"
52#include "cpl_multiproc.h"
53#include "cpl_atomic_ops.h"
65#if __cplusplus >= 202002L
74#define GMO_VALID 0x0001
75#define GMO_IGNORE_UNIMPLEMENTED 0x0002
76#define GMO_SUPPORT_MD 0x0004
77#define GMO_SUPPORT_MDMD 0x0008
78#define GMO_MD_DIRTY 0x0010
79#define GMO_PAM_CLASS 0x0020
88class CPL_DLL GDALMultiDomainMetadata
95 bool operator()(
const char *a,
const char *b)
const
101 std::map<const char *, CPLStringList, Comparator> oMetadata{};
104 GDALMultiDomainMetadata();
105 ~GDALMultiDomainMetadata();
107 int XMLInit(
const CPLXMLNode *psMetadata,
int bMerge);
112 return aosDomainList.List();
115 char **GetMetadata(
const char *pszDomain =
"");
117 const char *GetMetadataItem(
const char *pszName,
118 const char *pszDomain =
"");
119 CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
120 const char *pszDomain =
"");
146 GDALMultiDomainMetadata oMDMD{};
150 char **BuildMetadataDomainList(
char **papszList,
int bCheckNonEmpty,
157 int GetMOFlags()
const;
158 void SetMOFlags(
int nFlagsIn);
160 virtual const char *GetDescription()
const;
161 virtual void SetDescription(
const char *);
163 virtual char **GetMetadataDomainList();
165 virtual char **GetMetadata(
const char *pszDomain =
"");
166 virtual CPLErr SetMetadata(
char **papszMetadata,
167 const char *pszDomain =
"");
168 virtual const char *GetMetadataItem(
const char *pszName,
169 const char *pszDomain =
"");
170 virtual CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
171 const char *pszDomain =
"");
197class CPL_DLL GDALDefaultOverviews
208 bool bCheckedForMask;
217 bool bCheckedForOverviews;
221 char **papszInitSiblingFiles;
224 GDALDefaultOverviews();
225 ~GDALDefaultOverviews();
227 void Initialize(
GDALDataset *poDSIn,
const char *pszName =
nullptr,
229 bool bNameIsOVR =
false);
232 const char *pszName =
nullptr,
233 bool bTransferSiblingFilesIfLoaded =
true);
235 void TransferSiblingFiles(
char **papszSiblingFiles);
239 int CloseDependentDatasets();
243 int GetOverviewCount(
int nBand);
246 CPLErr BuildOverviews(
const char *pszBasename,
const char *pszResampling,
247 int nOverviews,
const int *panOverviewList,
248 int nBands,
const int *panBandList,
249 GDALProgressFunc pfnProgress,
void *pProgressData,
252 CPLErr BuildOverviewsSubDataset(
const char *pszPhysicalFile,
253 const char *pszResampling,
int nOverviews,
254 const int *panOverviewList,
int nBands,
255 const int *panBandList,
256 GDALProgressFunc pfnProgress,
260 CPLErr BuildOverviewsMask(
const char *pszResampling,
int nOverviews,
261 const int *panOverviewList,
262 GDALProgressFunc pfnProgress,
void *pProgressData,
269 CPLErr CreateMaskBand(
int nFlags,
int nBand = -1);
271 int GetMaskFlags(
int nBand);
273 int HaveMaskFile(
char **papszSiblings =
nullptr,
274 const char *pszBasename =
nullptr);
276 char **GetSiblingFiles()
278 return papszInitSiblingFiles;
294 bool bHasGotSiblingFiles;
295 char **papszSiblingFiles;
296 int nHeaderBytesTried;
300 const char *
const *papszSiblingFiles =
nullptr);
329 int TryToIngest(
int nBytes);
330 char **GetSiblingFiles();
331 char **StealSiblingFiles();
332 bool AreSiblingFilesLoaded()
const;
334 bool IsSingleAllowedDriver(
const char *pszDriverName)
const;
356 explicit GCP(
const char *pszId =
"",
const char *pszInfo =
"",
357 double dfPixel = 0,
double dfLine = 0,
double dfX = 0,
358 double dfY = 0,
double dfZ = 0);
361 explicit GCP(
const GDAL_GCP &other);
362 GCP &operator=(
const GCP &);
364 GCP &operator=(GCP &&);
367 inline const char *Id()
const
372 void SetId(
const char *pszId);
375 inline const char *Info()
const
380 void SetInfo(
const char *pszInfo);
383 inline double Pixel()
const
385 return gcp.dfGCPPixel;
389 inline double &Pixel()
391 return gcp.dfGCPPixel;
395 inline double Line()
const
397 return gcp.dfGCPLine;
401 inline double &Line()
403 return gcp.dfGCPLine;
407 inline double X()
const
419 inline double Y()
const
431 inline double Z()
const
443 inline const GDAL_GCP *c_ptr()
const
448 static const GDAL_GCP *c_ptr(
const std::vector<GCP> &asGCPs);
450 static std::vector<GCP> fromC(
const GDAL_GCP *pasGCPList,
int nGCPCount);
467class swq_select_parse_options;
471typedef struct GDALSQLParseInfo GDALSQLParseInfo;
475#ifdef GDAL_COMPILATION
476#define OPTIONAL_OUTSIDE_GDAL(val)
478#define OPTIONAL_OUTSIDE_GDAL(val) = val
486#if defined(GDAL_BANDMAP_TYPE_CONST_SAFE)
487#define BANDMAP_TYPE const int *
489#define BANDMAP_TYPE int *
497 GDALOpenEx(
const char *pszFilename,
unsigned int nOpenFlags,
498 const char *
const *papszAllowedDrivers,
499 const char *
const *papszOpenOptions,
500 const char *
const *papszSiblingFiles);
504 friend class GDALDefaultOverviews;
505 friend class GDALProxyDataset;
508 CPL_INTERNAL
void AddToDatasetOpenList();
510 CPL_INTERNAL
void UnregisterFromSharedDataset();
512 CPL_INTERNAL
static void ReportErrorV(
const char *pszDSName,
514 const char *fmt, va_list args);
522 int nRasterXSize = 512;
523 int nRasterYSize = 512;
527 static constexpr int OPEN_FLAGS_CLOSED = -1;
532 bool bForceCachedIO =
false;
533 bool bShared =
false;
534 bool bIsInternal =
true;
535 bool bSuppressOnClose =
false;
537 mutable std::map<std::string, std::unique_ptr<OGRFieldDomain>>
538 m_oMapFieldDomains{};
543 void RasterInitialize(
int,
int);
545 void SetBand(
int nNewBand, std::unique_ptr<GDALRasterBand> poBand);
547 GDALDefaultOverviews oOvManager{};
549 virtual CPLErr IBuildOverviews(
const char *pszResampling,
int nOverviews,
550 const int *panOverviewList,
int nListBands,
551 const int *panBandList,
552 GDALProgressFunc pfnProgress,
557 IRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
int nYSize,
558 void *pData,
int nBufXSize,
int nBufYSize,
GDALDataType eBufType,
559 int nBandCount, BANDMAP_TYPE panBandMap,
GSpacing nPixelSpace,
565 BlockBasedRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
566 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
568 const int *panBandMap,
GSpacing nPixelSpace,
571 CPLErr BlockBasedFlushCache(
bool bAtClosing);
574 BandBasedRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
575 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
577 const int *panBandMap,
GSpacing nPixelSpace,
582 RasterIOResampled(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
583 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
585 const int *panBandMap,
GSpacing nPixelSpace,
589 CPLErr ValidateRasterIOOrAdviseReadParameters(
590 const char *pszCallingFunc,
int *pbStopProcessingOnCENone,
int nXOff,
591 int nYOff,
int nXSize,
int nYSize,
int nBufXSize,
int nBufYSize,
592 int nBandCount,
const int *panBandMap);
595 int nXSize,
int nYSize,
void *pData,
596 int nBufXSize,
int nBufYSize,
598 const int *panBandMap,
GSpacing nPixelSpace,
602 void ShareLockWithParentDataset(
GDALDataset *poParentDataset);
604 bool m_bCanBeReopened =
false;
606 virtual bool CanBeCloned(
int nScopeFlags,
bool bCanShareState)
const;
608 friend class GDALThreadSafeDataset;
609 friend class MEMDataset;
610 virtual std::unique_ptr<GDALDataset> Clone(
int nScopeFlags,
611 bool bCanShareState)
const;
615 void CleanupPostFileClosing();
617 virtual int CloseDependentDatasets();
619 int ValidateLayerCreationOptions(
const char *
const *papszLCO);
621 char **papszOpenOptions =
nullptr;
628 void LeaveReadWrite();
631 void TemporarilyDropReadWriteLock();
632 void ReacquireReadWriteLock();
634 void DisableReadWriteMutex();
639 bool IsAllBands(
int nBandCount,
const int *panBandList)
const;
647 int GetRasterXSize()
const;
648 int GetRasterYSize()
const;
649 int GetRasterCount()
const;
660 void *poQueryLoggerArgIn);
674 class CPL_DLL Iterator
677 std::unique_ptr<Private> m_poPrivate;
681 Iterator(
const Iterator &oOther);
683 Iterator(Iterator &&oOther)
noexcept;
687 Iterator &operator++();
688 bool operator!=(
const Iterator &it)
const;
692 const Iterator
begin()
const;
694 const Iterator
end()
const;
704 virtual CPLErr FlushCache(
bool bAtClosing =
false);
705 virtual CPLErr DropCache();
707 virtual GIntBig GetEstimatedRAMUsage();
713 const char *GetProjectionRef(
void)
const;
714 CPLErr SetProjection(
const char *pszProjection);
716 virtual CPLErr GetGeoTransform(
double *padfTransform);
717 virtual CPLErr SetGeoTransform(
double *padfTransform);
721 virtual void *GetInternalHandle(
const char *pszHandleName);
723 virtual char **GetFileList(
void);
725 virtual const char *GetDriverName();
728 virtual int GetGCPCount();
734 const char *GetGCPProjection();
736 const char *pszGCPProjection);
738 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
740 int nBandCount,
int *panBandList,
741 char **papszOptions);
743 virtual CPLErr CreateMaskBand(
int nFlagsIn);
746 BeginAsyncReader(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
void *pBuf,
748 int nBandCount,
int *panBandMap,
int nPixelSpace,
749 int nLineSpace,
int nBandSpace,
char **papszOptions);
753 struct RawBinaryLayout
755 enum class Interleaving
762 std::string osRawFilename{};
763 Interleaving eInterleaving = Interleaving::UNKNOWN;
765 bool bLittleEndianOrder =
false;
773 virtual bool GetRawBinaryLayout(RawBinaryLayout &);
778 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
780 const int *panBandMap,
GSpacing nPixelSpace,
786 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
788 const int *panBandMap,
GSpacing nPixelSpace,
793 virtual CPLStringList GetCompressionFormats(
int nXOff,
int nYOff,
794 int nXSize,
int nYSize,
796 const int *panBandList);
797 virtual CPLErr ReadCompressedData(
const char *pszFormat,
int nXOff,
798 int nYOff,
int nXSize,
int nYSize,
799 int nBands,
const int *panBandList,
800 void **ppBuffer,
size_t *pnBufferSize,
801 char **ppszDetailedFormat);
815 int GetShared()
const;
818 void MarkSuppressOnClose();
819 void UnMarkSuppressOnClose();
826 return bSuppressOnClose;
834 return papszOpenOptions;
837 bool IsThreadSafe(
int nScopeFlags)
const;
845 return papszOpenOptions;
849 static GDALDataset **GetOpenDatasets(
int *pnDatasetCount);
853 BuildOverviews(
const char *pszResampling,
int nOverviews,
854 const int *panOverviewList,
int nListBands,
855 const int *panBandList, GDALProgressFunc pfnProgress,
857 CSLConstList papszOptions OPTIONAL_OUTSIDE_GDAL(
nullptr));
859 CPLErr BuildOverviews(
const char *pszResampling,
int nOverviews,
860 const int *panOverviewList,
int nListBands,
861 const int *panBandList, GDALProgressFunc pfnProgress,
869 static
void ReportError(const
char *pszDSName,
CPLErr eErrClass,
874 char **GetMetadata(
const char *pszDomain =
"")
override;
880 const char *pszDomain)
override;
883 char **GetMetadataDomainList()
override;
885 virtual void ClearStatistics();
907 unsigned int nOpenFlags = 0,
908 const char *
const *papszAllowedDrivers =
nullptr,
909 const char *
const *papszOpenOptions =
nullptr,
910 const char *
const *papszSiblingFiles =
nullptr)
912 return FromHandle(
GDALOpenEx(pszFilename, nOpenFlags,
913 papszAllowedDrivers, papszOpenOptions,
929 void SetEnableOverviews(
bool bEnable);
932 bool AreOverviewsEnabled()
const;
937 Private *m_poPrivate;
939 CPL_INTERNAL
OGRLayer *BuildLayerFromSelectInfo(
940 swq_select *psSelectInfo,
OGRGeometry *poSpatialFilter,
941 const char *pszDialect, swq_select_parse_options *poSelectParseOptions);
945 virtual int GetLayerCount();
946 virtual OGRLayer *GetLayer(
int iLayer);
948 virtual bool IsLayerPrivate(
int iLayer)
const;
970 std::unique_ptr<Private> m_poPrivate;
978 std::input_iterator_tag;
1001 size_t size()
const;
1004 OGRLayer *operator[](
size_t iLayer);
1005 OGRLayer *operator[](
const char *pszLayername);
1010 virtual OGRLayer *GetLayerByName(
const char *);
1011 virtual OGRErr DeleteLayer(
int iLayer);
1013 virtual void ResetReading();
1015 double *pdfProgressPct,
1016 GDALProgressFunc pfnProgress,
1017 void *pProgressData);
1031 class CPL_DLL Iterator
1034 std::unique_ptr<Private> m_poPrivate;
1038 Iterator(
const Iterator &oOther);
1040 Iterator(Iterator &&oOther)
noexcept;
1044 Iterator &operator++();
1045 bool operator!=(
const Iterator &it)
const;
1049 const Iterator
begin()
const;
1051 const Iterator
end()
const;
1056 virtual int TestCapability(
const char *);
1058 virtual std::vector<std::string>
1059 GetFieldDomainNames(
CSLConstList papszOptions =
nullptr)
const;
1061 virtual const OGRFieldDomain *GetFieldDomain(
const std::string &name)
const;
1063 virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
1064 std::string &failureReason);
1066 virtual bool DeleteFieldDomain(
const std::string &name,
1067 std::string &failureReason);
1069 virtual bool UpdateFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
1070 std::string &failureReason);
1072 virtual std::vector<std::string>
1073 GetRelationshipNames(
CSLConstList papszOptions =
nullptr)
const;
1076 GetRelationship(
const std::string &name)
const;
1079 AddRelationship(std::unique_ptr<GDALRelationship> &&relationship,
1080 std::string &failureReason);
1082 virtual bool DeleteRelationship(
const std::string &name,
1083 std::string &failureReason);
1086 UpdateRelationship(std::unique_ptr<GDALRelationship> &&relationship,
1087 std::string &failureReason);
1090 OGRLayer *CreateLayer(
const char *pszName);
1092 OGRLayer *CreateLayer(
const char *pszName, std::nullptr_t);
1095 OGRLayer *CreateLayer(
const char *pszName,
1100 OGRLayer *CreateLayer(
const char *pszName,
1105 char **papszOptions =
nullptr);
1108 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable);
1112 virtual OGRLayer *ExecuteSQL(
const char *pszStatement,
1114 const char *pszDialect);
1115 virtual void ReleaseResultSet(
OGRLayer *poResultsSet);
1116 virtual OGRErr AbortSQL();
1118 int GetRefCount()
const;
1119 int GetSummaryRefCount()
const;
1122 virtual OGRErr StartTransaction(
int bForce = FALSE);
1123 virtual OGRErr CommitTransaction();
1124 virtual OGRErr RollbackTransaction();
1126 virtual std::shared_ptr<GDALGroup> GetRootGroup()
const;
1129 static int IsGenericSQLDialect(
const char *pszDialect);
1133 BuildParseInfo(swq_select *psSelectInfo,
1134 swq_select_parse_options *poSelectParseOptions);
1135 static void DestroyParseInfo(GDALSQLParseInfo *psParseInfo);
1137 const char *pszDialect,
1138 swq_select_parse_options *poSelectParseOptions);
1142 virtual OGRLayer *ICreateLayer(
const char *pszName,
1147 OGRErr ProcessSQLCreateIndex(
const char *);
1148 OGRErr ProcessSQLDropIndex(
const char *);
1149 OGRErr ProcessSQLDropTable(
const char *);
1150 OGRErr ProcessSQLAlterTableAddColumn(
const char *);
1151 OGRErr ProcessSQLAlterTableDropColumn(
const char *);
1152 OGRErr ProcessSQLAlterTableAlterColumn(
const char *);
1153 OGRErr ProcessSQLAlterTableRenameColumn(
const char *);
1157 friend class GDALProxyPoolDataset;
1165struct CPL_DLL GDALDatasetUniquePtrDeleter
1176struct CPL_DLL GDALDatasetUniquePtrReleaser
1193 std::unique_ptr<GDALDataset, GDALDatasetUniquePtrDeleter>;
1205 friend class GDALAbstractBandBlockCache;
1210 volatile int nLockCount;
1227 CPL_INTERNAL
void Detach_unlocked(
void);
1228 CPL_INTERNAL
void Touch_unlocked(
void);
1230 CPL_INTERNAL
void RecycleFor(
int nXOffIn,
int nYOffIn);
1237 CPLErr Internalize(
void);
1239 void MarkDirty(
void);
1240 void MarkClean(
void);
1245 return CPLAtomicInc(&nLockCount);
1251 return CPLAtomicDec(&nLockCount);
1319 return static_cast<GPtrDiff_t>(nXSize) * nYSize *
1324 int DropLockForRemovalFromStorage();
1333 static void FlushDirtyBlocks();
1334 static int FlushCacheBlock(
int bDirtyBlocksOnly = FALSE);
1335 static void Verify();
1337 static void EnterDisableDirtyBlockFlush();
1338 static void LeaveDisableDirtyBlockFlush();
1343 static void DumpAll();
1348 CPL_INTERNAL
static void DestroyRBMutex();
1365 std::vector<GDALColorEntry> aoEntries{};
1376 int GetColorEntryCount()
const;
1380 int CreateColorRamp(
int nStartIndex,
const GDALColorEntry *psStartColor,
1382 bool IsIdentity()
const;
1410class GDALAbstractBandBlockCache
1413 CPLLock *hSpinLock =
nullptr;
1417 CPLCond *hCond =
nullptr;
1418 CPLMutex *hCondMutex =
nullptr;
1419 volatile int nKeepAliveCounter = 0;
1421 volatile int m_nDirtyBlocks = 0;
1428 int m_nInitialDirtyBlocksInFlushCache = 0;
1429 int m_nLastTick = -1;
1430 size_t m_nWriteDirtyBlocksDisabled = 0;
1432 void FreeDanglingBlocks();
1433 void UnreferenceBlockBase();
1435 void StartDirtyBlockFlushingLog();
1436 void UpdateDirtyBlockFlushingLog();
1437 void EndDirtyBlockFlushingLog();
1441 virtual ~GDALAbstractBandBlockCache();
1445 void IncDirtyBlocks(
int nInc);
1446 void WaitCompletionPendingTasks();
1448 void EnableDirtyBlockWriting()
1450 --m_nWriteDirtyBlocksDisabled;
1453 void DisableDirtyBlockWriting()
1455 ++m_nWriteDirtyBlocksDisabled;
1458 bool HasDirtyBlocks()
const
1460 return m_nDirtyBlocks > 0;
1463 virtual bool Init() = 0;
1464 virtual bool IsInitOK() = 0;
1465 virtual CPLErr FlushCache() = 0;
1468 int nYBlockYOff) = 0;
1470 virtual CPLErr FlushBlock(
int nXBlockOff,
int nYBlockOff,
1471 int bWriteDirtyBlock) = 0;
1474GDALAbstractBandBlockCache *
1476GDALAbstractBandBlockCache *
1486class GDALDoublePointsCache;
1521 friend class GDALArrayBandBlockCache;
1522 friend class GDALHashSetBandBlockCache;
1526 CPLErr eFlushBlockErr = CE_None;
1527 GDALAbstractBandBlockCache *poBandBlockCache =
nullptr;
1529 CPL_INTERNAL
void SetFlushBlockErr(
CPLErr eErr);
1531 CPL_INTERNAL
void IncDirtyBlocks(
int nInc);
1538 int nRasterXSize = 0;
1539 int nRasterYSize = 0;
1545 int nBlockXSize = -1;
1546 int nBlockYSize = -1;
1547 int nBlocksPerRow = 0;
1548 int nBlocksPerColumn = 0;
1550 int nBlockReads = 0;
1551 int bForceCachedIO = 0;
1553 class GDALRasterBandOwnedOrNot
1556 GDALRasterBandOwnedOrNot()
1561 : m_poBandOwned(bOwned ? poBand :
nullptr),
1562 m_poBandRef(bOwned ?
nullptr : poBand)
1568 m_poBandOwned.reset();
1569 m_poBandRef =
nullptr;
1574 m_poBandOwned.reset(bOwned ? poBand :
nullptr);
1575 m_poBandRef = bOwned ? nullptr : poBand;
1588 bool IsOwned()
const
1590 return m_poBandOwned !=
nullptr;
1595 return m_poBandOwned ? m_poBandOwned.get() : m_poBandRef;
1600 return m_poBandOwned ? m_poBandOwned.get() : m_poBandRef;
1605 std::unique_ptr<GDALRasterBand> m_poBandOwned{};
1609 GDALRasterBandOwnedOrNot poMask{};
1610 bool m_bEnablePixelTypeSignedByteWarning =
1614 void InvalidateMaskBand();
1616 friend class GDALProxyRasterBand;
1617 friend class GDALDefaultOverviews;
1620 RasterIOResampled(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
1621 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1627 void LeaveReadWrite();
1631 mutable GDALDoublePointsCache *m_poPointsCache =
nullptr;
1637 virtual CPLErr IWriteBlock(
int nBlockXOff,
int nBlockYOff,
void *pData);
1640 IRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1641 void *pData,
int nBufXSize,
int nBufYSize,
GDALDataType eBufType,
1645 virtual int IGetDataCoverageStatus(
int nXOff,
int nYOff,
int nXSize,
1646 int nYSize,
int nMaskFlagStop,
1647 double *pdfDataPct);
1650 OverviewRasterIO(
GDALRWFlag eRWFlag,
int nXOff,
int nYOff,
int nXSize,
1651 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1657 int nXSize,
int nYSize,
void *pData,
1658 int nBufXSize,
int nBufYSize,
1663 int InitBlockInfo();
1667 bool HasBlockCache()
const
1669 return poBandBlockCache !=
nullptr;
1672 bool HasDirtyBlocks()
const
1674 return poBandBlockCache && poBandBlockCache->HasDirtyBlocks();
1685 int GetXSize()
const;
1686 int GetYSize()
const;
1687 int GetBand()
const;
1691 void GetBlockSize(
int *pnXSize,
int *pnYSize)
const;
1692 CPLErr GetActualBlockSize(
int nXBlockOff,
int nYBlockOff,
int *pnXValid,
1693 int *pnYValid)
const;
1696 GetSuggestedBlockAccessPattern()
const;
1702 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1709 int nYSize,
void *pData,
int nBufXSize,
int nBufYSize,
1716 CPLErr ReadRaster(T *pData,
size_t nArrayEltCount = 0,
double dfXOff = 0,
1717 double dfYOff = 0,
double dfXSize = 0,
double dfYSize = 0,
1718 size_t nBufXSize = 0,
size_t nBufYSize = 0,
1720 GDALProgressFunc pfnProgress =
nullptr,
1721 void *pProgressData =
nullptr)
const;
1724 CPLErr ReadRaster(std::vector<T> &vData,
double dfXOff = 0,
1725 double dfYOff = 0,
double dfXSize = 0,
double dfYSize = 0,
1726 size_t nBufXSize = 0,
size_t nBufYSize = 0,
1728 GDALProgressFunc pfnProgress =
nullptr,
1729 void *pProgressData =
nullptr)
const;
1731#if __cplusplus >= 202002L
1735 ReadRaster(std::span<T> pData,
double dfXOff = 0,
double dfYOff = 0,
1736 double dfXSize = 0,
double dfYSize = 0,
size_t nBufXSize = 0,
1737 size_t nBufYSize = 0,
1739 GDALProgressFunc pfnProgress =
nullptr,
1740 void *pProgressData =
nullptr)
const
1742 return ReadRaster(pData.data(), pData.size(), dfXOff, dfYOff, dfXSize,
1743 dfYSize, nBufXSize, nBufYSize, eResampleAlg,
1744 pfnProgress, pProgressData);
1750 CPLErr ReadBlock(
int nXBlockOff,
int nYBlockOff,
1753 CPLErr WriteBlock(
int nXBlockOff,
int nYBlockOff,
1758 GetLockedBlockRef(
int nXBlockOff,
int nYBlockOff,
1763 TryGetLockedBlockRef(
int nXBlockOff,
1767 virtual CPLErr FlushBlock(
int nXBlockOff,
int nYBlockOff,
1768 int bWriteDirtyBlock = TRUE);
1772 unsigned char *pTranslationTable =
nullptr,
1773 int *pApproximateMatching =
nullptr);
1777 virtual CPLErr FlushCache(
bool bAtClosing =
false);
1778 virtual CPLErr DropCache();
1779 virtual char **GetCategoryNames();
1780 virtual double GetNoDataValue(
int *pbSuccess =
nullptr);
1781 virtual int64_t GetNoDataValueAsInt64(
int *pbSuccess =
nullptr);
1782 virtual uint64_t GetNoDataValueAsUInt64(
int *pbSuccess =
nullptr);
1783 virtual double GetMinimum(
int *pbSuccess =
nullptr);
1784 virtual double GetMaximum(
int *pbSuccess =
nullptr);
1785 virtual double GetOffset(
int *pbSuccess =
nullptr);
1786 virtual double GetScale(
int *pbSuccess =
nullptr);
1787 virtual const char *GetUnitType();
1790 virtual CPLErr Fill(
double dfRealValue,
double dfImaginaryValue = 0);
1792 virtual CPLErr SetCategoryNames(
char **papszNames);
1793 virtual CPLErr SetNoDataValue(
double dfNoData);
1794 virtual CPLErr SetNoDataValueAsInt64(int64_t nNoData);
1795 virtual CPLErr SetNoDataValueAsUInt64(uint64_t nNoData);
1796 virtual CPLErr DeleteNoDataValue();
1799 virtual CPLErr SetOffset(
double dfNewOffset);
1800 virtual CPLErr SetScale(
double dfNewScale);
1801 virtual CPLErr SetUnitType(
const char *pszNewValue);
1803 virtual CPLErr GetStatistics(
int bApproxOK,
int bForce,
double *pdfMin,
1804 double *pdfMax,
double *pdfMean,
1805 double *padfStdDev);
1806 virtual CPLErr ComputeStatistics(
int bApproxOK,
double *pdfMin,
1807 double *pdfMax,
double *pdfMean,
1808 double *pdfStdDev, GDALProgressFunc,
1809 void *pProgressData);
1810 virtual CPLErr SetStatistics(
double dfMin,
double dfMax,
double dfMean,
1812 virtual CPLErr ComputeRasterMinMax(
int bApproxOK,
double *adfMinMax);
1818 const char *pszDomain)
override;
1820 virtual const char *GetMetadataItem(
const char *pszName,
1821 const char *pszDomain =
"")
override;
1823 virtual int HasArbitraryOverviews();
1824 virtual int GetOverviewCount();
1827 virtual CPLErr BuildOverviews(
const char *pszResampling,
int nOverviews,
1828 const int *panOverviewList,
1829 GDALProgressFunc pfnProgress,
1830 void *pProgressData,
1833 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1834 int nBufXSize,
int nBufYSize,
1837 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
int nBuckets,
1838 GUIntBig *panHistogram,
int bIncludeOutOfRange,
1839 int bApproxOK, GDALProgressFunc,
1840 void *pProgressData);
1842 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
1843 int *pnBuckets,
GUIntBig **ppanHistogram,
1844 int bForce, GDALProgressFunc,
1845 void *pProgressData);
1846 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
int nBuckets,
1853 virtual int GetMaskFlags();
1854 virtual CPLErr CreateMaskBand(
int nFlagsIn);
1855 virtual bool IsMaskBand()
const;
1859 GetVirtualMemAuto(
GDALRWFlag eRWFlag,
int *pnPixelSpace,
1863 int GetDataCoverageStatus(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1864 int nMaskFlagStop = 0,
1865 double *pdfDataPct =
nullptr);
1867 std::shared_ptr<GDALMDArray> AsMDArray()
const;
1869 virtual CPLErr InterpolateAtPoint(
double dfPixel,
double dfLine,
1871 double *pdfRealValue,
1872 double *pdfImagValue =
nullptr)
const;
1898 virtual void EnablePixelTypeSignedByteWarning(
bool b)
1899#ifndef GDAL_COMPILATION
1900 CPL_WARN_DEPRECATED(
"Do not use that method outside of GDAL!")
1911#define GDAL_EXTERN_TEMPLATE_READ_RASTER(T) \
1912 extern template CPLErr GDALRasterBand::ReadRaster<T>( \
1913 T * pData, size_t nArrayEltCount, double dfXOff, double dfYOff, \
1914 double dfXSize, double dfYSize, size_t nBufXSize, size_t nBufYSize, \
1915 GDALRIOResampleAlg eResampleAlg, GDALProgressFunc pfnProgress, \
1916 void *pProgressData) const;
1918GDAL_EXTERN_TEMPLATE_READ_RASTER(uint8_t)
1919GDAL_EXTERN_TEMPLATE_READ_RASTER(int8_t)
1920GDAL_EXTERN_TEMPLATE_READ_RASTER(uint16_t)
1921GDAL_EXTERN_TEMPLATE_READ_RASTER(int16_t)
1922GDAL_EXTERN_TEMPLATE_READ_RASTER(uint32_t)
1923GDAL_EXTERN_TEMPLATE_READ_RASTER(int32_t)
1924GDAL_EXTERN_TEMPLATE_READ_RASTER(uint64_t)
1925GDAL_EXTERN_TEMPLATE_READ_RASTER(int64_t)
1926GDAL_EXTERN_TEMPLATE_READ_RASTER(
float)
1927GDAL_EXTERN_TEMPLATE_READ_RASTER(
double)
1931GDAL_EXTERN_TEMPLATE_READ_RASTER(std::complex<float>)
1932GDAL_EXTERN_TEMPLATE_READ_RASTER(std::complex<double>)
1934#define GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(T) \
1935 extern template CPLErr GDALRasterBand::ReadRaster<T>( \
1936 std::vector<T> & vData, double dfXOff, double dfYOff, double dfXSize, \
1937 double dfYSize, size_t nBufXSize, size_t nBufYSize, \
1938 GDALRIOResampleAlg eResampleAlg, GDALProgressFunc pfnProgress, \
1939 void *pProgressData) const;
1941GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(uint8_t)
1942GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(int8_t)
1943GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(uint16_t)
1944GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(int16_t)
1945GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(uint32_t)
1946GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(int32_t)
1947GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(uint64_t)
1948GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(int64_t)
1949GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(
float)
1950GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(
double)
1954GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(std::complex<float>)
1955GDAL_EXTERN_TEMPLATE_READ_RASTER_VECTOR(std::complex<double>)
1967 CPLErr IReadBlock(
int,
int,
void *)
override;
1973 ~GDALAllValidMaskBand()
override;
1976 int GetMaskFlags()
override;
1978 bool IsMaskBand()
const override
1988 CPLErr ComputeStatistics(
int bApproxOK,
double *pdfMin,
double *pdfMax,
1989 double *pdfMean,
double *pdfStdDev,
1990 GDALProgressFunc,
void *pProgressData)
override;
2000 double m_dfNoDataValue = 0;
2001 int64_t m_nNoDataValueInt64 = 0;
2002 uint64_t m_nNoDataValueUInt64 = 0;
2008 CPLErr IReadBlock(
int,
int,
void *)
override;
2015 explicit GDALNoDataMaskBand(
GDALRasterBand *,
double dfNoDataValue);
2016 ~GDALNoDataMaskBand()
override;
2018 bool IsMaskBand()
const override
2028 static bool IsNoDataInRange(
double dfNoDataValue,
GDALDataType eDataType);
2037 double *padfNodataValues;
2042 CPLErr IReadBlock(
int,
int,
void *)
override;
2046 ~GDALNoDataValuesMaskBand()
override;
2048 bool IsMaskBand()
const override
2078 ~GDALRescaledAlphaBand()
override;
2129 CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
2130 const char *pszDomain =
"")
override;
2135 GDALDataset *Create(
const char *pszName,
int nXSize,
int nYSize,
int nBands,
2140 CreateMultiDimensional(
const char *pszName,
2144 CPLErr Delete(
const char *pszName);
2145 CPLErr Rename(
const char *pszNewName,
const char *pszOldName);
2146 CPLErr CopyFiles(
const char *pszNewName,
const char *pszOldName);
2150 GDALProgressFunc pfnProgress,
2153 bool CanVectorTranslateFrom(
const char *pszDestName,
2156 char ***ppapszFailureReasons);
2159 VectorTranslateFrom(
const char *pszDestName,
GDALDataset *poSourceDS,
2161 GDALProgressFunc pfnProgress,
2176 OpenCallback pfnOpen =
nullptr;
2178 virtual OpenCallback GetOpenCallback()
2183 typedef GDALDataset *(*CreateCallback)(
const char *pszName,
int nXSize,
2184 int nYSize,
int nBands,
2186 char **papszOptions);
2188 CreateCallback pfnCreate =
nullptr;
2190 virtual CreateCallback GetCreateCallback()
2197 char **papszOptions) =
nullptr;
2199 typedef GDALDataset *(*CreateMultiDimensionalCallback)(
2200 const char *pszName,
CSLConstList papszRootGroupOptions,
2203 CreateMultiDimensionalCallback pfnCreateMultiDimensional =
nullptr;
2205 virtual CreateMultiDimensionalCallback GetCreateMultiDimensionalCallback()
2207 return pfnCreateMultiDimensional;
2210 typedef CPLErr (*DeleteCallback)(
const char *pszName);
2211 DeleteCallback pfnDelete =
nullptr;
2213 virtual DeleteCallback GetDeleteCallback()
2220 GDALProgressFunc pfnProgress,
2221 void *pProgressData);
2223 CreateCopyCallback pfnCreateCopy =
nullptr;
2225 virtual CreateCopyCallback GetCreateCopyCallback()
2227 return pfnCreateCopy;
2230 void *pDriverData =
nullptr;
2232 void (*pfnUnloadDriver)(
GDALDriver *) =
nullptr;
2245 typedef CPLErr (*RenameCallback)(
const char *pszNewName,
2246 const char *pszOldName);
2247 RenameCallback pfnRename =
nullptr;
2249 virtual RenameCallback GetRenameCallback()
2254 typedef CPLErr (*CopyFilesCallback)(
const char *pszNewName,
2255 const char *pszOldName);
2256 CopyFilesCallback pfnCopyFiles =
nullptr;
2258 virtual CopyFilesCallback GetCopyFilesCallback()
2260 return pfnCopyFiles;
2269 char **papszOptions) =
nullptr;
2270 CPLErr (*pfnDeleteDataSource)(
GDALDriver *,
const char *pszName) =
nullptr;
2276 bool (*pfnCanVectorTranslateFrom)(
2279 char ***ppapszFailureReasons) =
nullptr;
2288 GDALProgressFunc pfnProgress,
void *pProgressData) =
nullptr;
2305 GDALProgressFunc pfnProgress,
2308 static CPLErr DefaultCreateCopyMultiDimensional(
2311 void *pProgressData);
2317 GDALProgressFunc pfnProgress,
2318 void *pProgressData);
2320 CPLErr QuietDeleteForCreateCopy(
const char *pszFilename,
2324 static CPLErr QuietDelete(
const char *pszName,
2328 static CPLErr DefaultRename(
const char *pszNewName,
const char *pszOldName);
2329 static CPLErr DefaultCopyFiles(
const char *pszNewName,
2330 const char *pszOldName);
2403 const std::string m_osPluginFileName;
2404 std::string m_osPluginFullPath{};
2405 std::unique_ptr<GDALDriver> m_poRealDriver{};
2406 std::set<std::string> m_oSetMetadataItems{};
2416 void SetPluginFullPath(
const std::string &osFullPath)
2418 m_osPluginFullPath = osFullPath;
2429 return m_osPluginFileName;
2433 OpenCallback GetOpenCallback()
override;
2435 CreateCallback GetCreateCallback()
override;
2437 CreateMultiDimensionalCallback GetCreateMultiDimensionalCallback()
override;
2439 CreateCopyCallback GetCreateCopyCallback()
override;
2441 DeleteCallback GetDeleteCallback()
override;
2443 RenameCallback GetRenameCallback()
override;
2445 CopyFilesCallback GetCopyFilesCallback()
override;
2449 const char *pszDomain =
"")
override;
2451 char **
GetMetadata(
const char *pszDomain)
override;
2454 const char *pszDomain =
"")
override;
2472 std::map<CPLString, GDALDriver *> oMapNameToDrivers{};
2473 std::string m_osPluginPath{};
2474 std::string m_osDriversIniPath{};
2475 mutable std::string m_osLastTriedDirectory{};
2476 std::set<std::string> m_oSetPluginFileNames{};
2477 bool m_bInDeferredDriverLoading =
false;
2478 std::map<std::string, std::unique_ptr<GDALDriver>> m_oMapRealDrivers{};
2479 std::vector<std::unique_ptr<GDALDriver>> m_aoHiddenDrivers{};
2483 return (iDriver >= 0 && iDriver < nDrivers) ? papoDrivers[iDriver]
2487 GDALDriver *GetDriverByName_unlocked(
const char *pszName)
const
2489 auto oIter = oMapNameToDrivers.find(
CPLString(pszName).toupper());
2490 return oIter == oMapNameToDrivers.end() ? nullptr : oIter->second;
2493 static void CleanupPythonDrivers();
2495 std::string GetPluginFullPath(
const char *pszFilename)
const;
2497 int RegisterDriver(
GDALDriver *,
bool bHidden);
2504 GDALOpenEx(
const char *pszFilename,
unsigned int nOpenFlags,
2505 const char *
const *papszAllowedDrivers,
2506 const char *
const *papszOpenOptions,
2507 const char *
const *papszSiblingFiles);
2510 static char **GetSearchPaths(
const char *pszGDAL_DRIVER_PATH);
2517 int GetDriverCount(
void)
const;
2525 void AutoLoadDrivers();
2526 void AutoSkipDrivers();
2527 void ReorderDrivers();
2528 static CPLErr LoadPlugin(
const char *name);
2530 static void AutoLoadPythonDrivers();
2535 int GetDriverCount(
bool bIncludeHidden)
const;
2536 GDALDriver *GetDriver(
int iDriver,
bool bIncludeHidden);
2537 bool IsKnownDriver(
const char *pszDriverName)
const;
2695 int *pnBufXSize,
int *pnBufYSize) = 0;
2696 virtual int LockBuffer(
double dfTimeout = -1.0);
2697 virtual void UnlockBuffer();
2732 Create(
const std::string &osName,
size_t nTotalSize,
2733 std::vector<std::unique_ptr<GDALEDTComponent>> &&components);
2735 CreateString(
size_t nMaxStringLength = 0,
2743 return !(operator==(other));
2771 return m_eNumericDT;
2792 return m_aoComponents;
2812 return m_nMaxStringLength;
2817 bool NeedsFreeDynamicMemory()
const;
2819 void FreeDynamicMemory(
void *pBuffer)
const;
2824 static bool CopyValues(
const void *pSrc,
2828 GPtrDiff_t nDstStrideInElts,
size_t nValues);
2835 const std::string &osName,
size_t nTotalSize,
2836 std::vector<std::unique_ptr<GDALEDTComponent>> &&components);
2838 std::string m_osName{};
2842 std::vector<std::unique_ptr<GDALEDTComponent>> m_aoComponents{};
2844 size_t m_nMaxStringLength = 0;
2894 std::string m_osName;
2911 std::shared_ptr<GDALAttribute>
2912 GetAttributeFromAttributes(
const std::string &osName)
const;
2917 virtual std::shared_ptr<GDALAttribute>
2918 GetAttribute(
const std::string &osName)
const;
2920 virtual std::vector<std::shared_ptr<GDALAttribute>>
2921 GetAttributes(
CSLConstList papszOptions =
nullptr)
const;
2923 virtual std::shared_ptr<GDALAttribute>
2924 CreateAttribute(
const std::string &osName,
2925 const std::vector<GUInt64> &anDimensions,
2929 virtual bool DeleteAttribute(
const std::string &osName,
2953 std::string m_osName{};
2956 std::string m_osFullName{};
2960 const std::string m_osContext{};
2962 std::weak_ptr<GDALGroup> m_pSelf{};
2965 bool m_bValid =
true;
2967 GDALGroup(
const std::string &osParentName,
const std::string &osName,
2968 const std::string &osContext = std::string());
2971 GetInnerMostGroup(
const std::string &osPathOrArrayOrDim,
2972 std::shared_ptr<GDALGroup> &curGroupHolder,
2973 std::string &osLastPart)
const;
2975 void BaseRename(
const std::string &osNewName);
2977 bool CheckValidAndErrorOutIfNot()
const;
2979 void SetSelf(
const std::shared_ptr<GDALGroup> &self)
2984 virtual void NotifyChildrenOfRenaming()
2988 virtual void NotifyChildrenOfDeletion()
3012 return m_osFullName;
3015 virtual std::vector<std::string>
3016 GetMDArrayNames(
CSLConstList papszOptions =
nullptr)
const;
3017 virtual std::shared_ptr<GDALMDArray>
3018 OpenMDArray(
const std::string &osName,
3021 virtual std::vector<std::string>
3022 GetGroupNames(
CSLConstList papszOptions =
nullptr)
const;
3023 virtual std::shared_ptr<GDALGroup>
3024 OpenGroup(
const std::string &osName,
3027 virtual std::vector<std::string>
3028 GetVectorLayerNames(
CSLConstList papszOptions =
nullptr)
const;
3030 OpenVectorLayer(
const std::string &osName,
3033 virtual std::vector<std::shared_ptr<GDALDimension>>
3034 GetDimensions(
CSLConstList papszOptions =
nullptr)
const;
3036 virtual std::shared_ptr<GDALGroup>
3037 CreateGroup(
const std::string &osName,
CSLConstList papszOptions =
nullptr);
3039 virtual bool DeleteGroup(
const std::string &osName,
3042 virtual std::shared_ptr<GDALDimension>
3043 CreateDimension(
const std::string &osName,
const std::string &osType,
3044 const std::string &osDirection,
GUInt64 nSize,
3047 virtual std::shared_ptr<GDALMDArray> CreateMDArray(
3048 const std::string &osName,
3049 const std::vector<std::shared_ptr<GDALDimension>> &aoDimensions,
3053 virtual bool DeleteMDArray(
const std::string &osName,
3056 GUInt64 GetTotalCopyCost()
const;
3058 virtual bool CopyFrom(
const std::shared_ptr<GDALGroup> &poDstRootGroup,
3060 const std::shared_ptr<GDALGroup> &poSrcGroup,
3061 bool bStrict,
GUInt64 &nCurCost,
3063 GDALProgressFunc pfnProgress,
void *pProgressData,
3068 std::shared_ptr<GDALMDArray>
3069 OpenMDArrayFromFullname(
const std::string &osFullName,
3072 std::shared_ptr<GDALMDArray>
3073 ResolveMDArray(
const std::string &osName,
const std::string &osStartingPath,
3076 std::shared_ptr<GDALGroup>
3077 OpenGroupFromFullname(
const std::string &osFullName,
3080 std::shared_ptr<GDALDimension>
3081 OpenDimensionFromFullname(
const std::string &osFullName)
const;
3083 virtual void ClearStatistics();
3085 virtual bool Rename(
const std::string &osNewName);
3087 std::shared_ptr<GDALGroup>
3088 SubsetDimensionFromSelection(
const std::string &osSelection)
const;
3091 virtual void ParentRenamed(
const std::string &osNewParentFullName);
3093 virtual void Deleted();
3095 virtual void ParentDeleted();
3097 const std::string &GetContext()
const
3105 static constexpr GUInt64 COPY_COST = 1000;
3122 std::string m_osName{};
3125 std::string m_osFullName{};
3126 std::weak_ptr<GDALAbstractMDArray> m_pSelf{};
3129 bool m_bValid =
true;
3132 const std::string &osName);
3134 void SetSelf(
const std::shared_ptr<GDALAbstractMDArray> &self)
3139 bool CheckValidAndErrorOutIfNot()
const;
3141 bool CheckReadWriteParams(
const GUInt64 *arrayStartIdx,
const size_t *count,
3142 const GInt64 *&arrayStep,
3146 const void *buffer_alloc_start,
3147 size_t buffer_alloc_size,
3148 std::vector<GInt64> &tmp_arrayStep,
3149 std::vector<GPtrDiff_t> &tmp_bufferStride)
const;
3152 IRead(
const GUInt64 *arrayStartIdx,
3153 const size_t *count,
3157 void *pDstBuffer)
const = 0;
3160 IWrite(
const GUInt64 *arrayStartIdx,
3161 const size_t *count,
3166 void BaseRename(
const std::string &osNewName);
3168 virtual void NotifyChildrenOfRenaming()
3172 virtual void NotifyChildrenOfDeletion()
3198 return m_osFullName;
3201 GUInt64 GetTotalElementsCount()
const;
3203 virtual size_t GetDimensionCount()
const;
3205 virtual const std::vector<std::shared_ptr<GDALDimension>> &
3210 virtual std::vector<GUInt64> GetBlockSize()
const;
3212 virtual std::vector<size_t>
3213 GetProcessingChunkSize(
size_t nMaxChunkMemory)
const;
3231 typedef bool (*FuncProcessPerChunkType)(
3233 const GUInt64 *chunkArrayStartIdx,
3234 const size_t *chunkCount,
3240 virtual bool ProcessPerChunk(
const GUInt64 *arrayStartIdx,
3241 const GUInt64 *count,
const size_t *chunkSize,
3242 FuncProcessPerChunkType pfnFunc,
3246 Read(
const GUInt64 *arrayStartIdx,
3247 const size_t *count,
3251 const void *pDstBufferAllocStart =
nullptr,
3252 size_t nDstBufferAllocSize = 0)
const;
3255 Write(
const GUInt64 *arrayStartIdx,
3256 const size_t *count,
3260 const void *pSrcBufferAllocStart =
nullptr,
3261 size_t nSrcBufferAllocSize = 0);
3263 virtual bool Rename(
const std::string &osNewName);
3266 virtual void Deleted();
3268 virtual void ParentDeleted();
3270 virtual void ParentRenamed(
const std::string &osNewParentFullName);
3351 mutable std::string m_osCachedVal{};
3355 GDALAttribute(
const std::string &osParentName,
const std::string &osName);
3359 std::vector<GUInt64> GetDimensionsSize()
const;
3362 const char *ReadAsString()
const;
3363 int ReadAsInt()
const;
3364 int64_t ReadAsInt64()
const;
3365 double ReadAsDouble()
const;
3367 std::vector<int> ReadAsIntArray()
const;
3368 std::vector<int64_t> ReadAsInt64Array()
const;
3369 std::vector<double> ReadAsDoubleArray()
const;
3372 bool Write(
const void *pabyValue,
size_t nLen);
3373 bool Write(
const char *);
3375 bool WriteInt64(int64_t);
3378 bool Write(
const int *,
size_t);
3379 bool Write(
const int64_t *,
size_t);
3380 bool Write(
const double *,
size_t);
3383 static constexpr GUInt64 COPY_COST = 100;
3392class CPL_DLL GDALAttributeString final :
public GDALAttribute
3394 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
3396 std::string m_osValue;
3401 void *pDstBuffer)
const override;
3404 GDALAttributeString(
const std::string &osParentName,
3405 const std::string &osName,
const std::string &osValue,
3408 const std::vector<std::shared_ptr<GDALDimension>> &
3409 GetDimensions()
const override;
3421class CPL_DLL GDALAttributeNumeric final :
public GDALAttribute
3423 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
3426 double m_dfValue = 0;
3427 std::vector<GUInt32> m_anValuesUInt32{};
3432 void *pDstBuffer)
const override;
3435 GDALAttributeNumeric(
const std::string &osParentName,
3436 const std::string &osName,
double dfValue);
3437 GDALAttributeNumeric(
const std::string &osParentName,
3438 const std::string &osName,
int nValue);
3439 GDALAttributeNumeric(
const std::string &osParentName,
3440 const std::string &osName,
3441 const std::vector<GUInt32> &anValues);
3443 const std::vector<std::shared_ptr<GDALDimension>> &
3444 GetDimensions()
const override;
3470 friend class GDALMDArrayResampled;
3471 std::shared_ptr<GDALMDArray>
3472 GetView(
const std::vector<GUInt64> &indices)
const;
3474 inline std::shared_ptr<GDALMDArray>
3475 atInternal(
const std::vector<GUInt64> &indices)
const
3477 return GetView(indices);
3480 template <
typename... GUInt64VarArg>
3482 inline std::shared_ptr<GDALMDArray>
3483 atInternal(std::vector<GUInt64> &indices,
GUInt64 idx,
3484 GUInt64VarArg... tail)
const
3486 indices.push_back(idx);
3487 return atInternal(indices, tail...);
3492 const std::string m_osContext{};
3494 mutable bool m_bHasTriedCachedArray =
false;
3495 mutable std::shared_ptr<GDALMDArray> m_poCachedArray{};
3499 GDALMDArray(
const std::string &osParentName,
const std::string &osName,
3500 const std::string &osContext = std::string());
3502 virtual bool IAdviseRead(
const GUInt64 *arrayStartIdx,
const size_t *count,
3505 virtual bool IsCacheable()
const
3510 virtual bool SetStatistics(
bool bApproxStats,
double dfMin,
double dfMax,
3511 double dfMean,
double dfStdDev,
3514 static std::string MassageName(
const std::string &inputName);
3516 std::shared_ptr<GDALGroup>
3517 GetCacheRootGroup(
bool bCanCreate, std::string &osCacheFilenameOut)
const;
3520 bool IsTransposedRequest(
const size_t *count,
3524 bool ReadForTransposedRequest(
const GUInt64 *arrayStartIdx,
3525 const size_t *count,
const GInt64 *arrayStep,
3528 void *pDstBuffer)
const;
3530 bool IsStepOneContiguousRowMajorOrderedSameDataType(
3531 const size_t *count,
const GInt64 *arrayStep,
3537 bool ReadUsingContiguousIRead(
const GUInt64 *arrayStartIdx,
3538 const size_t *count,
const GInt64 *arrayStep,
3541 void *pDstBuffer)
const;
3543 static std::shared_ptr<GDALMDArray> CreateGLTOrthorectified(
3544 const std::shared_ptr<GDALMDArray> &poParent,
3545 const std::shared_ptr<GDALGroup> &poRootGroup,
3546 const std::shared_ptr<GDALMDArray> &poGLTX,
3547 const std::shared_ptr<GDALMDArray> &poGLTY,
int nGLTIndexOffset,
3548 const std::vector<double> &adfGeoTransform,
CSLConstList papszOptions);
3553 GUInt64 GetTotalCopyCost()
const;
3556 bool bStrict,
GUInt64 &nCurCost,
3558 GDALProgressFunc pfnProgress,
void *pProgressData);
3575 virtual const std::string &GetUnit()
const;
3577 virtual bool SetUnit(
const std::string &osUnit);
3581 virtual std::shared_ptr<OGRSpatialReference> GetSpatialRef()
const;
3583 virtual const void *GetRawNoDataValue()
const;
3585 double GetNoDataValueAsDouble(
bool *pbHasNoData =
nullptr)
const;
3587 int64_t GetNoDataValueAsInt64(
bool *pbHasNoData =
nullptr)
const;
3589 uint64_t GetNoDataValueAsUInt64(
bool *pbHasNoData =
nullptr)
const;
3591 virtual bool SetRawNoDataValue(
const void *pRawNoData);
3594 bool SetNoDataValue(
int nNoData)
3596 return SetNoDataValue(
static_cast<int64_t
>(nNoData));
3601 bool SetNoDataValue(
double dfNoData);
3603 bool SetNoDataValue(int64_t nNoData);
3605 bool SetNoDataValue(uint64_t nNoData);
3607 virtual bool Resize(
const std::vector<GUInt64> &anNewDimSizes,
3610 virtual double GetOffset(
bool *pbHasOffset =
nullptr,
3613 virtual double GetScale(
bool *pbHasScale =
nullptr,
3616 virtual bool SetOffset(
double dfOffset,
3619 virtual bool SetScale(
double dfScale,
3622 std::shared_ptr<GDALMDArray> GetView(
const std::string &viewExpr)
const;
3624 std::shared_ptr<GDALMDArray> operator[](
const std::string &fieldName)
const;
3637 template <
typename... GUInt64VarArg>
3640 std::shared_ptr<GDALMDArray>
at(
GUInt64 idx, GUInt64VarArg... tail)
const
3642 std::vector<GUInt64> indices;
3643 indices.push_back(idx);
3644 return atInternal(indices, tail...);
3647 virtual std::shared_ptr<GDALMDArray>
3648 Transpose(
const std::vector<int> &anMapNewAxisToOldAxis)
const;
3650 std::shared_ptr<GDALMDArray> GetUnscaled(
3651 double dfOverriddenScale = std::numeric_limits<double>::quiet_NaN(),
3652 double dfOverriddenOffset = std::numeric_limits<double>::quiet_NaN(),
3653 double dfOverriddenDstNodata =
3654 std::numeric_limits<double>::quiet_NaN())
const;
3656 virtual std::shared_ptr<GDALMDArray>
3659 virtual std::shared_ptr<GDALMDArray>
3660 GetResampled(
const std::vector<std::shared_ptr<GDALDimension>> &apoNewDims,
3665 std::shared_ptr<GDALMDArray>
3666 GetGridded(
const std::string &osGridOptions,
3667 const std::shared_ptr<GDALMDArray> &poXArray =
nullptr,
3668 const std::shared_ptr<GDALMDArray> &poYArray =
nullptr,
3671 static std::vector<std::shared_ptr<GDALMDArray>>
3672 GetMeshGrid(
const std::vector<std::shared_ptr<GDALMDArray>> &apoArrays,
3676 AsClassicDataset(
size_t iXDim,
size_t iYDim,
3677 const std::shared_ptr<GDALGroup> &poRootGroup =
nullptr,
3680 virtual CPLErr GetStatistics(
bool bApproxOK,
bool bForce,
double *pdfMin,
3681 double *pdfMax,
double *pdfMean,
3682 double *padfStdDev,
GUInt64 *pnValidCount,
3683 GDALProgressFunc pfnProgress,
3684 void *pProgressData);
3686 virtual bool ComputeStatistics(
bool bApproxOK,
double *pdfMin,
3687 double *pdfMax,
double *pdfMean,
3688 double *pdfStdDev,
GUInt64 *pnValidCount,
3689 GDALProgressFunc,
void *pProgressData,
3692 virtual void ClearStatistics();
3694 virtual std::vector<std::shared_ptr<GDALMDArray>>
3695 GetCoordinateVariables()
const;
3697 bool AdviseRead(
const GUInt64 *arrayStartIdx,
const size_t *count,
3700 bool IsRegularlySpaced(
double &dfStart,
double &dfIncrement)
const;
3702 bool GuessGeoTransform(
size_t nDimX,
size_t nDimY,
bool bPixelIsPoint,
3703 double adfGeoTransform[6])
const;
3708 Read(
const GUInt64 *arrayStartIdx,
3709 const size_t *count,
3713 const void *pDstBufferAllocStart =
nullptr,
3714 size_t nDstBufferAllocSize = 0) const override final;
3716 virtual std::shared_ptr<
GDALGroup> GetRootGroup() const;
3719 static constexpr
GUInt64 COPY_COST = 1000;
3721 bool CopyFromAllExceptValues(const
GDALMDArray *poSrcArray,
bool bStrict,
3723 GDALProgressFunc pfnProgress,
3724 void *pProgressData);
3732 : m_nStartIdx(nStartIdx), m_nIncr(nIncr)
3739 std::string m_osFieldName{};
3744 m_mapDimIdxToParentDimIdx{};
3749 virtual std::shared_ptr<GDALMDArray>
3750 GetView(
const std::string &viewExpr,
bool bRenameDimensions,
3751 std::vector<ViewSpec> &viewSpecs)
const;
3753 const std::string &GetContext()
const
3763 size_t iDimX,
size_t iDimY,
3764 const GUInt64 *arrayStartIdx,
const size_t *count,
3777class CPL_DLL GDALMDArrayRegularlySpaced :
public GDALMDArray
3780 double m_dfIncrement;
3781 double m_dfOffsetInIncrement;
3783 std::vector<std::shared_ptr<GDALDimension>> m_dims;
3784 std::vector<std::shared_ptr<GDALAttribute>> m_attributes{};
3785 std::string m_osEmptyFilename{};
3790 void *pDstBuffer)
const override;
3793 GDALMDArrayRegularlySpaced(
const std::string &osParentName,
3794 const std::string &osName,
3795 const std::shared_ptr<GDALDimension> &poDim,
3796 double dfStart,
double dfIncrement,
3797 double dfOffsetInIncrement);
3799 static std::shared_ptr<GDALMDArrayRegularlySpaced>
3800 Create(
const std::string &osParentName,
const std::string &osName,
3801 const std::shared_ptr<GDALDimension> &poDim,
double dfStart,
3802 double dfIncrement,
double dfOffsetInIncrement);
3804 bool IsWritable()
const override
3809 const std::string &GetFilename()
const override
3811 return m_osEmptyFilename;
3814 const std::vector<std::shared_ptr<GDALDimension>> &
3815 GetDimensions()
const override;
3819 std::vector<std::shared_ptr<GDALAttribute>>
3822 void AddAttribute(
const std::shared_ptr<GDALAttribute> &poAttr);
3846 GDALDimension(
const std::string &osParentName,
const std::string &osName,
3847 const std::string &osType,
const std::string &osDirection,
3868 return m_osFullName;
3894 return m_osDirection;
3906 virtual std::shared_ptr<GDALMDArray> GetIndexingVariable()
const;
3909 SetIndexingVariable(std::shared_ptr<GDALMDArray> poIndexingVariable);
3911 virtual bool Rename(
const std::string &osNewName);
3914 virtual void ParentRenamed(
const std::string &osNewParentFullName);
3916 virtual void ParentDeleted();
3921 std::string m_osName;
3922 std::string m_osFullName;
3923 std::string m_osType;
3924 std::string m_osDirection;
3927 void BaseRename(
const std::string &osNewName);
3937class CPL_DLL GDALDimensionWeakIndexingVar :
public GDALDimension
3939 std::weak_ptr<GDALMDArray> m_poIndexingVariable{};
3942 GDALDimensionWeakIndexingVar(
const std::string &osParentName,
3943 const std::string &osName,
3944 const std::string &osType,
3945 const std::string &osDirection,
GUInt64 nSize);
3947 std::shared_ptr<GDALMDArray> GetIndexingVariable()
const override;
3949 bool SetIndexingVariable(
3950 std::shared_ptr<GDALMDArray> poIndexingVariable)
override;
3952 void SetSize(
GUInt64 nNewSize);
3961struct GDALAntiRecursionStruct;
3963class GDALAntiRecursionGuard
3965 GDALAntiRecursionStruct *m_psAntiRecursionStruct;
3966 std::string m_osIdentifier;
3969 GDALAntiRecursionGuard(
const GDALAntiRecursionGuard &) =
delete;
3970 GDALAntiRecursionGuard &operator=(
const GDALAntiRecursionGuard &) =
delete;
3973 explicit GDALAntiRecursionGuard(
const std::string &osIdentifier);
3974 GDALAntiRecursionGuard(
const GDALAntiRecursionGuard &other,
3975 const std::string &osIdentifier);
3976 ~GDALAntiRecursionGuard();
3978 int GetCallDepth()
const
4005 std::string m_osName{};
4006 std::string m_osLeftTableName{};
4007 std::string m_osRightTableName{};
4010 std::string m_osMappingTableName{};
4011 std::vector<std::string> m_osListLeftTableFields{};
4012 std::vector<std::string> m_osListRightTableFields{};
4013 std::vector<std::string> m_osListLeftMappingTableFields{};
4014 std::vector<std::string> m_osListRightMappingTableFields{};
4016 std::string m_osForwardPathLabel{};
4017 std::string m_osBackwardPathLabel{};
4018 std::string m_osRelatedTableType{};
4031 const std::string &osLeftTableName,
4032 const std::string &osRightTableName,
4035 : m_osName(osName), m_osLeftTableName(osLeftTableName),
4036 m_osRightTableName(osRightTableName), m_eCardinality(eCardinality)
4049 return m_eCardinality;
4058 return m_osLeftTableName;
4065 return m_osRightTableName;
4074 return m_osMappingTableName;
4083 m_osMappingTableName = osName;
4094 return m_osListLeftTableFields;
4105 return m_osListRightTableFields;
4116 m_osListLeftTableFields = osListFields;
4127 m_osListRightTableFields = osListFields;
4138 return m_osListLeftMappingTableFields;
4149 return m_osListRightMappingTableFields;
4160 m_osListLeftMappingTableFields = osListFields;
4172 m_osListRightMappingTableFields = osListFields;
4210 return m_osForwardPathLabel;
4230 m_osForwardPathLabel = osLabel;
4250 return m_osBackwardPathLabel;
4270 m_osBackwardPathLabel = osLabel;
4285 return m_osRelatedTableType;
4300 m_osRelatedTableType = osType;
4324CPLErr CPL_DLL GDALRegenerateOverviewsMultiBand(
4327 const char *pszResampling, GDALProgressFunc pfnProgress,
4330CPLErr CPL_DLL GDALRegenerateOverviewsMultiBand(
4331 const std::vector<GDALRasterBand *> &apoSrcBands,
4334 const std::vector<std::vector<GDALRasterBand *>> &aapoOverviewBands,
4335 const char *pszResampling, GDALProgressFunc pfnProgress,
4345struct GDALOverviewResampleArgs
4359 double dfXRatioDstToSrc = 0;
4362 double dfYRatioDstToSrc = 0;
4364 double dfSrcXDelta = 0;
4366 double dfSrcYDelta = 0;
4370 const GByte *pabyChunkNodataMask =
nullptr;
4374 int nChunkXSize = 0;
4378 int nChunkYSize = 0;
4388 const char *pszResampling =
nullptr;
4390 bool bHasNoData =
false;
4392 double dfNoDataValue = 0;
4398 bool bPropagateNoData =
false;
4401typedef CPLErr (*GDALResampleFunction)(
const GDALOverviewResampleArgs &args,
4402 const void *pChunk,
void **ppDstBuffer,
4405GDALResampleFunction GDALGetResampleFunction(
const char *pszResampling,
4408std::string CPL_DLL GDALGetNormalizedOvrResampling(
const char *pszResampling);
4410GDALDataType GDALGetOvrWorkDataType(
const char *pszResampling,
4416HFAAuxBuildOverviews(
const char *pszOvrFilename,
GDALDataset *poParentDS,
4417 GDALDataset **ppoDS,
int nBands,
const int *panBandList,
4418 int nNewOverviews,
const int *panNewOverviewList,
4419 const char *pszResampling, GDALProgressFunc pfnProgress,
4422CPLErr CPL_DLL GTIFFBuildOverviews(
const char *pszFilename,
int nBands,
4424 int nOverviews,
const int *panOverviewList,
4425 const char *pszResampling,
4426 GDALProgressFunc pfnProgress,
4427 void *pProgressData,
4430int CPL_DLL GDALBandGetBestOverviewLevel(
GDALRasterBand *poBand,
int &nXOff,
4431 int &nYOff,
int &nXSize,
int &nYSize,
4432 int nBufXSize,
int nBufYSize)
4433 CPL_WARN_DEPRECATED(
"Use GDALBandGetBestOverviewLevel2 instead");
4434int CPL_DLL GDALBandGetBestOverviewLevel2(
GDALRasterBand *poBand,
int &nXOff,
4435 int &nYOff,
int &nXSize,
int &nYSize,
4436 int nBufXSize,
int nBufYSize,
4439int CPL_DLL GDALOvLevelAdjust(
int nOvLevel,
int nXSize)
4440 CPL_WARN_DEPRECATED(
"Use GDALOvLevelAdjust2 instead");
4441int CPL_DLL GDALOvLevelAdjust2(
int nOvLevel,
int nXSize,
int nYSize);
4442int CPL_DLL GDALComputeOvFactor(
int nOvrXSize,
int nRasterXSize,
int nOvrYSize,
4445GDALDataset CPL_DLL *GDALFindAssociatedAuxFile(
const char *pszBasefile,
4453int CPL_DLL GDALCheckDatasetDimensions(
int nXSize,
int nYSize);
4454int CPL_DLL GDALCheckBandCount(
int nBands,
int bIsZeroAllowed);
4460int CPL_DLL GDALReadWorldFile2(
const char *pszBaseFilename,
4461 const char *pszExtension,
4462 double *padfGeoTransform,
4464 char **ppszWorldFileNameOut);
4465int CPL_DLL GDALReadTabFile2(
const char *pszBaseFilename,
4466 double *padfGeoTransform,
char **ppszWKT,
4467 int *pnGCPCount,
GDAL_GCP **ppasGCPs,
4469 char **ppszTabFileNameOut);
4476std::unique_ptr<GDALDataset> CPL_DLL
4482void GDALNullifyOpenDatasetsList();
4483CPLMutex **GDALGetphDMMutex();
4484CPLMutex **GDALGetphDLMutex();
4485void GDALNullifyProxyPoolSingleton();
4486void GDALSetResponsiblePIDForCurrentThread(
GIntBig responsiblePID);
4487GIntBig GDALGetResponsiblePIDForCurrentThread();
4489CPLString GDALFindAssociatedFile(
const char *pszBasename,
const char *pszExt,
4492CPLErr CPL_DLL EXIFExtractMetadata(
char **&papszMetadata,
void *fpL,
4493 int nOffset,
int bSwabflag,
int nTIFFHEADER,
4494 int &nExifOffset,
int &nInterOffset,
4498 const char *
const *papszOptionOptions);
4499int GDALValidateOptions(
const char *pszOptionList,
4500 const char *
const *papszOptionsToValidate,
4501 const char *pszErrorMessageOptionType,
4502 const char *pszErrorMessageContainerName);
4505GDALRasterIOGetResampleAlg(
const char *pszResampling);
4509 int nXSize,
int nYSize,
int nBufXSize,
4513 bool bThisLevelOnly);
4518template <
class T>
inline bool ARE_REAL_EQUAL(T fVal1, T fVal2,
int ulp = 2)
4520 return fVal1 == fVal2 ||
4521 std::abs(fVal1 - fVal2) < std::numeric_limits<float>::epsilon() *
4522 std::abs(fVal1 + fVal2) * ulp;
4525double GDALAdjustNoDataCloseToFloatMax(
double dfVal);
4527#define DIV_ROUND_UP(a, b) (((a) % (b)) == 0 ? ((a) / (b)) : (((a) / (b)) + 1))
4531#define GDALSTAT_APPROX_NUMSAMPLES 2500
4533void GDALSerializeGCPListToXML(
CPLXMLNode *psParentNode,
4534 const std::vector<gdal::GCP> &asGCPs,
4536void GDALDeserializeGCPListFromXML(
const CPLXMLNode *psGCPList,
4537 std::vector<gdal::GCP> &asGCPs,
4540void GDALSerializeOpenOptionsToXML(
CPLXMLNode *psParentNode,
4543GDALDeserializeOpenOptionsFromXML(
const CPLXMLNode *psParentNode);
4545int GDALCanFileAcceptSidecarFile(
const char *pszFilename);
4547bool GDALCanReliablyUseSiblingFileList(
const char *pszFilename);
4554} GDALBufferSampleFormat;
4556bool CPL_DLL GDALBufferHasOnlyNoData(
const void *pBuffer,
double dfNoDataValue,
4557 size_t nWidth,
size_t nHeight,
4558 size_t nLineStride,
size_t nComponents,
4560 GDALBufferSampleFormat nSampleFormat);
4565double CPL_DLL GDALGetNoDataValueCastToDouble(int64_t nVal);
4566double CPL_DLL GDALGetNoDataValueCastToDouble(uint64_t nVal);
4571void CPL_DLL GDALEnablePixelTypeSignedByteWarning(
GDALRasterBandH hBand,
4574std::string CPL_DLL GDALGetCompressionFormatForJPEG(
VSILFILE *fp);
4575std::string CPL_DLL GDALGetCompressionFormatForJPEG(
const void *pBuffer,
4576 size_t nBufferSize);
4580 const std::vector<std::shared_ptr<GDALMDArray>> &apoArrays,
4581 const std::vector<GDALRATFieldUsage> &aeUsages);
4584GDALGetColorInterpFromSTACCommonName(
const char *pszName);
4591#ifdef PLUGIN_FILENAME
4592#define PLUGIN_SYMBOL_NAME(x) GDAL_core_##x
4594#define PLUGIN_SYMBOL_NAME(x) GDAL_driver_##x
String list class designed around our use of C "char**" string lists.
Definition cpl_string.h:436
Convenient string class based on std::string.
Definition cpl_string.h:307
Abstract class, implemented by GDALAttribute and GDALMDArray.
Definition gdal_priv.h:3119
const std::string & GetFullName() const
Return the name of an array or attribute.
Definition gdal_priv.h:3196
virtual const std::vector< std::shared_ptr< GDALDimension > > & GetDimensions() const =0
Return the dimensions of an attribute/array.
virtual const GDALExtendedDataType & GetDataType() const =0
Return the data type of an attribute/array.
const std::string & GetName() const
Return the name of an array or attribute.
Definition gdal_priv.h:3186
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:2227
Class used as a session object for asynchronous requests.
Definition gdal_priv.h:2555
int GetXOffset() const
Return x offset.
Definition gdal_priv.h:2592
int GetYOffset() const
Return y offset.
Definition gdal_priv.h:2600
int GetYSize() const
Return height.
Definition gdal_priv.h:2616
int GetBandCount() const
Return band count.
Definition gdal_priv.h:2656
GDALDataType GetBufferType() const
Return buffer data type.
Definition gdal_priv.h:2648
int GetBandSpace() const
Return band spacing.
Definition gdal_priv.h:2688
int GetBufferYSize() const
Return buffer height.
Definition gdal_priv.h:2640
int GetXSize() const
Return width.
Definition gdal_priv.h:2608
virtual GDALAsyncStatusType GetNextUpdatedRegion(double dfTimeout, int *pnBufXOff, int *pnBufYOff, int *pnBufXSize, int *pnBufYSize)=0
= 0;
void * GetBuffer()
Return buffer.
Definition gdal_priv.h:2624
int GetPixelSpace() const
Return pixel spacing.
Definition gdal_priv.h:2672
int * GetBandMap()
Return band map.
Definition gdal_priv.h:2664
GDALDataset * GetGDALDataset()
Return dataset.
Definition gdal_priv.h:2584
int GetLineSpace() const
Return line spacing.
Definition gdal_priv.h:2680
int GetBufferXSize() const
Return buffer width.
Definition gdal_priv.h:2632
Class modeling an attribute that has a name, a value and a type, and is typically used to describe a ...
Definition gdal_priv.h:3350
A color table / palette.
Definition gdal_priv.h:1362
static GDALColorTableH ToHandle(GDALColorTable *poCT)
Convert a GDALColorTable* to a GDALRasterBandH.
Definition gdal_priv.h:1387
~GDALColorTable()
Destructor.
static GDALColorTable * FromHandle(GDALColorTableH hCT)
Convert a GDALColorTableH to a GDALColorTable*.
Definition gdal_priv.h:1395
Class returned by GetBands() that act as a container for raster bands.
Definition gdal_priv.h:665
Class returned by GetFeatures() that act as a container for vector features.
Definition gdal_priv.h:1022
Layer iterator.
Definition gdal_priv.h:968
void pointer
pointer
Definition gdal_priv.h:976
void difference_type
difference_type
Definition gdal_priv.h:975
std::input_iterator_tag iterator_category
iterator_category
Definition gdal_priv.h:978
Class returned by GetLayers() that acts as a range of layers.
Definition gdal_priv.h:954
A set of associated raster bands, usually from one file.
Definition gdal_priv.h:495
virtual bool SetQueryLoggerFunc(GDALQueryLoggerFunc pfnQueryLoggerFuncIn, void *poQueryLoggerArgIn)
SetQueryLoggerFunc.
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:906
OGRErr Release()
Drop a reference to this dataset, and if the reference count drops to one close (destroy) the dataset...
Definition gdaldataset.cpp:5592
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain) override
Set single metadata item.
char ** GetOpenOptions()
Return open options.
Definition gdal_priv.h:832
bool IsMarkedSuppressOnClose() const
Return MarkSuppressOnClose flag.
Definition gdal_priv.h:824
static GDALDataset * FromHandle(GDALDatasetH hDS)
Convert a GDALDatasetH to a GDALDataset*.
Definition gdal_priv.h:898
static GDALDatasetH ToHandle(GDALDataset *poDS)
Convert a GDALDataset* to a GDALDatasetH.
Definition gdal_priv.h:890
GDALAccess GetAccess() const
Return access mode.
Definition gdal_priv.h:810
Class modeling a a dimension / axis used to index multidimensional arrays.
Definition gdal_priv.h:3843
const std::string & GetName() const
Return the name.
Definition gdal_priv.h:3857
const std::string & GetDirection() const
Return the axis direction.
Definition gdal_priv.h:3892
const std::string & GetFullName() const
Return the full name.
Definition gdal_priv.h:3866
GUInt64 GetSize() const
Return the size, that is the number of values along the dimension.
Definition gdal_priv.h:3901
const std::string & GetType() const
Return the axis type.
Definition gdal_priv.h:3879
Class for managing the registration of file format drivers.
Definition gdal_priv.h:2469
Format specific driver.
Definition gdal_priv.h:2124
static GDALDriver * FromHandle(GDALDriverH hDriver)
Convert a GDALDriverH to a GDALDriver*.
Definition gdal_priv.h:2348
static GDALDriverH ToHandle(GDALDriver *poDriver)
Convert a GDALDriver* to a GDALDriverH.
Definition gdal_priv.h:2340
Class for a component of a compound extended data type.
Definition gdal_priv.h:2857
const GDALExtendedDataType & GetType() const
Return the data type of the component.
Definition gdal_priv.h:2888
size_t GetOffset() const
Return the offset (in bytes) of the component in the compound data type.
Definition gdal_priv.h:2879
const std::string & GetName() const
Return the name.
Definition gdal_priv.h:2870
GDALEDTComponent(const GDALEDTComponent &)
Copy constructor.
Class used to represent potentially complex data types.
Definition gdal_priv.h:2721
bool operator!=(const GDALExtendedDataType &other) const
Non-equality operator.
Definition gdal_priv.h:2741
GDALExtendedDataTypeSubType GetSubType() const
Return subtype.
Definition gdal_priv.h:2780
size_t GetSize() const
Return data type size in bytes.
Definition gdal_priv.h:2801
size_t GetMaxStringLength() const
Return the maximum length of a string in bytes.
Definition gdal_priv.h:2810
static GDALExtendedDataType Create(GDALDataType eType)
Return a new GDALExtendedDataType of class GEDTC_NUMERIC.
Definition gdalmultidim.cpp:10048
static GDALExtendedDataType CreateString(size_t nMaxStringLength=0, GDALExtendedDataTypeSubType eSubType=GEDTST_NONE)
Return a new GDALExtendedDataType of class GEDTC_STRING.
Definition gdalmultidim.cpp:10113
GDALDataType GetNumericDataType() const
Return numeric data type (only valid when GetClass() == GEDTC_NUMERIC)
Definition gdal_priv.h:2769
GDALExtendedDataTypeClass GetClass() const
Return type class.
Definition gdal_priv.h:2759
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:2790
const std::string & GetName() const
Return type name.
Definition gdal_priv.h:2750
Class modeling a named container of GDALAttribute, GDALMDArray, OGRLayer or other GDALGroup.
Definition gdal_priv.h:2950
const std::string & GetName() const
Return the name of the group.
Definition gdal_priv.h:3001
const std::string & GetFullName() const
Return the full name of the group.
Definition gdal_priv.h:3010
Interface used to get a single GDALAttribute or a set of GDALAttribute.
Definition gdal_priv.h:2909
Class modeling a multi-dimensional array.
Definition gdal_priv.h:3469
virtual bool IsWritable() const =0
Return whether an array is writable.
virtual const std::string & GetFilename() const =0
Return the filename that contains that array.
std::shared_ptr< GDALMDArray > at(GUInt64 idx, GUInt64VarArg... tail) const
Return a view of the array using integer indexing.
Definition gdal_priv.h:3640
Object with metadata.
Definition gdal_priv.h:141
static GDALMajorObject * FromHandle(GDALMajorObjectH hMajorObject)
Convert a GDALMajorObjectH to a GDALMajorObject*.
Definition gdal_priv.h:184
static GDALMajorObjectH ToHandle(GDALMajorObject *poMajorObject)
Convert a GDALMajorObject* to a GDALMajorObjectH.
Definition gdal_priv.h:176
Class for dataset open functions.
Definition gdal_priv.h:293
int bStatOK
Whether stat()'ing the file was successful.
Definition gdal_priv.h:314
GByte * pabyHeader
Buffer with first bytes of the file.
Definition gdal_priv.h:324
int bIsDirectory
Whether the file is a directory.
Definition gdal_priv.h:316
char ** papszOpenOptions
Open options.
Definition gdal_priv.h:306
GDALAccess eAccess
Access flag.
Definition gdal_priv.h:309
int nOpenFlags
Open flags.
Definition gdal_priv.h:311
VSILFILE * fpL
Pointer to the file.
Definition gdal_priv.h:319
char * pszFilename
Filename.
Definition gdal_priv.h:304
int nHeaderBytes
Number of bytes in pabyHeader.
Definition gdal_priv.h:322
const char *const * papszAllowedDrivers
Allowed drivers (NULL for all)
Definition gdal_priv.h:327
Proxy for a plugin driver.
Definition gdal_priv.h:2402
const char * GetMetadataItem(const char *pszName, const char *pszDomain="") override
Fetch single metadata item.
Definition gdaldrivermanager.cpp:1304
char ** GetMetadata(const char *pszDomain) override
Fetch metadata.
Definition gdaldrivermanager.cpp:1261
const std::string & GetPluginFileName() const
Return the plugin file name (not a full path)
Definition gdal_priv.h:2427
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain="") override
Set single metadata item.
Definition gdaldrivermanager.cpp:1269
The GDALRasterAttributeTable (or RAT) class is used to encapsulate a table used to provide attribute ...
Definition gdal_rat.h:32
A single raster band (or channel).
Definition gdal_priv.h:1519
void static GDALRasterBandH ToHandle(GDALRasterBand *poBand)
Convert a GDALRasterBand* to a GDALRasterBandH.
Definition gdal_priv.h:1882
virtual bool IsMaskBand() const
Returns whether a band is a mask band.
Definition gdalrasterband.cpp:8138
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
virtual CPLErr IReadBlock(int nBlockXOff, int nBlockYOff, void *pData)=0
Default internal implementation ... to be overridden by subclasses that support reading.
virtual CPLErr IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, void *pData, int nBufXSize, int nBufYSize, GDALDataType eBufType, GSpacing nPixelSpace, GSpacing nLineSpace, GDALRasterIOExtraArg *psExtraArg)
Read/write a region of image data for this band.
Definition rasterio.cpp:191
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain) override
Set single metadata item.
static GDALRasterBand * FromHandle(GDALRasterBandH hBand)
Convert a GDALRasterBandH to a GDALRasterBand*.
Definition gdal_priv.h:1890
A single raster block in the block cache.
Definition gdal_priv.h:1204
int GetDirty() const
Return the dirty flag.
Definition gdal_priv.h:1301
GDALRasterBand * GetBand()
Accessor to source GDALRasterBand object.
Definition gdal_priv.h:1328
int GetXSize() const
Return the width of the block.
Definition gdal_priv.h:1285
GPtrDiff_t GetBlockSize() const
Return the block size in bytes.
Definition gdal_priv.h:1317
int GetYSize() const
Return the height of the block.
Definition gdal_priv.h:1293
GDALDataType GetDataType() const
Return the data type.
Definition gdal_priv.h:1261
int GetXOff() const
Return the x offset of the top-left corner of the block.
Definition gdal_priv.h:1269
int AddLock(void)
Increment the lock count.
Definition gdal_priv.h:1243
void * GetDataRef(void)
Return the data buffer.
Definition gdal_priv.h:1309
int GetYOff() const
Return the y offset of the top-left corner of the block.
Definition gdal_priv.h:1277
int DropLock(void)
Decrement the lock count.
Definition gdal_priv.h:1249
Store the raw result of an attribute value, which might contain dynamically allocated structures (lik...
Definition gdal_priv.h:3285
size_t size() const
Return the size in bytes of the raw result.
Definition gdal_priv.h:3321
const GByte * data() const
Return pointer to the start of data.
Definition gdal_priv.h:3315
const GByte & operator[](size_t idx) const
Return byte at specified index.
Definition gdal_priv.h:3309
Definition of a table relationship.
Definition gdal_priv.h:4002
const std::string & GetName() const
Get the name of the relationship.
Definition gdal_priv.h:4041
const std::vector< std::string > & GetLeftMappingTableFields() const
Get the names of the mapping table fields which correspond to the participating fields from the left ...
Definition gdal_priv.h:4136
void SetType(GDALRelationshipType eType)
Sets the type of the relationship.
Definition gdal_priv.h:4188
void SetLeftMappingTableFields(const std::vector< std::string > &osListFields)
Sets the names of the mapping table fields which correspond to the participating fields from the left...
Definition gdal_priv.h:4158
void SetMappingTableName(const std::string &osName)
Sets the name of the mapping table for many-to-many relationships.
Definition gdal_priv.h:4081
static GDALRelationshipH ToHandle(GDALRelationship *poRelationship)
Convert a GDALRelationship* to a GDALRelationshipH.
Definition gdal_priv.h:4305
const std::string & GetForwardPathLabel() const
Get the label of the forward path for the relationship.
Definition gdal_priv.h:4208
const std::string & GetLeftTableName() const
Get the name of the left (or base/origin) table in the relationship.
Definition gdal_priv.h:4056
const std::string & GetBackwardPathLabel() const
Get the label of the backward path for the relationship.
Definition gdal_priv.h:4248
const std::string & GetRelatedTableType() const
Get the type string of the related table.
Definition gdal_priv.h:4283
const std::string & GetMappingTableName() const
Get the name of the mapping table for many-to-many relationships.
Definition gdal_priv.h:4072
void SetLeftTableFields(const std::vector< std::string > &osListFields)
Sets the names of the participating fields from the left table in the relationship.
Definition gdal_priv.h:4114
GDALRelationshipCardinality GetCardinality() const
Get the cardinality of the relationship.
Definition gdal_priv.h:4047
void SetRightTableFields(const std::vector< std::string > &osListFields)
Sets the names of the participating fields from the right table in the relationship.
Definition gdal_priv.h:4125
void SetForwardPathLabel(const std::string &osLabel)
Sets the label of the forward path for the relationship.
Definition gdal_priv.h:4228
void SetBackwardPathLabel(const std::string &osLabel)
Sets the label of the backward path for the relationship.
Definition gdal_priv.h:4268
const std::vector< std::string > & GetRightTableFields() const
Get the names of the participating fields from the right table in the relationship.
Definition gdal_priv.h:4103
void SetRightMappingTableFields(const std::vector< std::string > &osListFields)
Sets the names of the mapping table fields which correspond to the participating fields from the righ...
Definition gdal_priv.h:4170
static GDALRelationship * FromHandle(GDALRelationshipH hRelationship)
Convert a GDALRelationshipH to a GDALRelationship*.
Definition gdal_priv.h:4312
const std::vector< std::string > & GetRightMappingTableFields() const
Get the names of the mapping table fields which correspond to the participating fields from the right...
Definition gdal_priv.h:4147
GDALRelationship(const std::string &osName, const std::string &osLeftTableName, const std::string &osRightTableName, GDALRelationshipCardinality eCardinality=GDALRelationshipCardinality::GRC_ONE_TO_MANY)
Constructor for a relationship between two tables.
Definition gdal_priv.h:4030
GDALRelationshipType GetType() const
Get the type of the relationship.
Definition gdal_priv.h:4179
const std::vector< std::string > & GetLeftTableFields() const
Get the names of the participating fields from the left table in the relationship.
Definition gdal_priv.h:4092
const std::string & GetRightTableName() const
Get the name of the right (or related/destination) table in the relationship.
Definition gdal_priv.h:4063
void SetRelatedTableType(const std::string &osType)
Sets the type string of the related table.
Definition gdal_priv.h:4298
A simple feature, including geometry and attributes.
Definition ogr_feature.h:877
Definition of a field domain.
Definition ogr_feature.h:1613
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:330
Abstract base class for all geometry classes.
Definition ogr_geometry.h:361
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:58
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:153
This class represents a style table.
Definition ogr_featurestyle.h:70
Various convenience functions for CPL.
CPLErr
Error category.
Definition cpl_error.h:37
int CPLErrorNum
Error number.
Definition cpl_error.h:79
Definitions for CPL mini XML Parser/Serializer.
int GPtrDiff_t
Integer type large enough to hold the difference between 2 addresses.
Definition cpl_port.h:240
#define STRCASECMP(a, b)
Alias for strcasecmp()
Definition cpl_port.h:528
#define CPL_NULL_TERMINATED
Null terminated variadic.
Definition cpl_port.h:926
unsigned long long GUIntBig
Large unsigned integer type (generally 64-bit unsigned integer type).
Definition cpl_port.h:202
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:283
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:279
GIntBig GInt64
Signed 64 bit integer type.
Definition cpl_port.h:220
#define CPL_PRINT_FUNC_FORMAT(format_idx, arg_idx)
Tag a function to have printf() formatting.
Definition cpl_port.h:938
#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:1030
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1179
GUIntBig GUInt64
Unsigned 64 bit integer type.
Definition cpl_port.h:222
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:964
unsigned char GByte
Unsigned byte type.
Definition cpl_port.h:169
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:199
Various convenience functions for working with strings and string lists.
struct CPLVirtualMem CPLVirtualMem
Opaque type that represents a virtual memory mapping.
Definition cpl_virtualmem.h:46
GUIntBig vsi_l_offset
Type for a file offset.
Definition cpl_vsi.h:130
Public (C callable) GDAL entry points.
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition gdal.h:400
void(* GDALQueryLoggerFunc)(const char *pszSQL, const char *pszError, int64_t lNumRecords, int64_t lExecutionTimeMilliseconds, void *pQueryLoggerArg)
Type of functions to pass to GDALDatasetSetQueryLoggerFunc.
Definition gdal.h:1407
GDALRATTableType
RAT table type (thematic or athematic)
Definition gdal.h:2132
GDALAccess
Definition gdal.h:110
@ GA_ReadOnly
Definition gdal.h:111
GDALPaletteInterp
Definition gdal.h:338
@ GPI_RGB
Definition gdal.h:340
GDALDataType
Definition gdal.h:48
@ GDT_Byte
Definition gdal.h:50
@ GDT_Float64
Definition gdal.h:59
@ GDT_Unknown
Definition gdal.h:49
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition gdal.h:376
GDALRasterAttributeTableH GDALCreateRasterAttributeTableFromMDArrays(GDALRATTableType eTableType, int nArrays, const GDALMDArrayH *ahArrays, const GDALRATFieldUsage *paeUsages)
Return a virtual Raster Attribute Table from several GDALMDArray's.
Definition gdalmultidim_rat.cpp:413
GDALExtendedDataTypeClass
Enumeration giving the class of a GDALExtendedDataType.
Definition gdal.h:406
@ GEDTC_NUMERIC
Numeric value.
Definition gdal.h:408
GDALRelationshipCardinality
Cardinality of relationship.
Definition gdal.h:2218
@ GRC_ONE_TO_MANY
One-to-many.
Definition gdal.h:2222
GDALRIOResampleAlg
RasterIO() resampling method.
Definition gdal.h:128
@ GRIORA_NearestNeighbour
Definition gdal.h:129
CPLErr GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition gdaldataset.cpp:4194
void * GDALRelationshipH
Opaque type used for the C bindings of the C++ GDALRelationship class.
Definition gdal.h:397
GDALDatasetH GDALGetThreadSafeDataset(GDALDatasetH, int nScopeFlags, CSLConstList papszOptions)
Return a thread-safe dataset.
Definition gdalthreadsafedataset.cpp:1262
int GDALGetDataTypeSizeBytes(GDALDataType)
Get data type size in bytes.
Definition gdal_misc.cpp:405
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:3586
GDALExtendedDataTypeSubType
Enumeration giving the subtype of a GDALExtendedDataType.
Definition gdal.h:419
@ GEDTST_NONE
None.
Definition gdal.h:421
void * GDALMajorObjectH
Opaque type used for the C bindings of the C++ GDALMajorObject class.
Definition gdal.h:373
GDALColorInterp
Types of color interpretation for raster bands.
Definition gdal.h:257
GDALRelationshipType
Type of relationship.
Definition gdal.h:2234
@ GRT_ASSOCIATION
Association relationship.
Definition gdal.h:2238
GDALAsyncStatusType
status of the asynchronous stream
Definition gdal.h:96
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition gdal.h:382
GDALRWFlag
Definition gdal.h:117
void * GDALRasterBandH
Opaque type used for the C bindings of the C++ GDALRasterBand class.
Definition gdal.h:379
void * GDALColorTableH
Opaque type used for the C bindings of the C++ GDALColorTable class.
Definition gdal.h:385
std::unique_ptr< GDALDataset, GDALDatasetUniquePtrDeleter > GDALDatasetUniquePtr
Unique pointer type for GDALDataset.
Definition gdal_priv.h:1193
constexpr GDALSuggestedBlockAccessPattern GSBAP_UNKNOWN
Unknown, or no particular read order is suggested.
Definition gdal_priv.h:1501
int GDALSuggestedBlockAccessPattern
Suggested/most efficient access pattern to blocks.
Definition gdal_priv.h:1498
constexpr GDALSuggestedBlockAccessPattern GSBAP_RANDOM
Random access to blocks is efficient.
Definition gdal_priv.h:1504
GDALDriverManager * GetGDALDriverManager(void)
Fetch the global GDAL driver manager.
Definition gdaldrivermanager.cpp:86
GDALMaskValueRange
Range of values found in a mask band.
Definition gdal_priv.h:1490
@ GMVR_0_AND_1_ONLY
Definition gdal_priv.h:1493
@ GMVR_0_AND_255_ONLY
Definition gdal_priv.h:1494
constexpr GDALSuggestedBlockAccessPattern GSBAP_TOP_TO_BOTTOM
Reading by strips from top to bottom is the most efficient.
Definition gdal_priv.h:1507
GDALIdentifyEnum
Enumeration used by GDALDriver::pfnIdentify().
Definition gdal_priv.h:2098
@ GDAL_IDENTIFY_TRUE
Identify determined the file is recognized by the probed driver.
Definition gdal_priv.h:2105
@ GDAL_IDENTIFY_FALSE
Identify determined the file is not recognized by the probed driver.
Definition gdal_priv.h:2103
@ GDAL_IDENTIFY_UNKNOWN
Identify could not determine if the file is recognized or not by the probed driver.
Definition gdal_priv.h:2101
constexpr GDALSuggestedBlockAccessPattern GSBAP_LARGEST_CHUNK_POSSIBLE
Reading the largest chunk from the raster is the most efficient (can be combined with above values).
Definition gdal_priv.h:1514
constexpr GDALSuggestedBlockAccessPattern GSBAP_BOTTOM_TO_TOP
Reading by strips from bottom to top is the most efficient.
Definition gdal_priv.h:1510
Core portability services for cross-platform OGR code.
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:407
@ wkbUnknown
unknown type, non-standard
Definition ogr_core.h:408
int OGRErr
Type for a OGR error.
Definition ogr_core.h:371
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition ogr_feature.h:1556
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:421
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:429
Document node structure.
Definition cpl_minixml.h:55
Color tuple.
Definition gdal.h:2059
Object returned by GetFeatures() iterators.
Definition gdal_priv.h:919
The GDALSubdatasetInfo abstract class provides methods to extract and manipulate subdataset informati...
Definition gdalsubdatasetinfo.h:27
Ground Control Point.
Definition gdal.h:1168
Virtual file handle.
Definition cpl_vsi_virtual.h:47