diff --git a/SDK/CPP/public/include/voltu/initialise.hpp b/SDK/CPP/public/include/voltu/initialise.hpp index 5d34a1e691797b8c4922aa274775d7f84ef401ac..7c72189dcf669982d48abd5a797b52c9c3832e58 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 c59518dcf75541a5dca78b6bc6e94dbd83c92047..2bd0ff0a07651a9b562f8921869b729ca30b9233 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 f9b96468c292883118559a1542ca0b833d4a0e20..40db29fe5024e1e994a02a732dea9cb9f56b4ccc 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 d558ff7b0897ab96cb58b55e115a21ebe42980d3..9c9767b306d4be7311983c65b731fbc54a5c8a7b 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); +}