eOn 3.2.0
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
PotRegistry.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
14
#include "
BaseStructures.h
"
15
#include <array>
16
#include <atomic>
17
#include <chrono>
18
#include <mutex>
19
#include <string>
20
#include <vector>
21
22
namespace
eonc
{
23
24
// ---------------------------------------------------------------------------
25
// IPotRegistry: injectable ABI. Production uses PotRegistry::get().
26
// ---------------------------------------------------------------------------
27
class
IPotRegistry
{
28
public
:
29
using
Clock
= std::chrono::system_clock;
30
using
TimePoint
= Clock::time_point;
31
32
virtual
~IPotRegistry
() =
default
;
33
[[nodiscard]]
virtual
uint64_t
on_created
(
PotType
t)
noexcept
= 0;
34
virtual
void
on_destroyed
(uint64_t
id
,
PotType
t,
size_t
force_calls,
35
TimePoint
created_at) = 0;
36
virtual
void
on_force_call
(
PotType
t)
noexcept
= 0;
37
38
IPotRegistry
(
const
IPotRegistry
&) =
delete
;
39
IPotRegistry
&
operator=
(
const
IPotRegistry
&) =
delete
;
40
41
protected
:
42
IPotRegistry
() =
default
;
43
};
44
45
class
PotRegistry
:
public
IPotRegistry
{
46
public
:
47
using
Clock
=
IPotRegistry::Clock
;
48
using
TimePoint
=
IPotRegistry::TimePoint
;
49
50
struct
InstanceRecord
{
51
uint64_t
id
;
52
PotType
type
;
53
TimePoint
created_at
;
54
TimePoint
destroyed_at
;
55
size_t
force_calls
;
56
};
57
58
private
:
59
struct
TypeStats
{
60
std::atomic<size_t>
force_calls
{0};
61
std::atomic<size_t>
created
{0};
62
std::atomic<size_t>
alive
{0};
63
};
64
std::array<TypeStats, magic_enum::enum_count<PotType>()>
m_type_stats
{};
65
66
std::mutex
m_records_mutex
;
67
std::vector<InstanceRecord>
m_records
;
68
69
std::atomic<uint64_t>
m_next_id
{1};
70
71
public
:
72
PotRegistry
() =
default
;
73
77
static
PotRegistry
&
get
() noexcept;
78
void
reset
();
79
80
// Lifecycle events
81
[[nodiscard]] uint64_t
on_created
(
PotType
t) noexcept override;
82
void
on_destroyed
(uint64_t
id
,
PotType
t,
size_t
force_calls,
83
TimePoint
created_at) override;
84
void
on_force_call
(
PotType
t) noexcept override;
85
86
// Per-type queries
87
[[nodiscard]]
size_t
type_force_calls
(
PotType
t) const noexcept;
88
[[nodiscard]]
size_t
total_force_calls
() const noexcept;
89
[[nodiscard]]
size_t
type_alive
(
PotType
t) const noexcept;
90
91
// JSON output
92
void
write_summary
(const std::
string
&path =
"_potcalls.json"
) const;
93
};
94
95
}
// namespace eonc
BaseStructures.h
eonc::IPotRegistry::IPotRegistry
IPotRegistry(const IPotRegistry &)=delete
eonc::IPotRegistry::~IPotRegistry
virtual ~IPotRegistry()=default
eonc::IPotRegistry::operator=
IPotRegistry & operator=(const IPotRegistry &)=delete
eonc::IPotRegistry::on_destroyed
virtual void on_destroyed(uint64_t id, PotType t, size_t force_calls, TimePoint created_at)=0
eonc::IPotRegistry::IPotRegistry
IPotRegistry()=default
eonc::IPotRegistry::TimePoint
Clock::time_point TimePoint
Definition
PotRegistry.h:30
eonc::IPotRegistry::on_force_call
virtual void on_force_call(PotType t) noexcept=0
eonc::IPotRegistry::Clock
std::chrono::system_clock Clock
Definition
PotRegistry.h:29
eonc::IPotRegistry::on_created
virtual uint64_t on_created(PotType t) noexcept=0
eonc::PotRegistry::m_next_id
std::atomic< uint64_t > m_next_id
Definition
PotRegistry.h:69
eonc::PotRegistry::m_type_stats
std::array< TypeStats, magic_enum::enum_count< PotType >()> m_type_stats
Definition
PotRegistry.h:64
eonc::PotRegistry::PotRegistry
PotRegistry()=default
eonc::PotRegistry::on_force_call
void on_force_call(PotType t) noexcept override
Definition
PotRegistry.cpp:88
eonc::PotRegistry::get
static PotRegistry & get() noexcept
Process-lifetime singleton.
Definition
PotRegistry.cpp:50
eonc::PotRegistry::type_force_calls
size_t type_force_calls(PotType t) const noexcept
Definition
PotRegistry.cpp:93
eonc::PotRegistry::reset
void reset()
Definition
PotRegistry.cpp:60
eonc::PotRegistry::total_force_calls
size_t total_force_calls() const noexcept
Definition
PotRegistry.cpp:98
eonc::PotRegistry::m_records_mutex
std::mutex m_records_mutex
Definition
PotRegistry.h:66
eonc::PotRegistry::type_alive
size_t type_alive(PotType t) const noexcept
Definition
PotRegistry.cpp:106
eonc::PotRegistry::on_created
uint64_t on_created(PotType t) noexcept override
Definition
PotRegistry.cpp:71
eonc::PotRegistry::write_summary
void write_summary(const std::string &path="_potcalls.json") const
Definition
PotRegistry.cpp:111
eonc::PotRegistry::m_records
std::vector< InstanceRecord > m_records
Definition
PotRegistry.h:67
eonc::PotRegistry::Clock
IPotRegistry::Clock Clock
Definition
PotRegistry.h:47
eonc::PotRegistry::on_destroyed
void on_destroyed(uint64_t id, PotType t, size_t force_calls, TimePoint created_at) override
Definition
PotRegistry.cpp:78
eonc::PotRegistry::TimePoint
IPotRegistry::TimePoint TimePoint
Definition
PotRegistry.h:48
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:23
eonc::PotType
PotType
Definition
BaseStructures.h:36
eonc::PotRegistry::InstanceRecord
Definition
PotRegistry.h:50
eonc::PotRegistry::InstanceRecord::id
uint64_t id
Definition
PotRegistry.h:51
eonc::PotRegistry::InstanceRecord::destroyed_at
TimePoint destroyed_at
Definition
PotRegistry.h:54
eonc::PotRegistry::InstanceRecord::created_at
TimePoint created_at
Definition
PotRegistry.h:53
eonc::PotRegistry::InstanceRecord::force_calls
size_t force_calls
Definition
PotRegistry.h:55
eonc::PotRegistry::InstanceRecord::type
PotType type
Definition
PotRegistry.h:52
eonc::PotRegistry::TypeStats
Definition
PotRegistry.h:59
eonc::PotRegistry::TypeStats::created
std::atomic< size_t > created
Definition
PotRegistry.h:61
eonc::PotRegistry::TypeStats::force_calls
std::atomic< size_t > force_calls
Definition
PotRegistry.h:60
eonc::PotRegistry::TypeStats::alive
std::atomic< size_t > alive
Definition
PotRegistry.h:62
include
eon
PotRegistry.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf