From 1ce278d3ba26b7278fa5a5adcd348ab7558fbe0f Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Wed, 11 Nov 2020 19:37:18 +0200 Subject: [PATCH] Use RAII --- SDK/CPP/public/include/voltu/initialise.hpp | 2 ++ SDK/CPP/public/include/voltu/voltu.hpp | 20 +++++++++++++++++++ .../public/samples/fusion_evaluator/main.cpp | 2 +- SDK/CPP/public/voltu.cpp | 13 +++++++++--- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/SDK/CPP/public/include/voltu/initialise.hpp b/SDK/CPP/public/include/voltu/initialise.hpp index 5d34a1e69..7c72189dc 100644 --- a/SDK/CPP/public/include/voltu/initialise.hpp +++ b/SDK/CPP/public/include/voltu/initialise.hpp @@ -43,4 +43,6 @@ namespace voltu * @return Singleton VolTu runtime instance. */ std::shared_ptr<voltu::System> instance(); + + void release(); } diff --git a/SDK/CPP/public/include/voltu/voltu.hpp b/SDK/CPP/public/include/voltu/voltu.hpp index c59518dcf..2bd0ff0a0 100644 --- a/SDK/CPP/public/include/voltu/voltu.hpp +++ b/SDK/CPP/public/include/voltu/voltu.hpp @@ -15,3 +15,23 @@ #include <voltu/system.hpp> #include <voltu/initialise.hpp> + +namespace voltu +{ + +class Voltu +{ +public: + inline Voltu() : instance_(voltu::instance()) {} + inline ~Voltu() { instance_.reset(); voltu::release(); } + + inline voltu::System* operator->() + { + return instance_.get(); + } + +private: + std::shared_ptr<voltu::System> instance_; +}; + +} diff --git a/SDK/CPP/public/samples/fusion_evaluator/main.cpp b/SDK/CPP/public/samples/fusion_evaluator/main.cpp index f9b96468c..40db29fe5 100644 --- a/SDK/CPP/public/samples/fusion_evaluator/main.cpp +++ b/SDK/CPP/public/samples/fusion_evaluator/main.cpp @@ -74,7 +74,7 @@ int main(int argc, char **argv) } } - auto vtu = voltu::instance(); + voltu::Voltu vtu; for (const auto &p : paths) { diff --git a/SDK/CPP/public/voltu.cpp b/SDK/CPP/public/voltu.cpp index d558ff7b0..9c9767b30 100644 --- a/SDK/CPP/public/voltu.cpp +++ b/SDK/CPP/public/voltu.cpp @@ -25,14 +25,15 @@ #include <cstdlib> #include <iostream> +typedef void* Library; + static bool g_init = false; +static Library handle = nullptr; #ifdef WITH_OPENCV voltu::GpuUtilities voltu::gpu; #endif -typedef void* Library; - static Library loadLibrary(const char *file) { #if defined(WIN32) @@ -116,7 +117,7 @@ std::shared_ptr<voltu::System> voltu::instance() std::string name = locateLibrary(); std::cout << "Loading VolTu Runtime: " << name << std::endl; - Library handle = loadLibrary(name.c_str()); + handle = loadLibrary(name.c_str()); if (handle) { @@ -166,3 +167,9 @@ std::shared_ptr<voltu::System> voltu::instance() return nullptr; } + +void voltu::release() +{ + // TODO: Call a finalise function + if (handle) unloadLibrary(handle); +} -- GitLab