diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-08-19 20:57:07 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-08-20 13:26:54 +0200 |
| commit | 15d6475b8caeb169fd2c060076738db75fc527b3 (patch) | |
| tree | c50d03ac81b1e10e0d4356234757126a708e9ac1 /include | |
| parent | 2c9c015a6529548f5a5d448c78bc9b565d751590 (diff) | |
| download | PROJ-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.hpp | 44 |
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 |
