Loading...
Searching...
No Matches
Job.h
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** Copyright (c) 2010--present, eOn Development Team
7** All rights reserved.
8**
9** Repo:
10** https://github.com/TheochemUI/eOn
11*/
12#pragma once
13#include "Parameters.h"
14#include "Potential.h"
15#include "Runtime.h"
16#include <memory>
17#include <stdexcept>
18#include <string>
19#include <utility>
20#include <vector>
21
22namespace eonc {
23
33
48
52
53class Job {
54private:
55protected:
56 // make const
60 std::unique_ptr<Runtime> owned_runtime_;
63 std::shared_ptr<Potential> pot;
64
65public:
67 void adoptRuntime(std::unique_ptr<Runtime> rt) {
68 if (!rt || runtime_ != rt.get()) {
69 throw std::logic_error(
70 "Job::adoptRuntime: Runtime is not the borrowed instance");
71 }
72 owned_runtime_ = std::move(rt);
73 }
74
76 Job(std::unique_ptr<Parameters> parameters, Runtime &rt)
77 : jtype{parameters->main_options().job},
78 params{*std::move(parameters)},
80 runtime_{&rt},
81 pot{helpers::makePotential(params.potential_options().potential, params,
82 rt)} {}
83
84 Job(std::unique_ptr<Parameters> parameters, std::unique_ptr<Runtime> rt)
85 : Job(std::move(parameters), *rt) {
86 adoptRuntime(std::move(rt));
87 }
88
89 explicit Job(std::unique_ptr<Parameters> parameters)
90 : Job(std::move(parameters), std::make_unique<Runtime>()) {}
91 Job(std::shared_ptr<Potential> potPassed, const Parameters &parameters)
92 : jtype{parameters.main_options().job},
93 params{parameters},
94 owned_runtime_{std::make_unique<Runtime>()},
96 pot{potPassed} {}
97 virtual ~Job() = default;
99 virtual std::vector<std::string> run() = 0;
100 [[nodiscard]] JobType getType() { return this->jtype; };
101 [[nodiscard]] PotRegistry &pots() noexcept { return runtime_->pots(); }
103 void releasePotential() { pot.reset(); }
104};
105
106namespace helpers {
108std::unique_ptr<Job> makeJob(std::unique_ptr<Parameters> params);
110std::unique_ptr<Job> makeJob(std::unique_ptr<Parameters> params,
111 Runtime &runtime);
113std::unique_ptr<Job> makeJob(std::unique_ptr<Parameters> params,
114 Runtime &&runtime);
116std::unique_ptr<Job> makeJob(std::unique_ptr<Parameters> params,
117 std::unique_ptr<Runtime> runtime);
118} // namespace helpers
119
120} // namespace eonc
PotRegistry & pots() noexcept
Definition Job.h:101
Job(std::unique_ptr< Parameters > parameters, Runtime &rt)
Borrow: caller keeps Runtime alive (CLI stack / Python Session).
Definition Job.h:76
void adoptRuntime(std::unique_ptr< Runtime > rt)
Take ownership of a Runtime previously passed as Runtime&.
Definition Job.h:67
Job(std::unique_ptr< Parameters > parameters, std::unique_ptr< Runtime > rt)
Own a Runtime (one-shot makeJob / rvalue).
Definition Job.h:84
virtual ~Job()=default
Job(std::unique_ptr< Parameters > parameters)
Own a default-constructed Runtime.
Definition Job.h:89
JobType getType()
Definition Job.h:100
std::unique_ptr< Runtime > owned_runtime_
Non-null when this Job owns the composition root (one-shot makeJob).
Definition Job.h:60
Job(std::shared_ptr< Potential > potPassed, const Parameters &parameters)
Definition Job.h:91
JobType jtype
Definition Job.h:57
std::shared_ptr< Potential > pot
Definition Job.h:63
Parameters params
Definition Job.h:58
virtual std::vector< std::string > run()=0
Virtual run; used solely for dynamic dispatch.
void releasePotential()
Drop the Potential so on_destroyed is recorded before Runtime dies.
Definition Job.h:103
Runtime * runtime_
Always valid: either owned_runtime_.get() or a caller-owned Runtime.
Definition Job.h:62
Move-only composition root for process resources (dlopen loaders and the potential registry).
Definition Runtime.h:27
std::unique_ptr< Job > makeJob(std::unique_ptr< Parameters > params, Runtime &runtime)
Borrow: caller keeps Runtime alive.
RAII resource manager for the ARTn C library with global synchronization.