aboutsummaryrefslogtreecommitdiff
path: root/src/grids.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-27 12:25:03 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-27 12:25:03 +0100
commitf085b39752d00a296c288be42dfc69b39b73823f (patch)
treef988a9d279865b2e17fd52da5162eadb1bb37c09 /src/grids.cpp
parentaa8c7826cf17e650ee2c3a2281aca49db37c4e81 (diff)
downloadPROJ-f085b39752d00a296c288be42dfc69b39b73823f.tar.gz
PROJ-f085b39752d00a296c288be42dfc69b39b73823f.zip
Handle context reassignment for Grid/GridSet/File objects
Diffstat (limited to 'src/grids.cpp')
-rw-r--r--src/grids.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/grids.cpp b/src/grids.cpp
index 45e7e8b0..a3d984de 100644
--- a/src/grids.cpp
+++ b/src/grids.cpp
@@ -139,6 +139,7 @@ class NullVerticalShiftGrid : public VerticalShiftGrid {
bool isNullGrid() const override { return true; }
bool valueAt(int, int, float &out) const override;
bool isNodata(float, double) const override { return false; }
+ void reassign_context(PJ_CONTEXT *) override {}
};
// ---------------------------------------------------------------------------
@@ -171,6 +172,11 @@ class GTXVerticalShiftGrid : public VerticalShiftGrid {
static GTXVerticalShiftGrid *open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const std::string &name);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_ctx = ctx;
+ m_fp->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -412,6 +418,8 @@ class GTiffGrid : public Grid {
std::string metadataItem(const std::string &key, int sample = -1) const;
uint32 subfileType() const { return m_subfileType; }
+
+ void reassign_context(PJ_CONTEXT *ctx) { m_ctx = ctx; }
};
// ---------------------------------------------------------------------------
@@ -738,6 +746,11 @@ class GTiffDataset {
bool openTIFF(const std::string &filename);
std::unique_ptr<GTiffGrid> nextGrid();
+
+ void reassign_context(PJ_CONTEXT *ctx) {
+ m_ctx = ctx;
+ m_fp->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1056,6 +1069,11 @@ class GTiffVGridShiftSet : public VerticalShiftGridSet, public GTiffDataset {
static std::unique_ptr<GTiffVGridShiftSet>
open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const std::string &filename);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ VerticalShiftGridSet::reassign_context(ctx);
+ GTiffDataset::reassign_context(ctx);
+ }
};
#endif // TIFF_ENABLED
@@ -1150,6 +1168,10 @@ class GTiffVGrid : public VerticalShiftGrid {
}
void insertGrid(PJ_CONTEXT *ctx, std::unique_ptr<GTiffVGrid> &&subgrid);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_grid->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1374,6 +1396,14 @@ const VerticalShiftGrid *VerticalShiftGridSet::gridAt(double lon,
// ---------------------------------------------------------------------------
+void VerticalShiftGridSet::reassign_context(PJ_CONTEXT *ctx) {
+ for (const auto &grid : m_grids) {
+ grid->reassign_context(ctx);
+ }
+}
+
+// ---------------------------------------------------------------------------
+
HorizontalShiftGrid::HorizontalShiftGrid(const std::string &nameIn, int widthIn,
int heightIn,
const ExtentAndRes &extentIn)
@@ -1402,6 +1432,8 @@ class NullHorizontalShiftGrid : public HorizontalShiftGrid {
bool isNullGrid() const override { return true; }
bool valueAt(int, int, float &lonShift, float &latShift) const override;
+
+ void reassign_context(PJ_CONTEXT *) override {}
};
// ---------------------------------------------------------------------------
@@ -1443,6 +1475,11 @@ class NTv1Grid : public HorizontalShiftGrid {
static NTv1Grid *open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const std::string &filename);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_ctx = ctx;
+ m_fp->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1556,6 +1593,11 @@ class CTable2Grid : public HorizontalShiftGrid {
static CTable2Grid *open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const std::string &filename);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_ctx = ctx;
+ m_fp->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1654,6 +1696,11 @@ class NTv2GridSet : public HorizontalShiftGridSet {
static std::unique_ptr<NTv2GridSet> open(PJ_CONTEXT *ctx,
std::unique_ptr<File> fp,
const std::string &filename);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ HorizontalShiftGridSet::reassign_context(ctx);
+ m_fp->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1679,6 +1726,11 @@ class NTv2Grid : public HorizontalShiftGrid {
m_mustSwap(mustSwapIn) {}
bool valueAt(int, int, float &lonShift, float &latShift) const override;
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_ctx = ctx;
+ m_fp->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1857,6 +1909,11 @@ class GTiffHGridShiftSet : public HorizontalShiftGridSet, public GTiffDataset {
static std::unique_ptr<GTiffHGridShiftSet>
open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const std::string &filename);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ HorizontalShiftGridSet::reassign_context(ctx);
+ GTiffDataset::reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -1884,6 +1941,10 @@ class GTiffHGrid : public HorizontalShiftGrid {
bool valueAt(int x, int y, float &lonShift, float &latShift) const override;
void insertGrid(PJ_CONTEXT *ctx, std::unique_ptr<GTiffHGrid> &&subgrid);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_grid->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -2235,6 +2296,14 @@ const HorizontalShiftGrid *HorizontalShiftGridSet::gridAt(double lon,
return nullptr;
}
+// ---------------------------------------------------------------------------
+
+void HorizontalShiftGridSet::reassign_context(PJ_CONTEXT *ctx) {
+ for (const auto &grid : m_grids) {
+ grid->reassign_context(ctx);
+ }
+}
+
#ifdef TIFF_ENABLED
// ---------------------------------------------------------------------------
@@ -2250,6 +2319,11 @@ class GTiffGenericGridShiftSet : public GenericShiftGridSet,
static std::unique_ptr<GTiffGenericGridShiftSet>
open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
const std::string &filename);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ GenericShiftGridSet::reassign_context(ctx);
+ GTiffDataset::reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -2287,6 +2361,10 @@ class GTiffGenericGrid : public GenericShiftGrid {
void insertGrid(PJ_CONTEXT *ctx,
std::unique_ptr<GTiffGenericGrid> &&subgrid);
+
+ void reassign_context(PJ_CONTEXT *ctx) override {
+ m_grid->reassign_context(ctx);
+ }
};
// ---------------------------------------------------------------------------
@@ -2356,6 +2434,8 @@ class NullGenericShiftGrid : public GenericShiftGrid {
std::string metadataItem(const std::string &, int) const override {
return std::string();
}
+
+ void reassign_context(PJ_CONTEXT *) override {}
};
// ---------------------------------------------------------------------------
@@ -2516,6 +2596,14 @@ const GenericShiftGrid *GenericShiftGridSet::gridAt(double lon,
// ---------------------------------------------------------------------------
+void GenericShiftGridSet::reassign_context(PJ_CONTEXT *ctx) {
+ for (const auto &grid : m_grids) {
+ grid->reassign_context(ctx);
+ }
+}
+
+// ---------------------------------------------------------------------------
+
ListOfGenericGrids proj_generic_grid_init(PJ *P, const char *gridkey) {
std::string key("s");
key += gridkey;