Added count() and random_choice() functions
This commit is contained in:
parent
f1095f294a
commit
b576c1cfe6
12
plugin.hpp
12
plugin.hpp
@ -14,6 +14,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <random>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <libscerror.hpp>
|
#include <libscerror.hpp>
|
||||||
@ -59,10 +60,18 @@ namespace sc {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t count() { return plugins.size(); }
|
||||||
|
|
||||||
|
static plugin& random_choice() {
|
||||||
|
static std::random_device rdev {};
|
||||||
|
static std::default_random_engine reng {rdev()};
|
||||||
|
std::uniform_int_distribution<int> dist {0, count() - 1};
|
||||||
|
return get(names()[dist(reng)]);
|
||||||
|
}
|
||||||
|
|
||||||
plugin(const std::string& path) : _path {path} {
|
plugin(const std::string& path) : _path {path} {
|
||||||
_plugin = ::dlopen(path.c_str(), RTLD_LAZY);
|
_plugin = ::dlopen(path.c_str(), RTLD_LAZY);
|
||||||
|
|
||||||
//std::cerr << path << (_plugin ? "" : " not") << " opened\n";
|
|
||||||
const char* err {::dlerror()};
|
const char* err {::dlerror()};
|
||||||
if (err) std::cerr << err << '\n';
|
if (err) std::cerr << err << '\n';
|
||||||
if (_plugin) {
|
if (_plugin) {
|
||||||
@ -77,7 +86,6 @@ namespace sc {
|
|||||||
if (_plugin) {
|
if (_plugin) {
|
||||||
::dlclose(_plugin);
|
::dlclose(_plugin);
|
||||||
_plugin = nullptr;
|
_plugin = nullptr;
|
||||||
//std::cerr << _path << " closed\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user