eOn 3.2.0
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
MetatomicLoader.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
** Runtime loader for libmetatomic_pot.so (C ABI).
7
*/
8
#pragma once
9
10
#include "
eon/DynLib.h
"
11
#include "
eon/potentials/Metatomic/metatomic_c_abi.h
"
12
13
#include <stdexcept>
14
#include <string>
15
16
namespace
eonc
{
17
18
// ---------------------------------------------------------------------------
19
// IMetatomicLoader: injectable ABI. Production uses instance().
20
// ---------------------------------------------------------------------------
21
class
IMetatomicLoader
{
22
public
:
23
using
create_fn
=
EonMtaPot
*(*)(
const
EonMtaConfig
*,
char
*,
size_t
);
24
using
destroy_fn
= void (*)(
EonMtaPot
*);
25
using
force_fn
= int (*)(
EonMtaPot
*, long,
const
double
*,
const
int
*,
26
double
*,
double
*,
double
*,
const
double
*);
27
using
abi_version_fn
= int (*)(void);
28
29
create_fn
create
{
nullptr
};
30
destroy_fn
destroy
{
nullptr
};
31
force_fn
force
{
nullptr
};
32
abi_version_fn
abi_version
{
nullptr
};
33
34
virtual
~IMetatomicLoader
() =
default
;
35
virtual
void
require_loaded
() = 0;
36
[[nodiscard]]
virtual
bool
is_loaded
() const noexcept = 0;
37
38
IMetatomicLoader
(const
IMetatomicLoader
&) = delete;
39
IMetatomicLoader
&operator=(const
IMetatomicLoader
&) = delete;
40
41
protected:
42
IMetatomicLoader
() = default;
43
};
44
45
// ---------------------------------------------------------------------------
46
// MetatomicLoader: process-default loader (Meyer's singleton). Does not
47
// dlopen until require_loaded() / try_load().
48
// ---------------------------------------------------------------------------
49
class
MetatomicLoader
: public
IMetatomicLoader
{
50
public
:
52
static
MetatomicLoader
&
instance
();
53
55
bool
try_load
();
56
57
[[nodiscard]]
bool
is_loaded
() const noexcept
override
{
return
m_loaded
; }
58
60
void
require_loaded
()
override
;
61
62
~MetatomicLoader
()
override
;
63
MetatomicLoader
(
const
MetatomicLoader
&) =
delete
;
64
MetatomicLoader
&
operator=
(
const
MetatomicLoader
&) =
delete
;
65
66
private
:
67
MetatomicLoader
() =
default
;
68
friend
class
Runtime
;
69
70
bool
m_loaded
{
false
};
71
dynlib::Handle
m_handle
{};
72
};
73
74
}
// namespace eonc
DynLib.h
metatomic_c_abi.h
eonc::IMetatomicLoader::~IMetatomicLoader
virtual ~IMetatomicLoader()=default
eonc::IMetatomicLoader::is_loaded
virtual bool is_loaded() const noexcept=0
eonc::IMetatomicLoader::abi_version_fn
int(*)(void) abi_version_fn
Definition
MetatomicLoader.h:27
eonc::IMetatomicLoader::force_fn
int(*)(EonMtaPot *, long, const double *, const int *, double *, double *, double *, const double *) force_fn
Definition
MetatomicLoader.h:25
eonc::IMetatomicLoader::destroy
destroy_fn destroy
Definition
MetatomicLoader.h:30
eonc::IMetatomicLoader::create_fn
EonMtaPot *(*)(const EonMtaConfig *, char *, size_t) create_fn
Definition
MetatomicLoader.h:23
eonc::IMetatomicLoader::destroy_fn
void(*)(EonMtaPot *) destroy_fn
Definition
MetatomicLoader.h:24
eonc::IMetatomicLoader::create
create_fn create
Definition
MetatomicLoader.h:29
eonc::IMetatomicLoader::force
force_fn force
Definition
MetatomicLoader.h:31
eonc::IMetatomicLoader::IMetatomicLoader
IMetatomicLoader(const IMetatomicLoader &)=delete
eonc::IMetatomicLoader::abi_version
abi_version_fn abi_version
Definition
MetatomicLoader.h:32
eonc::IMetatomicLoader::require_loaded
virtual void require_loaded()=0
eonc::MetatomicLoader
Definition
MetatomicLoader.h:49
eonc::MetatomicLoader::try_load
bool try_load()
Attempt (re)load if not yet successful. Safe after potentials_path inject.
Definition
MetatomicLoader.cpp:24
eonc::MetatomicLoader::operator=
MetatomicLoader & operator=(const MetatomicLoader &)=delete
eonc::MetatomicLoader::instance
static MetatomicLoader & instance()
Thread-safe singleton accessor (Meyer's pattern). Does not dlopen.
Definition
MetatomicLoader.cpp:19
eonc::MetatomicLoader::MetatomicLoader
MetatomicLoader()=default
eonc::MetatomicLoader::MetatomicLoader
MetatomicLoader(const MetatomicLoader &)=delete
eonc::MetatomicLoader::is_loaded
bool is_loaded() const noexcept override
Definition
MetatomicLoader.h:57
eonc::MetatomicLoader::m_handle
dynlib::Handle m_handle
Definition
MetatomicLoader.h:71
eonc::MetatomicLoader::m_loaded
bool m_loaded
Definition
MetatomicLoader.h:70
eonc::MetatomicLoader::Runtime
friend class Runtime
Definition
MetatomicLoader.h:68
eonc::dynlib::Handle
void * Handle
Definition
DynLib.h:60
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:23
EonMtaConfig
Flat config for create (mirrors eonc::Parameters::metatomic_options_t).
Definition
metatomic_c_abi.h:37
EonMtaPot
Definition
MetatomicCAbi.cpp:19
include
eon
potentials
Metatomic
MetatomicLoader.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf