14#ifndef GDALMULTIDIM_ARRAY_UNSCALED_H
15#define GDALMULTIDIM_ARRAY_UNSCALED_H
17#include "gdal_multidim.h"
18#include "gdal_pam_multidim.h"
26class GDALMDArrayUnscaled final :
public GDALPamMDArray
29 std::shared_ptr<GDALMDArray> m_poParent{};
32 const double m_dfScale;
33 const double m_dfOffset;
34 std::vector<GByte> m_abyRawNoData{};
37 explicit GDALMDArrayUnscaled(
const std::shared_ptr<GDALMDArray> &poParent,
38 double dfScale,
double dfOffset,
41 "Unscaled view of " + poParent->GetFullName()),
43 std::string(),
"Unscaled view of " + poParent->GetFullName(),
44 GDALPamMultiDim::GetPAM(poParent), poParent->GetContext()),
45 m_poParent(std::move(poParent)),
47 m_bHasNoData(m_poParent->GetRawNoDataValue() != nullptr),
48 m_dfScale(dfScale), m_dfOffset(dfOffset)
50 m_abyRawNoData.resize(m_dt.
GetSize());
51 const auto eNonComplexDT =
54 &dfOverriddenDstNodata,
GDT_Float64, 0, m_abyRawNoData.data(),
59 bool IRead(
const GUInt64 *arrayStartIdx,
const size_t *count,
62 void *pDstBuffer)
const override;
64 bool IWrite(
const GUInt64 *arrayStartIdx,
const size_t *count,
67 const void *pSrcBuffer)
override;
69 bool IAdviseRead(
const GUInt64 *arrayStartIdx,
const size_t *count,
72 return m_poParent->AdviseRead(arrayStartIdx, count, papszOptions);
76 static std::shared_ptr<GDALMDArrayUnscaled>
77 Create(
const std::shared_ptr<GDALMDArray> &poParent,
double dfScale,
80 auto newAr(std::shared_ptr<GDALMDArrayUnscaled>(
new GDALMDArrayUnscaled(
81 poParent, dfScale, dfOffset, dfDstNodata, eDT)));
82 newAr->SetSelf(newAr);
86 bool IsWritable()
const override
88 return m_poParent->IsWritable();
91 const std::string &GetFilename()
const override
93 return m_poParent->GetFilename();
96 const std::vector<std::shared_ptr<GDALDimension>> &
97 GetDimensions()
const override
99 return m_poParent->GetDimensions();
107 const std::string &GetUnit()
const override
109 return m_poParent->GetUnit();
112 std::shared_ptr<OGRSpatialReference> GetSpatialRef()
const override
114 return m_poParent->GetSpatialRef();
117 const void *GetRawNoDataValue()
const override
119 return m_bHasNoData ? m_abyRawNoData.data() :
nullptr;
122 bool SetRawNoDataValue(
const void *pRawNoData)
override
125 memcpy(m_abyRawNoData.data(), pRawNoData, m_dt.
GetSize());
129 std::vector<GUInt64> GetBlockSize()
const override
131 return m_poParent->GetBlockSize();
134 std::shared_ptr<GDALAttribute>
135 GetAttribute(
const std::string &osName)
const override
137 return m_poParent->GetAttribute(osName);
140 std::vector<std::shared_ptr<GDALAttribute>>
141 GetAttributes(
CSLConstList papszOptions =
nullptr)
const override
143 return m_poParent->GetAttributes(papszOptions);
146 bool SetUnit(
const std::string &osUnit)
override
148 return m_poParent->SetUnit(osUnit);
153 return m_poParent->SetSpatialRef(poSRS);
156 std::shared_ptr<GDALAttribute>
157 CreateAttribute(
const std::string &osName,
158 const std::vector<GUInt64> &anDimensions,
162 return m_poParent->CreateAttribute(osName, anDimensions, oDataType,
Abstract class, implemented by GDALAttribute and GDALMDArray.
Definition gdal_multidim.h:498
Class used to represent potentially complex data types.
Definition gdal_multidim.h:54
size_t GetSize() const
Return data type size in bytes.
Definition gdal_multidim.h:138
GDALDataType GetNumericDataType() const
Return numeric data type (only valid when GetClass() == GEDTC_NUMERIC)
Definition gdal_multidim.h:106
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:152
int GPtrDiff_t
Integer type large enough to hold the difference between 2 addresses.
Definition cpl_port.h:236
GIntBig GInt64
Signed 64 bit integer type.
Definition cpl_port.h:216
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1252
GUIntBig GUInt64
Unsigned 64 bit integer type.
Definition cpl_port.h:218
GDALDataType
Definition gdal.h:48
@ GDT_Float64
Definition gdal.h:60
GDALDataType GDALGetNonComplexDataType(GDALDataType)
Return the base data type for the specified input.
Definition gdal_misc.cpp:1081
int GDALDataTypeIsComplex(GDALDataType)
Is data type complex?
Definition gdal_misc.cpp:466
int GDALGetDataTypeSizeBytes(GDALDataType)
Get data type size in bytes.
Definition gdal_misc.cpp:374
void GDALCopyWords64(const void *pSrcData, GDALDataType eSrcType, int nSrcPixelOffset, void *pDstData, GDALDataType eDstType, int nDstPixelOffset, GPtrDiff_t nWordCount)
Copy pixel words from buffer to buffer.
Definition rasterio.cpp:4294