eOn client
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
class
PotRegistry
{
25
public
:
26
using
Clock
= std::chrono::system_clock;
27
using
TimePoint
= Clock::time_point;
28
29
struct
InstanceRecord
{
30
uint64_t
id
;
31
PotType
type
;
32
TimePoint
created_at
;
33
TimePoint
destroyed_at
;
34
size_t
force_calls
;
35
};
36
37
private
:
38
struct
TypeStats
{
39
std::atomic<size_t>
force_calls
{0};
40
std::atomic<size_t>
created
{0};
41
std::atomic<size_t>
alive
{0};
42
};
43
std::array<TypeStats, magic_enum::enum_count<PotType>()>
m_type_stats
{};
44
45
std::mutex
m_records_mutex
;
46
std::vector<InstanceRecord>
m_records
;
47
48
std::atomic<uint64_t>
m_next_id
{1};
49
50
public
:
54
static
PotRegistry
&
get
() noexcept;
55
void
reset
();
56
57
// Lifecycle events
58
[[nodiscard]] uint64_t
on_created
(
PotType
t) noexcept;
59
void
on_destroyed
(uint64_t
id
,
PotType
t,
size_t
force_calls,
60
TimePoint
created_at);
61
void
on_force_call
(
PotType
t) noexcept;
62
63
// Per-type queries
64
[[nodiscard]]
size_t
type_force_calls
(
PotType
t) const noexcept;
65
[[nodiscard]]
size_t
total_force_calls
() const noexcept;
66
[[nodiscard]]
size_t
type_alive
(
PotType
t) const noexcept;
67
68
// JSON output
69
void
write_summary
(const std::
string
&path =
"_potcalls.json"
) const;
70
};
71
72
}
// namespace eonc
73
74
using
eonc
::
PotRegistry
;
BaseStructures.h
eonc::PotRegistry
Definition
PotRegistry.h:24
eonc::PotRegistry::m_next_id
std::atomic< uint64_t > m_next_id
Definition
PotRegistry.h:48
eonc::PotRegistry::m_type_stats
std::array< TypeStats, magic_enum::enum_count< PotType >()> m_type_stats
Definition
PotRegistry.h:43
eonc::PotRegistry::on_destroyed
void on_destroyed(uint64_t id, PotType t, size_t force_calls, TimePoint created_at)
Definition
PotRegistry.cpp:78
eonc::PotRegistry::on_created
uint64_t on_created(PotType t) noexcept
Definition
PotRegistry.cpp:71
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::on_force_call
void on_force_call(PotType t) noexcept
Definition
PotRegistry.cpp:88
eonc::PotRegistry::m_records_mutex
std::mutex m_records_mutex
Definition
PotRegistry.h:45
eonc::PotRegistry::Clock
std::chrono::system_clock Clock
Definition
PotRegistry.h:26
eonc::PotRegistry::type_alive
size_t type_alive(PotType t) const noexcept
Definition
PotRegistry.cpp:106
eonc::PotRegistry::TimePoint
Clock::time_point TimePoint
Definition
PotRegistry.h:27
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:46
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:19
eonc::PotType
PotType
Definition
BaseStructures.h:36
eonc::PotRegistry::InstanceRecord
Definition
PotRegistry.h:29
eonc::PotRegistry::InstanceRecord::id
uint64_t id
Definition
PotRegistry.h:30
eonc::PotRegistry::InstanceRecord::destroyed_at
TimePoint destroyed_at
Definition
PotRegistry.h:33
eonc::PotRegistry::InstanceRecord::created_at
TimePoint created_at
Definition
PotRegistry.h:32
eonc::PotRegistry::InstanceRecord::force_calls
size_t force_calls
Definition
PotRegistry.h:34
eonc::PotRegistry::InstanceRecord::type
PotType type
Definition
PotRegistry.h:31
eonc::PotRegistry::TypeStats
Definition
PotRegistry.h:38
eonc::PotRegistry::TypeStats::created
std::atomic< size_t > created
Definition
PotRegistry.h:40
eonc::PotRegistry::TypeStats::force_calls
std::atomic< size_t > force_calls
Definition
PotRegistry.h:39
eonc::PotRegistry::TypeStats::alive
std::atomic< size_t > alive
Definition
PotRegistry.h:41
include
eon
PotRegistry.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf