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
22namespace eonc {
23
25public:
26 using Clock = std::chrono::system_clock;
27 using TimePoint = Clock::time_point;
28
36
37private:
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
50public:
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
74using eonc::PotRegistry;
std::atomic< uint64_t > m_next_id
Definition PotRegistry.h:48
std::array< TypeStats, magic_enum::enum_count< PotType >()> m_type_stats
Definition PotRegistry.h:43
void on_destroyed(uint64_t id, PotType t, size_t force_calls, TimePoint created_at)
uint64_t on_created(PotType t) noexcept
static PotRegistry & get() noexcept
Process-lifetime singleton.
size_t type_force_calls(PotType t) const noexcept
size_t total_force_calls() const noexcept
void on_force_call(PotType t) noexcept
std::mutex m_records_mutex
Definition PotRegistry.h:45
std::chrono::system_clock Clock
Definition PotRegistry.h:26
size_t type_alive(PotType t) const noexcept
Clock::time_point TimePoint
Definition PotRegistry.h:27
void write_summary(const std::string &path="_potcalls.json") const
std::vector< InstanceRecord > m_records
Definition PotRegistry.h:46
RAII resource manager for the ARTn C library with global synchronization.
std::atomic< size_t > created
Definition PotRegistry.h:40
std::atomic< size_t > force_calls
Definition PotRegistry.h:39
std::atomic< size_t > alive
Definition PotRegistry.h:41