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;
381 void RasterInitialize(
int,
int );
384 GDALDefaultOverviews oOvManager{};
386 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
387 int,
int *, GDALProgressFunc,
void * );
398 void BlockBasedFlushCache();
401 int nXOff,
int nYOff,
int nXSize,
int nYSize,
402 void * pData,
int nBufXSize,
int nBufYSize,
404 int nBandCount,
int *panBandMap,
410 int nXOff,
int nYOff,
int nXSize,
int nYSize,
411 void * pData,
int nBufXSize,
int nBufYSize,
413 int nBandCount,
int *panBandMap,
418 CPLErr ValidateRasterIOOrAdviseReadParameters(
419 const char* pszCallingFunc,
420 int* pbStopProcessingOnCENone,
421 int nXOff,
int nYOff,
int nXSize,
int nYSize,
422 int nBufXSize,
int nBufYSize,
423 int nBandCount,
int *panBandMap);
426 int nXOff,
int nYOff,
int nXSize,
int nYSize,
427 void * pData,
int nBufXSize,
int nBufYSize,
429 int nBandCount,
int *panBandMap,
435 void ShareLockWithParentDataset(
GDALDataset* poParentDataset);
438 virtual int CloseDependentDatasets();
440 int ValidateLayerCreationOptions(
const char*
const* papszLCO );
442 char **papszOpenOptions =
nullptr;
449 void LeaveReadWrite();
452 void TemporarilyDropReadWriteLock();
453 void ReacquireReadWriteLock();
455 void DisableReadWriteMutex();
464 int GetRasterXSize();
465 int GetRasterYSize();
466 int GetRasterCount();
478 class CPL_DLL Iterator
481 std::unique_ptr<Private> m_poPrivate;
484 Iterator(
const Iterator& oOther);
485 Iterator(Iterator&& oOther) noexcept;
488 Iterator& operator++();
489 bool operator!=(
const Iterator& it)
const;
494 const Iterator
begin()
const;
496 const Iterator
end()
const;
506 virtual void FlushCache(
void);
512 const char *GetProjectionRef(
void)
const;
513 CPLErr SetProjection(
const char * pszProjection );
515 virtual CPLErr GetGeoTransform(
double * padfTransform );
516 virtual CPLErr SetGeoTransform(
double * padfTransform );
519 char **papszOptions=
nullptr );
521 virtual void *GetInternalHandle(
const char * pszHandleName );
523 virtual char **GetFileList(
void);
525 virtual const char* GetDriverName();
528 virtual int GetGCPCount();
530 virtual CPLErr SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
534 const char *GetGCPProjection();
536 const char *pszGCPProjection );
538 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
539 int nBufXSize,
int nBufYSize,
541 int nBandCount,
int *panBandList,
542 char **papszOptions );
544 virtual CPLErr CreateMaskBand(
int nFlagsIn );
547 BeginAsyncReader(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
548 void *pBuf,
int nBufXSize,
int nBufYSize,
550 int nBandCount,
int* panBandMap,
551 int nPixelSpace,
int nLineSpace,
int nBandSpace,
552 char **papszOptions);
556 struct RawBinaryLayout
558 enum class Interleaving
565 std::string osRawFilename{};
566 Interleaving eInterleaving = Interleaving::UNKNOWN;
568 bool bLittleEndianOrder =
false;
576 virtual bool GetRawBinaryLayout(RawBinaryLayout&);
584 OPTIONAL_OUTSIDE_GDAL(
nullptr)
597 int GetShared()
const;
608 static GDALDataset **GetOpenDatasets(
int *pnDatasetCount );
610 CPLErr BuildOverviews(
const char *,
int,
int *,
611 int,
int *, GDALProgressFunc,
void * );
616 static
void ReportError(const
char* pszDSName,
621 char ** GetMetadata(
const char * pszDomain =
"")
override;
626 const char * pszDomain )
override;
628 const char * pszValue,
629 const char * pszDomain )
override;
632 char **GetMetadataDomainList()
override;
634 virtual void ClearStatistics();
652 unsigned int nOpenFlags = 0,
653 const char*
const* papszAllowedDrivers =
nullptr,
654 const char*
const* papszOpenOptions =
nullptr,
655 const char*
const* papszSiblingFiles =
nullptr )
657 return FromHandle(
GDALOpenEx(pszFilename, nOpenFlags,
675 Private *m_poPrivate;
677 CPL_INTERNAL
OGRLayer* BuildLayerFromSelectInfo(swq_select* psSelectInfo,
679 const char *pszDialect,
680 swq_select_parse_options* poSelectParseOptions);
685 virtual int GetLayerCount();
686 virtual OGRLayer *GetLayer(
int iLayer);
707 std::unique_ptr<Private> m_poPrivate;
728 bool operator!=(
const Iterator& it)
const;
737 OGRLayer* operator[](
size_t iLayer);
738 OGRLayer* operator[](
const char* pszLayername);
743 virtual OGRLayer *GetLayerByName(
const char *);
744 virtual OGRErr DeleteLayer(
int iLayer);
746 virtual void ResetReading();
748 double* pdfProgressPct,
749 GDALProgressFunc pfnProgress,
750 void* pProgressData );
762 class CPL_DLL Iterator
765 std::unique_ptr<Private> m_poPrivate;
768 Iterator(
const Iterator& oOther);
769 Iterator(Iterator&& oOther) noexcept;
772 Iterator& operator++();
773 bool operator!=(
const Iterator& it)
const;
778 const Iterator
begin()
const;
780 const Iterator
end()
const;
785 virtual int TestCapability(
const char * );
787 virtual OGRLayer *CreateLayer(
const char *pszName,
790 char ** papszOptions =
nullptr );
792 const char *pszNewName,
793 char **papszOptions =
nullptr );
796 virtual void SetStyleTableDirectly(
OGRStyleTable *poStyleTable );
800 virtual OGRLayer * ExecuteSQL(
const char *pszStatement,
802 const char *pszDialect );
803 virtual void ReleaseResultSet(
OGRLayer * poResultsSet );
804 virtual OGRErr AbortSQL( );
806 int GetRefCount()
const;
807 int GetSummaryRefCount()
const;
810 virtual OGRErr StartTransaction(
int bForce=FALSE);
811 virtual OGRErr CommitTransaction();
812 virtual OGRErr RollbackTransaction();
814 virtual std::shared_ptr<GDALGroup> GetRootGroup()
const;
817 static int IsGenericSQLDialect(
const char* pszDialect);
820 GDALSQLParseInfo* BuildParseInfo(swq_select* psSelectInfo,
821 swq_select_parse_options* poSelectParseOptions);
822 static void DestroyParseInfo(GDALSQLParseInfo* psParseInfo );
823 OGRLayer * ExecuteSQL(
const char *pszStatement,
825 const char *pszDialect,
826 swq_select_parse_options* poSelectParseOptions);
830 virtual OGRLayer *ICreateLayer(
const char *pszName,
833 char ** papszOptions =
nullptr );
836 OGRErr ProcessSQLCreateIndex(
const char * );
837 OGRErr ProcessSQLDropIndex(
const char * );
838 OGRErr ProcessSQLDropTable(
const char * );
839 OGRErr ProcessSQLAlterTableAddColumn(
const char * );
840 OGRErr ProcessSQLAlterTableDropColumn(
const char * );
841 OGRErr ProcessSQLAlterTableAlterColumn(
const char * );
842 OGRErr ProcessSQLAlterTableRenameColumn(
const char * );
850 CPLErr OldSetGCPsFromNew(
int nGCPCount,
const GDAL_GCP *pasGCPList,
853 friend class GDALProxyPoolDataset;
854 virtual const char *_GetProjectionRef();
856 virtual const char *_GetGCPProjection();
858 virtual CPLErr _SetProjection(
const char * pszProjection );
859 virtual CPLErr _SetGCPs(
int nGCPCount,
const GDAL_GCP *pasGCPList,
860 const char *pszGCPProjection );
868 struct CPL_DLL GDALDatasetUniquePtrDeleter
892 friend class GDALAbstractBandBlockCache;
897 volatile int nLockCount;
914 CPL_INTERNAL
void Detach_unlocked(
void );
915 CPL_INTERNAL
void Touch_unlocked(
void );
917 CPL_INTERNAL
void RecycleFor(
int nXOffIn,
int nYOffIn );
924 CPLErr Internalize(
void );
926 void MarkDirty(
void );
927 void MarkClean(
void );
929 int AddLock(
void ) {
return CPLAtomicInc(&nLockCount); }
931 int DropLock(
void ) {
return CPLAtomicDec(&nLockCount); }
971 int DropLockForRemovalFromStorage();
977 static void FlushDirtyBlocks();
978 static int FlushCacheBlock(
int bDirtyBlocksOnly = FALSE);
979 static void Verify();
981 static void EnterDisableDirtyBlockFlush();
982 static void LeaveDisableDirtyBlockFlush();
987 static void DumpAll();
992 CPL_INTERNAL
static void DestroyRBMutex();
1009 std::vector<GDALColorEntry> aoEntries{};
1020 int GetColorEntryCount()
const;
1050 class GDALAbstractBandBlockCache
1053 CPLLock *hSpinLock =
nullptr;
1057 CPLCond *hCond =
nullptr;
1058 CPLMutex *hCondMutex =
nullptr;
1059 volatile int nKeepAliveCounter = 0;
1061 volatile int m_nDirtyBlocks = 0;
1068 int m_nInitialDirtyBlocksInFlushCache = 0;
1069 int m_nLastTick = -1;
1071 void FreeDanglingBlocks();
1072 void UnreferenceBlockBase();
1074 void StartDirtyBlockFlushingLog();
1075 void UpdateDirtyBlockFlushingLog();
1076 void EndDirtyBlockFlushingLog();
1080 virtual ~GDALAbstractBandBlockCache();
1084 void IncDirtyBlocks(
int nInc);
1085 void WaitCompletionPendingTasks();
1087 virtual bool Init() = 0;
1088 virtual bool IsInitOK() = 0;
1089 virtual CPLErr FlushCache() = 0;
1092 int nYBlockYOff ) = 0;
1094 virtual CPLErr FlushBlock(
int nXBlockOff,
int nYBlockOff,
1095 int bWriteDirtyBlock ) = 0;
1098 GDALAbstractBandBlockCache* GDALArrayBandBlockCacheCreate(
GDALRasterBand* poBand);
1099 GDALAbstractBandBlockCache* GDALHashSetBandBlockCacheCreate(
GDALRasterBand* poBand);
1114 friend class GDALArrayBandBlockCache;
1115 friend class GDALHashSetBandBlockCache;
1119 CPLErr eFlushBlockErr = CE_None;
1120 GDALAbstractBandBlockCache* poBandBlockCache =
nullptr;
1122 CPL_INTERNAL
void SetFlushBlockErr(
CPLErr eErr );
1124 CPL_INTERNAL
void SetValidPercent(
GUIntBig nSampleCount,
GUIntBig nValidCount );
1125 CPL_INTERNAL
void IncDirtyBlocks(
int nInc);
1132 int nRasterXSize = 0;
1133 int nRasterYSize = 0;
1139 int nBlockXSize = -1;
1140 int nBlockYSize = -1;
1141 int nBlocksPerRow = 0;
1142 int nBlocksPerColumn = 0;
1144 int nBlockReads = 0;
1145 int bForceCachedIO = 0;
1148 bool bOwnMask =
false;
1151 void InvalidateMaskBand();
1153 friend class GDALProxyRasterBand;
1154 friend class GDALDefaultOverviews;
1161 void LeaveReadWrite();
1167 virtual CPLErr IWriteBlock(
int nBlockXOff,
int nBlockYOff,
void * pData );
1173 virtual int IGetDataCoverageStatus(
int nXOff,
int nYOff,
1174 int nXSize,
int nYSize,
1176 double* pdfDataPct);
1183 int nXOff,
int nYOff,
int nXSize,
int nYSize,
1184 void * pData,
int nBufXSize,
int nBufYSize,
1190 int InitBlockInfo();
1195 GDALRasterBlock *TryGetLockedBlockRef(
int nXBlockOff,
int nYBlockYOff );
1209 void GetBlockSize(
int *,
int * );
1210 CPLErr GetActualBlockSize (
int,
int,
int *,
int * );
1216 #ifndef DOXYGEN_SKIP
1217 OPTIONAL_OUTSIDE_GDAL(
nullptr)
1226 CPLErr FlushBlock(
int,
int,
int bWriteDirtyBlock = TRUE );
1228 unsigned char* GetIndexColorTranslationTo(
GDALRasterBand* poReferenceBand,
1229 unsigned char* pTranslationTable =
nullptr,
1230 int* pApproximateMatching =
nullptr);
1234 virtual CPLErr FlushCache();
1235 virtual char **GetCategoryNames();
1236 virtual double GetNoDataValue(
int *pbSuccess =
nullptr );
1237 virtual double GetMinimum(
int *pbSuccess =
nullptr );
1238 virtual double GetMaximum(
int *pbSuccess =
nullptr );
1239 virtual double GetOffset(
int *pbSuccess =
nullptr );
1240 virtual double GetScale(
int *pbSuccess =
nullptr );
1241 virtual const char *GetUnitType();
1244 virtual CPLErr Fill(
double dfRealValue,
double dfImaginaryValue = 0);
1246 virtual CPLErr SetCategoryNames(
char ** papszNames );
1247 virtual CPLErr SetNoDataValue(
double dfNoData );
1248 virtual CPLErr DeleteNoDataValue();
1251 virtual CPLErr SetOffset(
double dfNewOffset );
1252 virtual CPLErr SetScale(
double dfNewScale );
1253 virtual CPLErr SetUnitType(
const char * pszNewValue );
1255 virtual CPLErr GetStatistics(
int bApproxOK,
int bForce,
1256 double *pdfMin,
double *pdfMax,
1257 double *pdfMean,
double *padfStdDev );
1258 virtual CPLErr ComputeStatistics(
int bApproxOK,
1259 double *pdfMin,
double *pdfMax,
1260 double *pdfMean,
double *pdfStdDev,
1261 GDALProgressFunc,
void *pProgressData );
1262 virtual CPLErr SetStatistics(
double dfMin,
double dfMax,
1263 double dfMean,
double dfStdDev );
1264 virtual CPLErr ComputeRasterMinMax(
int,
double* );
1269 const char * pszDomain )
override;
1271 const char * pszValue,
1272 const char * pszDomain )
override;
1275 virtual int HasArbitraryOverviews();
1276 virtual int GetOverviewCount();
1279 virtual CPLErr BuildOverviews(
const char * pszResampling,
1281 int * panOverviewList,
1282 GDALProgressFunc pfnProgress,
1283 void * pProgressData );
1285 virtual CPLErr AdviseRead(
int nXOff,
int nYOff,
int nXSize,
int nYSize,
1286 int nBufXSize,
int nBufYSize,
1289 virtual CPLErr GetHistogram(
double dfMin,
double dfMax,
1290 int nBuckets,
GUIntBig * panHistogram,
1291 int bIncludeOutOfRange,
int bApproxOK,
1292 GDALProgressFunc,
void *pProgressData );
1294 virtual CPLErr GetDefaultHistogram(
double *pdfMin,
double *pdfMax,
1295 int *pnBuckets,
GUIntBig ** ppanHistogram,
1297 GDALProgressFunc,
void *pProgressData);
1298 virtual CPLErr SetDefaultHistogram(
double dfMin,
double dfMax,
1299 int nBuckets,
GUIntBig *panHistogram );
1305 virtual int GetMaskFlags();
1306 virtual CPLErr CreateMaskBand(
int nFlagsIn );
1313 int GetDataCoverageStatus(
int nXOff,
int nYOff,
1314 int nXSize,
int nYSize,
1315 int nMaskFlagStop = 0,
1316 double* pdfDataPct =
nullptr );
1318 std::shared_ptr<GDALMDArray> AsMDArray()
const;
1348 CPLErr IReadBlock(
int,
int,
void * )
override;
1354 ~GDALAllValidMaskBand()
override;
1357 int GetMaskFlags()
override;
1359 CPLErr ComputeStatistics(
int bApproxOK,
1360 double *pdfMin,
double *pdfMax,
1361 double *pdfMean,
double *pdfStdDev,
1362 GDALProgressFunc,
void *pProgressData )
override;
1372 double dfNoDataValue;
1378 CPLErr IReadBlock(
int,
int,
void * )
override;
1385 ~GDALNoDataMaskBand()
override;
1387 static bool IsNoDataInRange(
double dfNoDataValue,
1397 double *padfNodataValues;
1402 CPLErr IReadBlock(
int,
int,
void * )
override;
1405 explicit GDALNoDataValuesMaskBand(
GDALDataset * );
1406 ~GDALNoDataValuesMaskBand()
override;
1429 ~GDALRescaledAlphaBand()
override;
1473 CPLErr SetMetadataItem(
const char * pszName,
1474 const char * pszValue,
1475 const char * pszDomain =
"" )
override;
1481 int nXSize,
int nYSize,
int nBands,
1484 GDALDataset *CreateMultiDimensional(
const char * pszName,
1488 CPLErr Delete(
const char * pszName );
1489 CPLErr Rename(
const char * pszNewName,
1490 const char * pszOldName );
1491 CPLErr CopyFiles(
const char * pszNewName,
1492 const char * pszOldName );
1496 GDALProgressFunc pfnProgress,
1508 int nXSize,
int nYSize,
int nBands,
1510 char ** papszOptions );
1513 int nXSize,
int nYSize,
int nBands,
1515 char ** papszOptions );
1517 GDALDataset *(*pfnCreateMultiDimensional)(
const char * pszName,
1521 CPLErr (*pfnDelete)(
const char * pszName );
1525 GDALProgressFunc pfnProgress,
1526 void * pProgressData );
1542 CPLErr (*pfnRename)(
const char * pszNewName,
1543 const char * pszOldName );
1544 CPLErr (*pfnCopyFiles)(
const char * pszNewName,
1545 const char * pszOldName );
1552 const char * pszName,
1553 char ** papszOptions );
1555 const char * pszName );
1564 GDALProgressFunc pfnProgress,
1567 static CPLErr DefaultCreateCopyMultiDimensional(
1572 GDALProgressFunc pfnProgress,
1573 void * pProgressData );
1582 GDALProgressFunc pfnProgress,
1583 void * pProgressData );
1585 static CPLErr QuietDelete(
const char * pszName,
1586 const char *
const *papszAllowedDrivers =
nullptr);
1589 static CPLErr DefaultRename(
const char * pszNewName,
1590 const char * pszOldName );
1591 static CPLErr DefaultCopyFiles(
const char * pszNewName,
1592 const char * pszOldName );
1605 {
return static_cast<GDALDriver*
>(hDriver); }
1626 std::map<CPLString, GDALDriver*> oMapNameToDrivers{};
1628 GDALDriver *GetDriver_unlocked(
int iDriver )
1629 {
return (iDriver >= 0 && iDriver < nDrivers) ?
1630 papoDrivers[iDriver] :
nullptr; }
1632 GDALDriver *GetDriverByName_unlocked(
const char * pszName )
1635 static char** GetSearchPaths(
const char* pszGDAL_DRIVER_PATH);
1637 static void CleanupPythonDrivers();
1645 int GetDriverCount(
void )
const;
1653 static void AutoLoadDrivers();
1654 void AutoSkipDrivers();
1656 static void AutoLoadPythonDrivers();
1758 int* pnBufXOff,
int* pnBufYOff,
1759 int* pnBufXSize,
int* pnBufYSize) = 0;
1760 virtual int LockBuffer(
double dfTimeout = -1.0 );
1761 virtual void UnlockBuffer();
1796 std::vector<std::unique_ptr<GDALEDTComponent>>&& components);
1807 const std::string&
GetName()
const {
return m_osName; }
1825 const std::vector<std::unique_ptr<GDALEDTComponent>>&
GetComponents()
const {
return m_aoComponents; }
1843 bool NeedsFreeDynamicMemory()
const;
1845 void FreeDynamicMemory(
void* pBuffer)
const;
1856 std::vector<std::unique_ptr<GDALEDTComponent>>&& components);
1858 std::string m_osName{};
1861 std::vector<std::unique_ptr<GDALEDTComponent>> m_aoComponents{};
1863 size_t m_nMaxStringLength = 0;
1888 const std::string&
GetName()
const {
return m_osName; }
1903 std::string m_osName;
1920 std::shared_ptr<GDALAttribute> GetAttributeFromAttributes(
const std::string& osName)
const;
1925 virtual std::shared_ptr<GDALAttribute> GetAttribute(
const std::string& osName)
const;
1927 virtual std::vector<std::shared_ptr<GDALAttribute>> GetAttributes(
CSLConstList papszOptions =
nullptr)
const;
1929 virtual std::shared_ptr<GDALAttribute> CreateAttribute(
1930 const std::string& osName,
1931 const std::vector<GUInt64>& anDimensions,
1952 std::string m_osName{};
1953 std::string m_osFullName{};
1955 GDALGroup(
const std::string& osParentName,
const std::string& osName);
1957 const GDALGroup* GetInnerMostGroup(
const std::string& osPathOrArrayOrDim,
1958 std::shared_ptr<GDALGroup>& curGroupHolder,
1959 std::string& osLastPart)
const;
1969 const std::string&
GetName()
const {
return m_osName; }
1977 virtual std::vector<std::string> GetMDArrayNames(
CSLConstList papszOptions =
nullptr)
const;
1978 virtual std::shared_ptr<GDALMDArray> OpenMDArray(
const std::string& osName,
1981 virtual std::vector<std::string> GetGroupNames(
CSLConstList papszOptions =
nullptr)
const;
1982 virtual std::shared_ptr<GDALGroup> OpenGroup(
const std::string& osName,
1985 virtual std::vector<std::shared_ptr<GDALDimension>> GetDimensions(
CSLConstList papszOptions =
nullptr)
const;
1987 virtual std::shared_ptr<GDALGroup> CreateGroup(
const std::string& osName,
1990 virtual std::shared_ptr<GDALDimension> CreateDimension(
const std::string& osName,
1991 const std::string& osType,
1992 const std::string& osDirection,
1996 virtual std::shared_ptr<GDALMDArray> CreateMDArray(
const std::string& osName,
1997 const std::vector<std::shared_ptr<GDALDimension>>& aoDimensions,
2001 GUInt64 GetTotalCopyCost()
const;
2003 virtual bool CopyFrom(
const std::shared_ptr<GDALGroup>& poDstRootGroup,
2005 const std::shared_ptr<GDALGroup>& poSrcGroup,
2009 GDALProgressFunc pfnProgress,
2010 void * pProgressData);
2014 std::shared_ptr<GDALMDArray> OpenMDArrayFromFullname(
2015 const std::string& osFullName,
2018 std::shared_ptr<GDALMDArray> ResolveMDArray(
const std::string& osName,
2019 const std::string& osStartingPath,
2022 std::shared_ptr<GDALGroup> OpenGroupFromFullname(
2023 const std::string& osFullName,
2026 std::shared_ptr<GDALDimension> OpenDimensionFromFullname(
2027 const std::string& osFullName)
const;
2030 static constexpr
GUInt64 COPY_COST = 1000;
2047 std::string m_osName{};
2048 std::string m_osFullName{};
2049 std::weak_ptr<GDALAbstractMDArray> m_pSelf{};
2053 void SetSelf(std::weak_ptr<GDALAbstractMDArray>
self) { m_pSelf =
self; }
2055 bool CheckReadWriteParams(
const GUInt64* arrayStartIdx,
2056 const size_t* count,
2057 const GInt64*& arrayStep,
2061 const void* buffer_alloc_start,
2062 size_t buffer_alloc_size,
2063 std::vector<GInt64>& tmp_arrayStep,
2064 std::vector<GPtrDiff_t>& tmp_bufferStride)
const;
2066 virtual bool IRead(
const GUInt64* arrayStartIdx,
2067 const size_t* count,
2071 void* pDstBuffer)
const = 0;
2073 virtual bool IWrite(
const GUInt64* arrayStartIdx,
2074 const size_t* count,
2078 const void* pSrcBuffer);
2088 const std::string&
GetName()
const{
return m_osName; }
2096 GUInt64 GetTotalElementsCount()
const;
2098 virtual size_t GetDimensionCount()
const;
2100 virtual const std::vector<std::shared_ptr<GDALDimension>>&
GetDimensions()
const = 0;
2104 virtual std::vector<GUInt64> GetBlockSize()
const;
2106 virtual std::vector<size_t> GetProcessingChunkSize(
size_t nMaxChunkMemory)
const;
2123 typedef bool (*FuncProcessPerChunkType)(
2125 const GUInt64* chunkArrayStartIdx,
2126 const size_t* chunkCount,
2131 virtual bool ProcessPerChunk(
const GUInt64* arrayStartIdx,
2133 const size_t* chunkSize,
2134 FuncProcessPerChunkType pfnFunc,
2137 bool Read(
const GUInt64* arrayStartIdx,
2138 const size_t* count,
2143 const void* pDstBufferAllocStart =
nullptr,
2144 size_t nDstBufferAllocSize = 0)
const;
2146 bool Write(
const GUInt64* arrayStartIdx,
2147 const size_t* count,
2151 const void* pSrcBuffer,
2152 const void* pSrcBufferAllocStart =
nullptr,
2153 size_t nSrcBufferAllocSize = 0);
2197 size_t size()
const {
return m_nSize; }
2221 mutable std::string m_osCachedVal{};
2225 GDALAttribute(
const std::string& osParentName,
const std::string& osName);
2230 std::vector<GUInt64> GetDimensionsSize()
const;
2233 const char* ReadAsString()
const;
2234 int ReadAsInt()
const;
2235 double ReadAsDouble()
const;
2237 std::vector<int> ReadAsIntArray()
const;
2238 std::vector<double> ReadAsDoubleArray()
const;
2241 bool Write(
const void* pabyValue,
size_t nLen);
2242 bool Write(
const char*);
2246 bool Write(
const double*,
size_t);
2249 static constexpr
GUInt64 COPY_COST = 100;
2259 class CPL_DLL GDALAttributeString final:
public GDALAttribute
2261 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
2263 std::string m_osValue;
2272 void* pDstBuffer)
const override;
2275 GDALAttributeString(
const std::string& osParentName,
2276 const std::string& osName,
2277 const std::string& osValue);
2279 const std::vector<std::shared_ptr<GDALDimension>>& GetDimensions()
const override;
2290 class CPL_DLL GDALAttributeNumeric final:
public GDALAttribute
2292 std::vector<std::shared_ptr<GDALDimension>> m_dims{};
2295 double m_dfValue = 0;
2296 std::vector<GUInt32> m_anValuesUInt32{};
2305 void* pDstBuffer)
const override;
2308 GDALAttributeNumeric(
const std::string& osParentName,
2309 const std::string& osName,
2311 GDALAttributeNumeric(
const std::string& osParentName,
2312 const std::string& osName,
2314 GDALAttributeNumeric(
const std::string& osParentName,
2315 const std::string& osName,
2316 const std::vector<GUInt32>& anValues);
2318 const std::vector<std::shared_ptr<GDALDimension>>& GetDimensions()
const override;
2338 std::shared_ptr<GDALMDArray> GetView(
const std::vector<GUInt64>& indices)
const;
2340 inline std::shared_ptr<GDALMDArray> atInternal(std::vector<GUInt64>& indices)
const
2342 return GetView(indices);
2345 template<
typename... GUInt64VarArg>
2347 inline std::shared_ptr<GDALMDArray> atInternal(std::vector<GUInt64>& indices,
2348 GUInt64 idx, GUInt64VarArg... tail)
const
2350 indices.push_back(idx);
2351 return atInternal(indices, tail...);
2356 double dfMin,
double dfMax,
2357 double dfMean,
double dfStdDev,
2362 GDALMDArray(
const std::string& osParentName,
const std::string& osName);
2364 virtual bool IAdviseRead(
const GUInt64* arrayStartIdx,
2365 const size_t* count)
const;
2371 GUInt64 GetTotalCopyCost()
const;
2378 GDALProgressFunc pfnProgress,
2379 void * pProgressData);
2386 virtual const std::string& GetUnit()
const;
2388 virtual bool SetUnit(
const std::string& osUnit);
2392 virtual std::shared_ptr<OGRSpatialReference> GetSpatialRef()
const;
2394 virtual const void* GetRawNoDataValue()
const;
2396 double GetNoDataValueAsDouble(
bool* pbHasNoData =
nullptr)
const;
2398 virtual bool SetRawNoDataValue(
const void* pRawNoData);
2400 bool SetNoDataValue(
double dfNoData);
2402 virtual double GetOffset(
bool* pbHasOffset =
nullptr)
const;
2404 virtual double GetScale(
bool* pbHasScale =
nullptr)
const;
2406 virtual bool SetOffset(
double dfOffset);
2408 virtual bool SetScale(
double dfScale);
2410 std::shared_ptr<GDALMDArray> GetView(
const std::string& viewExpr)
const;
2412 std::shared_ptr<GDALMDArray> operator[](
const std::string& fieldName)
const;
2423 template<
typename... GUInt64VarArg>
2425 std::shared_ptr<GDALMDArray>
at(
GUInt64 idx, GUInt64VarArg... tail)
const
2427 std::vector<GUInt64> indices;
2428 indices.push_back(idx);
2429 return atInternal(indices, tail...);
2432 virtual std::shared_ptr<GDALMDArray> Transpose(
const std::vector<int>& anMapNewAxisToOldAxis)
const;
2434 std::shared_ptr<GDALMDArray> GetUnscaled()
const;
2436 virtual std::shared_ptr<GDALMDArray> GetMask(
CSLConstList papszOptions)
const;
2438 virtual GDALDataset* AsClassicDataset(
size_t iXDim,
size_t iYDim)
const;
2441 bool bApproxOK,
bool bForce,
2442 double *pdfMin,
double *pdfMax,
2443 double *pdfMean,
double *padfStdDev,
2445 GDALProgressFunc pfnProgress,
void *pProgressData );
2447 virtual bool ComputeStatistics(
GDALDataset* poDS,
2449 double *pdfMin,
double *pdfMax,
2450 double *pdfMean,
double *pdfStdDev,
2452 GDALProgressFunc,
void *pProgressData );
2454 bool AdviseRead(
const GUInt64* arrayStartIdx,
2455 const size_t* count)
const;
2458 static constexpr
GUInt64 COPY_COST = 1000;
2460 bool CopyFromAllExceptValues(
const GDALMDArray* poSrcArray,
2464 GDALProgressFunc pfnProgress,
2465 void * pProgressData);
2471 m_nStartIdx(nStartIdx), m_nIncr(nIncr) {}
2476 std::string m_osFieldName{};
2480 std::vector<size_t> m_mapDimIdxToParentDimIdx{};
2481 std::vector<Range> m_parentRanges{} ;
2484 virtual std::shared_ptr<GDALMDArray> GetView(
const std::string& viewExpr,
2485 bool bRenameDimensions,
2486 std::vector<ViewSpec>& viewSpecs)
const;
2496 class CPL_DLL GDALMDArrayRegularlySpaced:
public GDALMDArray
2499 double m_dfIncrement;
2500 double m_dfOffsetInIncrement;
2502 std::vector<std::shared_ptr<GDALDimension>> m_dims;
2503 std::vector<std::shared_ptr<GDALAttribute>> m_attributes{};
2512 void* pDstBuffer)
const override;
2515 GDALMDArrayRegularlySpaced(
2516 const std::string& osParentName,
2517 const std::string& osName,
2518 const std::shared_ptr<GDALDimension>& poDim,
2519 double dfStart,
double dfIncrement,
2520 double dfOffsetInIncrement);
2522 bool IsWritable()
const override {
return false; }
2524 const std::vector<std::shared_ptr<GDALDimension>>& GetDimensions()
const override;
2528 std::vector<std::shared_ptr<GDALAttribute>> GetAttributes(
CSLConstList)
const override;
2530 void AddAttribute(
const std::shared_ptr<GDALAttribute>& poAttr);
2554 const std::string& osName,
2555 const std::string& osType,
2556 const std::string& osDirection,
2566 const std::string&
GetName()
const {
return m_osName; }
2582 const std::string&
GetType()
const {
return m_osType; }
2600 virtual std::shared_ptr<GDALMDArray> GetIndexingVariable()
const;
2602 virtual bool SetIndexingVariable(std::shared_ptr<GDALMDArray> poIndexingVariable);
2606 std::string m_osName;
2607 std::string m_osFullName;
2608 std::string m_osType;
2609 std::string m_osDirection;
2620 class CPL_DLL GDALDimensionWeakIndexingVar:
public GDALDimension
2622 std::weak_ptr<GDALMDArray> m_poIndexingVariable{};
2625 GDALDimensionWeakIndexingVar(
const std::string& osParentName,
2626 const std::string& osName,
2627 const std::string& osType,
2628 const std::string& osDirection,
2631 std::shared_ptr<GDALMDArray> GetIndexingVariable()
const override;
2633 bool SetIndexingVariable(std::shared_ptr<GDALMDArray> poIndexingVariable)
override;
2644 GDALRegenerateOverviewsMultiBand(
int nBands,
GDALRasterBand** papoSrcBands,
2647 const char * pszResampling,
2648 GDALProgressFunc pfnProgress,
void * pProgressData );
2650 typedef CPLErr (*GDALResampleFunction)
2651 (
double dfXRatioDstToSrc,
2652 double dfYRatioDstToSrc,
2656 const void * pChunk,
2657 const GByte * pabyChunkNodataMask,
2658 int nChunkXOff,
int nChunkXSize,
2659 int nChunkYOff,
int nChunkYSize,
2660 int nDstXOff,
int nDstXOff2,
2661 int nDstYOff,
int nDstYOff2,
2665 const char * pszResampling,
2666 int bHasNoData,
float fNoDataValue,
2669 bool bPropagateNoData );
2671 GDALResampleFunction GDALGetResampleFunction(
const char* pszResampling,
2674 GDALDataType GDALGetOvrWorkDataType(
const char* pszResampling,
2680 HFAAuxBuildOverviews(
const char *pszOvrFilename,
GDALDataset *poParentDS,
2682 int nBands,
int *panBandList,
2683 int nNewOverviews,
int *panNewOverviewList,
2684 const char *pszResampling,
2685 GDALProgressFunc pfnProgress,
2686 void *pProgressData );
2689 GTIFFBuildOverviews(
const char * pszFilename,
2691 int nOverviews,
int * panOverviewList,
2692 const char * pszResampling,
2693 GDALProgressFunc pfnProgress,
void * pProgressData );
2696 int &nXOff,
int &nYOff,
2697 int &nXSize,
int &nYSize,
2698 int nBufXSize,
int nBufYSize) CPL_WARN_DEPRECATED(
"Use GDALBandGetBestOverviewLevel2 instead");
2699 int CPL_DLL GDALBandGetBestOverviewLevel2(
GDALRasterBand* poBand,
2700 int &nXOff,
int &nYOff,
2701 int &nXSize,
int &nYSize,
2702 int nBufXSize,
int nBufYSize,
2705 int CPL_DLL GDALOvLevelAdjust(
int nOvLevel,
int nXSize ) CPL_WARN_DEPRECATED(
"Use GDALOvLevelAdjust2 instead");
2706 int CPL_DLL GDALOvLevelAdjust2(
int nOvLevel,
int nXSize,
int nYSize );
2707 int CPL_DLL GDALComputeOvFactor(
int nOvrXSize,
int nRasterXSize,
2708 int nOvrYSize,
int nRasterYSize );
2711 GDALFindAssociatedAuxFile(
const char *pszBasefile,
GDALAccess eAccess,
2718 int CPL_DLL GDALCheckDatasetDimensions(
int nXSize,
int nYSize );
2719 int CPL_DLL GDALCheckBandCount(
int nBands,
int bIsZeroAllowed );
2724 int CPL_DLL GDALReadWorldFile2(
const char *pszBaseFilename,
const char *pszExtension,
2725 double *padfGeoTransform,
char** papszSiblingFiles,
2726 char** ppszWorldFileNameOut);
2727 int GDALReadTabFile2(
const char * pszBaseFilename,
2728 double *padfGeoTransform,
char **ppszWKT,
2729 int *pnGCPCount,
GDAL_GCP **ppasGCPs,
2730 char** papszSiblingFiles,
char** ppszTabFileNameOut );
2737 void GDALNullifyOpenDatasetsList();
2738 CPLMutex** GDALGetphDMMutex();
2739 CPLMutex** GDALGetphDLMutex();
2740 void GDALNullifyProxyPoolSingleton();
2741 void GDALSetResponsiblePIDForCurrentThread(
GIntBig responsiblePID);
2742 GIntBig GDALGetResponsiblePIDForCurrentThread();
2744 CPLString GDALFindAssociatedFile(
const char *pszBasename,
const char *pszExt,
2747 CPLErr CPL_DLL EXIFExtractMetadata(
char**& papszMetadata,
2748 void *fpL,
int nOffset,
2749 int bSwabflag,
int nTIFFHEADER,
2750 int& nExifOffset,
int& nInterOffset,
int& nGPSOffset);
2753 const char*
const* papszOptionOptions);
2754 int GDALValidateOptions(
const char* pszOptionList,
2755 const char*
const* papszOptionsToValidate,
2756 const char* pszErrorMessageOptionType,
2757 const char* pszErrorMessageContainerName);
2763 int nXSize,
int nYSize,
2764 int nBufXSize,
int nBufYSize);
2768 int bThisLevelOnly);
2773 template<
class T>
inline bool ARE_REAL_EQUAL(T fVal1, T fVal2,
int ulp = 2)
2775 return fVal1 == fVal2 ||
2776 std::abs(fVal1 - fVal2) < std::numeric_limits<float>::epsilon() * std::abs(fVal1+fVal2) * ulp;
2779 double GDALAdjustNoDataCloseToFloatMax(
double dfVal);
2781 #define DIV_ROUND_UP(a, b) ( ((a) % (b)) == 0 ? ((a) / (b)) : (((a) / (b)) + 1) )
2785 #define GDALSTAT_APPROX_NUMSAMPLES 2500
2787 void GDALSerializeGCPListToXML(
CPLXMLNode* psParentNode,
2791 void GDALDeserializeGCPListFromXML(
CPLXMLNode* psGCPList,
2796 void GDALSerializeOpenOptionsToXML(
CPLXMLNode* psParentNode,
char** papszOpenOptions);
2797 char** GDALDeserializeOpenOptionsFromXML(
CPLXMLNode* psParentNode );
2799 int GDALCanFileAcceptSidecarFile(
const char* pszFilename);
2801 bool GDALCanReliablyUseSiblingFileList(
const char* pszFilename);
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:442
Convenient string class based on std::string.
Definition: cpl_string.h:333
CPLString & toupper(void)
Convert to upper case in place.
Definition: cplstring.cpp:316
Abstract class, implemented by GDALAttribute and GDALMDArray.
Definition: gdal_priv.h:2044
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 & GetFullName() const
Return the name of an array or attribute.
Definition: gdal_priv.h:2094
const std::string & GetName() const
Return the name of an array or attribute.
Definition: gdal_priv.h:2088
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:1454
Class used as a session object for asynchronous requests.
Definition: gdal_priv.h:1673
void * GetBuffer()
Return buffer.
Definition: gdal_priv.h:1722
int GetXOffset() const
Return x offset.
Definition: gdal_priv.h:1706
int GetYOffset() const
Return y offset.
Definition: gdal_priv.h:1710
int GetYSize() const
Return height.
Definition: gdal_priv.h:1718
int GetBandCount() const
Return band count.
Definition: gdal_priv.h:1738
GDALDataType GetBufferType() const
Return buffer data type.
Definition: gdal_priv.h:1734
int GetBandSpace() const
Return band spacing.
Definition: gdal_priv.h:1754
int GetBufferYSize() const
Return buffer height.
Definition: gdal_priv.h:1730
int GetXSize() const
Return width.
Definition: gdal_priv.h:1714
GDALDataset * GetGDALDataset()
Return dataset.
Definition: gdal_priv.h:1702
virtual GDALAsyncStatusType GetNextUpdatedRegion(double dfTimeout, int *pnBufXOff, int *pnBufYOff, int *pnBufXSize, int *pnBufYSize)=0
Get async IO update.
int GetPixelSpace() const
Return pixel spacing.
Definition: gdal_priv.h:1746
int * GetBandMap()
Return band map.
Definition: gdal_priv.h:1742
int GetLineSpace() const
Return line spacing.
Definition: gdal_priv.h:1750
int GetBufferXSize() const
Return buffer width.
Definition: gdal_priv.h:1726
Class modeling an attribute that has a name, a value and a type, and is typically used to describe a ...
Definition: gdal_priv.h:2220
A color table / palette.
Definition: gdal_priv.h:1006
static GDALColorTableH ToHandle(GDALColorTable *poCT)
Convert a GDALColorTable* to a GDALRasterBandH.
Definition: gdal_priv.h:1030
static GDALColorTable * FromHandle(GDALColorTableH hCT)
Convert a GDALColorTableH to a GDALColorTable*.
Definition: gdal_priv.h:1036
~GDALColorTable()
Destructor.
Class returned by GetBands() that act as a container for raster bands.
Definition: gdal_priv.h:471
Class returned by GetFeatures() that act as a container for vector features.
Definition: gdal_priv.h:755
Layer iterator.
Definition: gdal_priv.h:705
void pointer
pointer
Definition: gdal_priv.h:713
void difference_type
difference_type
Definition: gdal_priv.h:712
std::input_iterator_tag iterator_category
iterator_category
Definition: gdal_priv.h:714
Class returned by GetLayers() that acts as a range of layers.
Definition: gdal_priv.h:692
A set of associated raster bands, usually from one file.
Definition: gdal_priv.h:340
virtual int CloseDependentDatasets()
Drop references to any other datasets referenced by this dataset.
Definition: gdaldataset.cpp:4043
static GDALDataset * FromHandle(GDALDatasetH hDS)
Convert a GDALDatasetH to a GDALDataset*.
Definition: gdal_priv.h:645
CPLErr BuildOverviews(const char *, int, int *, int, int *, GDALProgressFunc, void *)
Build raster overview(s)
Definition: gdaldataset.cpp:1929
virtual CPLErr CreateMaskBand(int nFlagsIn)
Adds a mask band to the dataset.
Definition: gdaldataset.cpp:3054
void MarkSuppressOnClose()
Set that the dataset must be deleted on close.
Definition: gdal_priv.h:601
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:651
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
char ** GetOpenOptions()
Return open options.
Definition: gdal_priv.h:606
CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain) override
Set single metadata item.
static GDALDatasetH ToHandle(GDALDataset *poDS)
Convert a GDALDataset* to a GDALDatasetH.
Definition: gdal_priv.h:639
GDALAccess GetAccess() const
Return access mode.
Definition: gdal_priv.h:595
Class modeling a a dimension / axis used to index multidimensional arrays.
Definition: gdal_priv.h:2550
const std::string & GetName() const
Return the name.
Definition: gdal_priv.h:2566
const std::string & GetType() const
Return the axis type.
Definition: gdal_priv.h:2582
const std::string & GetDirection() const
Return the axis direction.
Definition: gdal_priv.h:2592
GUInt64 GetSize() const
Return the size, that is the number of values along the dimension.
Definition: gdal_priv.h:2598
const std::string & GetFullName() const
Return the full name.
Definition: gdal_priv.h:2572
Class for managing the registration of file format drivers.
Definition: gdal_priv.h:1623
Format specific driver.
Definition: gdal_priv.h:1468
static GDALDriver * FromHandle(GDALDriverH hDriver)
Convert a GDALDriverH to a GDALDriver*.
Definition: gdal_priv.h:1604
static GDALDriverH ToHandle(GDALDriver *poDriver)
Convert a GDALDriver* to a GDALDriverH.
Definition: gdal_priv.h:1598
Class for a component of a compound extended data type.
Definition: gdal_priv.h:1876
const std::string & GetName() const
Return the name.
Definition: gdal_priv.h:1888
size_t GetOffset() const
Return the offset (in bytes) of the component in the compound data type.
Definition: gdal_priv.h:1894
const GDALExtendedDataType & GetType() const
Return the data type of the component.
Definition: gdal_priv.h:1900
GDALEDTComponent(const GDALEDTComponent &)
Copy constructor.
Class used to represent potentially complex data types.
Definition: gdal_priv.h:1785
size_t GetSize() const
Return data type size in bytes.
Definition: gdal_priv.h:1833
size_t GetMaxStringLength() const
Return the maximum length of a string in bytes.
Definition: gdal_priv.h:1839
static GDALExtendedDataType Create(GDALDataType eType)
Return a new GDALExtendedDataType of class GEDTC_NUMERIC.
Definition: gdalmultidim.cpp:5938
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:1825
GDALDataType GetNumericDataType() const
Return numeric data type (only valid when GetClass() == GEDTC_NUMERIC)
Definition: gdal_priv.h:1819
GDALExtendedDataTypeClass GetClass() const
Return type class.
Definition: gdal_priv.h:1813
const std::string & GetName() const
Return type name.
Definition: gdal_priv.h:1807
static GDALExtendedDataType CreateString(size_t nMaxStringLength=0)
Return a new GDALExtendedDataType of class GEDTC_STRING.
Definition: gdalmultidim.cpp:6001
Class modeling a named container of GDALAttribute, GDALMDArray or other GDALGroup.
Definition: gdal_priv.h:1949
const std::string & GetName() const
Return the name of the group.
Definition: gdal_priv.h:1969
const std::string & GetFullName() const
Return the full name of the group.
Definition: gdal_priv.h:1975
Interface used to get a single GDALAttribute or a set of GDALAttribute.
Definition: gdal_priv.h:1918
Class modeling a multi-dimensional array.
Definition: gdal_priv.h:2337
virtual bool IsWritable() const =0
Return whether an array is writable;.
std::shared_ptr< GDALMDArray > at(GUInt64 idx, GUInt64VarArg... tail) const
Return a view of the array using integer indexing.
Definition: gdal_priv.h:2425
Object with metadata.
Definition: gdal_priv.h:136
static GDALMajorObjectH ToHandle(GDALMajorObject *poMajorObject)
Convert a GDALMajorObject* to a GDALMajorObjectH.
Definition: gdal_priv.h:171
static GDALMajorObject * FromHandle(GDALMajorObjectH hMajorObject)
Convert a GDALMajorObjectH to a GDALMajorObject*.
Definition: gdal_priv.h:177
Class for dataset open functions.
Definition: gdal_priv.h:269
int bStatOK
Whether stat()'ing the file was successful.
Definition: gdal_priv.h:290
GByte * pabyHeader
Buffer with first bytes of the file.
Definition: gdal_priv.h:300
int bIsDirectory
Whether the file is a directory.
Definition: gdal_priv.h:292
char ** papszOpenOptions
Open options.
Definition: gdal_priv.h:282
GDALAccess eAccess
Access flag.
Definition: gdal_priv.h:285
int nOpenFlags
Open flags.
Definition: gdal_priv.h:287
VSILFILE * fpL
Pointer to the file.
Definition: gdal_priv.h:295
char * pszFilename
Filename.
Definition: gdal_priv.h:280
int nHeaderBytes
Number of bytes in pabyHeader.
Definition: gdal_priv.h:298
const char *const * papszAllowedDrivers
Allowed drivers (NULL for all)
Definition: gdal_priv.h:303
The GDALRasterAttributeTable (or RAT) class is used to encapsulate a table used to provide attribute ...
Definition: gdal_rat.h:48
A single raster band (or channel).
Definition: gdal_priv.h:1112
void static GDALRasterBandH ToHandle(GDALRasterBand *poBand)
Convert a GDALRasterBand* to a GDALRasterBandH.
Definition: gdal_priv.h:1327
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:68
CPLErr SetMetadata(char **papszMetadata, const char *pszDomain) override
Set metadata.
virtual CPLErr IReadBlock(int nBlockXOff, int nBlockYOff, void *pData)=0
Read a block of data.
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:1333
A single raster block in the block cache.
Definition: gdal_priv.h:891
int GetDirty() const
Return the dirty flag.
Definition: gdal_priv.h:959
int GetXSize() const
Return the width of the block.
Definition: gdal_priv.h:951
GPtrDiff_t GetBlockSize() const
Return the block size in bytes.
Definition: gdal_priv.h:967
int GetYSize() const
Return the height of the block.
Definition: gdal_priv.h:955
GDALDataType GetDataType() const
Return the data type.
Definition: gdal_priv.h:939
int GetXOff() const
Return the x offset of the top-left corner of the block.
Definition: gdal_priv.h:943
int AddLock(void)
Increment the lock count.
Definition: gdal_priv.h:929
GDALRasterBand * GetBand()
Accessor to source GDALRasterBand object.
Definition: gdal_priv.h:975
int GetYOff() const
Return the y offset of the top-left corner of the block.
Definition: gdal_priv.h:947
int DropLock(void)
Decrement the lock count.
Definition: gdal_priv.h:931
void * GetDataRef(void)
Return the data buffer.
Definition: gdal_priv.h:963
Store the raw result of an attribute value, which might contain dynamically allocated structures (lik...
Definition: gdal_priv.h:2167
size_t size() const
Return the size in bytes of the raw result.
Definition: gdal_priv.h:2197
const GByte * data() const
Return pointer to the start of data.
Definition: gdal_priv.h:2195
const GByte & operator[](size_t idx) const
Return byte at specified index.
Definition: gdal_priv.h:2193
A simple feature, including geometry and attributes.
Definition: ogr_feature.h:365
Abstract base class for all geometry classes.
Definition: ogr_geometry.h:326
This class represents a layer of simple features, with access methods.
Definition: ogrsf_frmts.h:71
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:158
This class represents a style table.
Definition: ogr_featurestyle.h:85
Various convenience functions for CPL.
CPLErr
Error category.
Definition: cpl_error.h:53
int CPLErrorNum
Error number.
Definition: cpl_error.h:94
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:289
#define CPL_NULL_TERMINATED
Null terminated variadic.
Definition: cpl_port.h:911
unsigned long long GUIntBig
Large unsigned integer type (generally 64-bit unsigned integer type).
Definition: cpl_port.h:251
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:339
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:337
GIntBig GInt64
Signed 64 bit integer type.
Definition: cpl_port.h:267
#define CPL_PRINT_FUNC_FORMAT(format_idx, arg_idx)
Tag a function to have printf() formatting.
Definition: cpl_port.h:921
#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:1007
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1216
GUIntBig GUInt64
Unsigned 64 bit integer type.
Definition: cpl_port.h:269
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition: cpl_port.h:946
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:215
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:248
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:62
FILE VSILFILE
Opaque type for a FILE that implements the VSIVirtualHandle API.
Definition: cpl_vsi.h:156
GUIntBig vsi_l_offset
Type for a file offset.
Definition: cpl_vsi.h:140
Public (C callable) GDAL entry points.
GIntBig GSpacing
Type to express pixel, line or band spacing.
Definition: gdal.h:276
GDALAccess
Definition: gdal.h:113
@ GA_ReadOnly
Definition: gdal.h:114
void GDALClose(GDALDatasetH)
Close GDAL dataset.
Definition: gdaldataset.cpp:3656
GDALPaletteInterp
Definition: gdal.h:220
@ GPI_RGB
Definition: gdal.h:222
GDALDataType
Definition: gdal.h:60
@ GDT_Byte
Definition: gdal.h:62
@ GDT_Float64
Definition: gdal.h:70
@ GDT_Unknown
Definition: gdal.h:61
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition: gdal.h:258
GDALExtendedDataTypeClass
Enumeration giving the class of a GDALExtendedDataType.
Definition: gdal.h:281
@ GEDTC_NUMERIC
Numeric value.
Definition: gdal.h:283
GDALRIOResampleAlg
RasterIO() resampling method.
Definition: gdal.h:129
int GDALGetDataTypeSizeBytes(GDALDataType)
Get data type size in bytes.
Definition: gdal_misc.cpp:305
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:3237
void * GDALMajorObjectH
Opaque type used for the C bindings of the C++ GDALMajorObject class.
Definition: gdal.h:255
GDALColorInterp
Definition: gdal.h:194
GDALAsyncStatusType
status of the asynchronous stream
Definition: gdal.h:101
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition: gdal.h:264
GDALRWFlag
Definition: gdal.h:119
void * GDALRasterBandH
Opaque type used for the C bindings of the C++ GDALRasterBand class.
Definition: gdal.h:261
void * GDALColorTableH
Opaque type used for the C bindings of the C++ GDALColorTable class.
Definition: gdal.h:267
std::unique_ptr< GDALDataset, GDALDatasetUniquePtrDeleter > GDALDatasetUniquePtr
Unique pointer type for GDALDataset.
Definition: gdal_priv.h:880
GDALDriverManager * GetGDALDriverManager(void)
Fetch the global GDAL driver manager.
Definition: gdaldrivermanager.cpp:98
GDALIdentifyEnum
Enumeration used by GDALDriver::pfnIdentify().
Definition: gdal_priv.h:1443
@ GDAL_IDENTIFY_TRUE
Identify determined the file is recognized by the probed driver.
Definition: gdal_priv.h:1449
@ GDAL_IDENTIFY_FALSE
Identify determined the file is not recognized by the probed driver.
Definition: gdal_priv.h:1447
@ GDAL_IDENTIFY_UNKNOWN
Identify could not determine if the file is recognized or not by the probed driver.
Definition: gdal_priv.h:1445
Core portability services for cross-platform OGR code.
OGRwkbGeometryType
List of well known binary geometry types.
Definition: ogr_core.h:346
@ wkbUnknown
unknown type, non-standard
Definition: ogr_core.h:347
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:318
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition: ogr_feature.h:790
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition: ogrsf_frmts.h:287
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition: ogrsf_frmts.h:292
Document node structure.
Definition: cpl_minixml.h:70
Color tuple.
Definition: gdal.h:1181
Object returned by GetFeatures() iterators.
Definition: gdal_priv.h:665
Ground Control Point.
Definition: gdal.h:669