Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
OverflowPolicies.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include <atomic>
10#include <cassert>
11#include <cstdint>
12#include <exception>
13#include <utility>
14
16
17namespace corium {
18
21 template <typename QueuePolicy, typename EventVariant>
22 bool handleOverflow(QueuePolicy& queue, EventVariant&& event, EventPriority priority = EventPriority::Normal)
23 {
24 (void)queue;
25 (void)event;
26 (void)priority;
27 return false;
28 }
29};
30
34 template <typename QueuePolicy, typename EventVariant>
35 bool handleOverflow(QueuePolicy& queue, EventVariant&& event, EventPriority priority = EventPriority::Normal)
36 {
37 typename QueuePolicy::EventType dummy;
38 queue.tryPop(dummy); // Evict oldest event
39 auto res = queue.tryPush(std::forward<EventVariant>(event), priority);
40 return res.pushed;
41 }
42};
43
47 template <typename QueuePolicy, typename EventVariant>
48 bool handleOverflow(QueuePolicy& queue, EventVariant&& event, EventPriority priority = EventPriority::Normal)
49 {
50 (void)queue;
51 (void)event;
52 (void)priority;
53#if defined(CORIUM_PANIC_ON_OVERFLOW)
54 std::terminate();
55#else
56 assert(false && "Corium Queue Overflow: Queue capacity exceeded!");
57 return false;
58#endif
59 }
60};
61
64public:
65 template <typename QueuePolicy, typename EventVariant>
66 bool handleOverflow(QueuePolicy& queue, EventVariant&& event, EventPriority priority = EventPriority::Normal)
67 {
68 (void)queue;
69 (void)event;
70 (void)priority;
71 _droppedCount.fetch_add(1, std::memory_order_relaxed);
72 return false;
73 }
74
76 [[nodiscard]] uint64_t overflowCount() const noexcept
77 {
78 return _droppedCount.load(std::memory_order_relaxed);
79 }
80
82 void resetOverflowCount() noexcept
83 {
84 _droppedCount.store(0, std::memory_order_relaxed);
85 }
86
87private:
88 std::atomic<uint64_t> _droppedCount{0};
89};
90
91} // namespace corium
Bounded and multi-tier priority MPSC queueing policies.
Overflow Policy: Audit and count dropped events via atomic counter.
Definition OverflowPolicies.hpp:63
void resetOverflowCount() noexcept
Reset total dropped event counter to 0.
Definition OverflowPolicies.hpp:82
uint64_t overflowCount() const noexcept
Get total number of dropped events.
Definition OverflowPolicies.hpp:76
bool handleOverflow(QueuePolicy &queue, EventVariant &&event, EventPriority priority=EventPriority::Normal)
Definition OverflowPolicies.hpp:66
Definition Application.hpp:16
EventPriority
Event priority levels for multi-priority queue policies.
Definition QueuePolicies.hpp:32
Default Overflow Policy: Silently drop incoming new event when queue is full. Zero overhead.
Definition OverflowPolicies.hpp:20
bool handleOverflow(QueuePolicy &queue, EventVariant &&event, EventPriority priority=EventPriority::Normal)
Definition OverflowPolicies.hpp:22
Overflow Policy: Evict oldest event in queue to make room for the new event. Ideal for high-frequency...
Definition OverflowPolicies.hpp:33
bool handleOverflow(QueuePolicy &queue, EventVariant &&event, EventPriority priority=EventPriority::Normal)
Definition OverflowPolicies.hpp:35
Overflow Policy: Trigger assertion / panic when queue fills up. Essential for mission-critical system...
Definition OverflowPolicies.hpp:46
bool handleOverflow(QueuePolicy &queue, EventVariant &&event, EventPriority priority=EventPriority::Normal)
Definition OverflowPolicies.hpp:48