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"
12
13#include <stdexcept>
14#include <string>
15
16namespace eonc {
17
18// ---------------------------------------------------------------------------
19// IMetatomicLoader: injectable ABI. Production uses instance().
20// ---------------------------------------------------------------------------
22public:
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};
31 force_fn force{nullptr};
33
34 virtual ~IMetatomicLoader() = default;
35 virtual void require_loaded() = 0;
36 [[nodiscard]] virtual bool is_loaded() const noexcept = 0;
37
39 IMetatomicLoader &operator=(const IMetatomicLoader &) = delete;
40
41protected:
42 IMetatomicLoader() = default;
43};
44
45// ---------------------------------------------------------------------------
46// MetatomicLoader: process-default loader (Meyer's singleton). Does not
47// dlopen until require_loaded() / try_load().
48// ---------------------------------------------------------------------------
50public:
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;
65
66private:
67 MetatomicLoader() = default;
68 friend class Runtime;
69
70 bool m_loaded{false};
72};
73
74} // namespace eonc
virtual ~IMetatomicLoader()=default
virtual bool is_loaded() const noexcept=0
int(*)(EonMtaPot *, long, const double *, const int *, double *, double *, double *, const double *) force_fn
EonMtaPot *(*)(const EonMtaConfig *, char *, size_t) create_fn
void(*)(EonMtaPot *) destroy_fn
IMetatomicLoader(const IMetatomicLoader &)=delete
abi_version_fn abi_version
virtual void require_loaded()=0
bool try_load()
Attempt (re)load if not yet successful. Safe after potentials_path inject.
MetatomicLoader & operator=(const MetatomicLoader &)=delete
static MetatomicLoader & instance()
Thread-safe singleton accessor (Meyer's pattern). Does not dlopen.
MetatomicLoader(const MetatomicLoader &)=delete
bool is_loaded() const noexcept override
dynlib::Handle m_handle
void * Handle
Definition DynLib.h:60
RAII resource manager for the ARTn C library with global synchronization.
Flat config for create (mirrors eonc::Parameters::metatomic_options_t).