aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-08-19 20:57:07 +0200
committerEven Rouault <even.rouault@spatialys.com>2019-08-20 13:26:54 +0200
commit15d6475b8caeb169fd2c060076738db75fc527b3 (patch)
treec50d03ac81b1e10e0d4356234757126a708e9ac1 /include
parent2c9c015a6529548f5a5d448c78bc9b565d751590 (diff)
downloadPROJ-15d6475b8caeb169fd2c060076738db75fc527b3.tar.gz
PROJ-15d6475b8caeb169fd2c060076738db75fc527b3.zip
C API: add proj_context_set_autoclose_database() to automatically close database (fixes #1565)
Diffstat (limited to 'include')
-rw-r--r--include/proj/internal/io_internal.hpp44
1 files changed, 33 insertions, 11 deletions
diff --git a/include/proj/internal/io_internal.hpp b/include/proj/internal/io_internal.hpp
index b7f514d5..bd6d441d 100644
--- a/include/proj/internal/io_internal.hpp
+++ b/include/proj/internal/io_internal.hpp
@@ -166,24 +166,46 @@ NS_PROJ_END
/** Auxiliary structure to PJ_CONTEXT storing C++ context stuff. */
struct projCppContext {
- NS_PROJ::io::DatabaseContextNNPtr databaseContext;
+ private:
+ NS_PROJ::io::DatabaseContextPtr databaseContext_{};
+ PJ_CONTEXT *ctx_ = nullptr;
+ std::string dbPath_{};
+ std::vector<std::string> auxDbPaths_{};
+ bool autoCloseDb_ = false;
+
+ projCppContext(const projCppContext &) = delete;
+ projCppContext &operator=(const projCppContext &) = delete;
+
+ public:
+ std::string lastDbPath_{};
+ std::string lastDbMetadataItem_{};
std::string lastUOMName_{};
std::string lastGridFullName_{};
std::string lastGridPackageName_{};
std::string lastGridUrl_{};
+ static std::vector<std::string> toVector(const char *const *auxDbPaths);
+
explicit projCppContext(PJ_CONTEXT *ctx, const char *dbPath = nullptr,
- const char *const *auxDbPaths = nullptr)
- : databaseContext(NS_PROJ::io::DatabaseContext::create(
- dbPath ? dbPath : std::string(), toVector(auxDbPaths), ctx)) {}
-
- static std::vector<std::string> toVector(const char *const *auxDbPaths) {
- std::vector<std::string> res;
- for (auto iter = auxDbPaths; iter && *iter; ++iter) {
- res.emplace_back(std::string(*iter));
- }
- return res;
+ const std::vector<std::string> &auxDbPaths = {});
+
+ // cppcheck-suppress functionStatic
+ inline const std::string &getDbPath() const { return dbPath_; }
+
+ // cppcheck-suppress functionStatic
+ inline const std::vector<std::string> &getAuxDbPaths() const {
+ return auxDbPaths_;
}
+
+ void setAutoCloseDb(bool autoClose) { autoCloseDb_ = autoClose; }
+ inline bool getAutoCloseDb() const { return autoCloseDb_; }
+
+ // cppcheck-suppress functionStatic
+ void closeDb();
+
+ void autoCloseDbIfNeeded();
+
+ NS_PROJ::io::DatabaseContextNNPtr getDatabaseContext();
};
//! @endcond