eOn 3.2.0
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
JobRegistry.cpp
Go to the documentation of this file.
1
/*
2
** This file is part of eOn.
3
**
4
** SPDX-License-Identifier: BSD-3-Clause
5
*/
6
#include "
eon/JobRegistry.h
"
7
8
#include <map>
9
#include <memory>
10
#include <stdexcept>
11
12
namespace
eonc
{
13
14
std::map<JobType, JobFactory> &
jobTable
() {
15
static
std::map<JobType, JobFactory> t;
16
return
t;
17
}
18
19
void
registerJob
(
JobType
type,
JobFactory
factory) {
20
jobTable
()[type] = std::move(factory);
21
}
22
23
}
// namespace eonc
24
25
namespace
eonc::helpers
{
26
27
namespace
{
28
29
std::unique_ptr<Job> makeJobFromFactory(std::unique_ptr<Parameters> params,
30
Runtime &runtime) {
31
eonc::forceJobRegistration
();
32
const
JobType
type = params->main_options().job;
33
auto
&t =
eonc::jobTable
();
34
auto
it = t.find(type);
35
if
(it == t.end()) {
36
throw
std::runtime_error(
"No known job could be constructed"
);
37
}
38
return
it->second(std::move(params), runtime);
39
}
40
41
}
// namespace
42
43
std::unique_ptr<Job>
makeJob
(std::unique_ptr<Parameters> params,
44
Runtime
&runtime) {
45
return
makeJobFromFactory(std::move(params), runtime);
46
}
47
48
std::unique_ptr<Job>
makeJob
(std::unique_ptr<Parameters> params,
49
std::unique_ptr<Runtime> runtime) {
50
if
(!runtime) {
51
throw
std::logic_error(
"makeJob: null Runtime"
);
52
}
53
Runtime
&ref = *runtime;
54
auto
job = makeJobFromFactory(std::move(params), ref);
55
job->adoptRuntime(std::move(runtime));
56
return
job;
57
}
58
59
std::unique_ptr<Job>
makeJob
(std::unique_ptr<Parameters> params,
60
Runtime
&&runtime) {
61
return
makeJob
(std::move(params),
62
std::make_unique<Runtime>(std::move(runtime)));
63
}
64
65
std::unique_ptr<Job>
makeJob
(std::unique_ptr<Parameters> params) {
66
return
makeJob
(std::move(params), std::make_unique<Runtime>());
67
}
68
69
}
// namespace eonc::helpers
JobRegistry.h
eonc::Runtime
Move-only composition root for process resources (dlopen loaders and the potential registry).
Definition
Runtime.h:27
eonc::helpers
Definition
EnvHelpers.cc:5
eonc::helpers::makeJob
std::unique_ptr< Job > makeJob(std::unique_ptr< Parameters > params, Runtime &runtime)
Borrow: caller keeps Runtime alive.
Definition
JobRegistry.cpp:43
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:23
eonc::jobTable
std::map< JobType, JobFactory > & jobTable()
Definition
JobRegistry.cpp:14
eonc::forceJobRegistration
void forceJobRegistration()
Definition
Job.cpp:41
eonc::JobFactory
std::function< std::unique_ptr< Job >(std::unique_ptr< Parameters >, Runtime &)> JobFactory
Definition
JobRegistry.h:16
eonc::JobType
JobType
Definition
BaseStructures.h:77
eonc::registerJob
void registerJob(JobType type, JobFactory factory)
Definition
JobRegistry.cpp:19
client
JobRegistry.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf