-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAlgorithmRegistrar.cpp
37 lines (28 loc) · 1.08 KB
/
AlgorithmRegistrar.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "AlgorithmRegistrar.h"
// create the static field
AlgorithmRegistrar AlgorithmRegistrar::instance;
//-------------------- --------------------------------------------------------
// returns: 0 for success
// -1 if file cannot be loaded
// -2 if file doesn't register any algorithm
//----------------------------------------------------------------------------
int AlgorithmRegistrar::LoadAlgorithm(string& path, const string& algorithmName, void*& dlib)
{
size_t size = instance.getNumRegisteredAlgorithms();
dlib = dlopen(path.c_str(), RTLD_NOW);
if (dlib == nullptr) return FILE_CANNOT_BE_LOADED;
if (instance.getNumRegisteredAlgorithms() <= size)
{
dlclose(dlib);
return NO_ALGORITHM_REGISTERED;
}
instance.setLastAlgorithmName(algorithmName);
return ALGORITHM_REGISTERED_SUCCESSFULY;
}
list<unique_ptr<AbstractAlgorithm>> AlgorithmRegistrar::getNewAlgorithmInstances() const
{
list<unique_ptr<AbstractAlgorithm>> algorithms;
for (auto algorithmFactoryFunc : algorithmFactories)
algorithms.push_back(algorithmFactoryFunc());
return algorithms;
}