camcom 1.0.0-pre2
 
Loading...
Searching...
No Matches
queue.hpp
Go to the documentation of this file.
1
8
9#ifndef CAMCOM_COMMON_FRAMEQUEUE_HPP
10#define CAMCOM_COMMON_FRAMEQUEUE_HPP
11
12#include <cstdint>
13#include <iostream>
14#include <mutex>
15#include <queue>
16#include <string>
17#include <cmath>
18#include <chrono>
19
21#include "ifw/fnd/defs/base.hpp"
22
23namespace camcom::common {
24
25 template <typename QueueType>
26 class Queue {
27 public:
28 std::string m_queue_id;
29 unsigned int m_max_size;
30
32 m_queue_id = "";
33 m_max_size = 0;
34 };
35
36 Queue(unsigned int max_size, std::string id) {
37 m_queue_id = id;
38 m_max_size = max_size;
39 };
40
41
42 virtual size_t GetSize() {
43 size_t size;
44 const std::lock_guard<std::mutex> lock(m_mutex);
45 size = m_queue.size();
46 return size;
47 }
48
49 virtual void Clear() {
50 FNDTRACE();
51 std::queue<QueueType> new_queue = std::queue<QueueType>();
52 const std::lock_guard<std::mutex> lock(m_mutex);
53 std::swap(new_queue, m_queue);
54 }
55
56 virtual void Push(QueueType value) {
57 FNDTRACE();
58 auto size = GetSize();
59 const std::lock_guard<std::mutex> lock(m_mutex);
60
61 if (size == this->m_max_size) {
63
65 FNDWARNING(
66 "Queue full; first item lost; has occurred {} "
67 "times in last {}us",
69 std::chrono::duration_cast<std::chrono::microseconds>(
70 m_log_full_push_timer).count());
71
74 }
75
76 m_queue.pop();
77 }
78
79 m_queue.push(value);
80 }
81
82 virtual bool Pop(QueueType &value) {
83 FNDTRACE();
84 const std::lock_guard<std::mutex> lock(m_mutex);
85 if (m_queue.empty()) {
86 return false;
87 }
88 value = m_queue.front();
89 m_queue.pop();
90 return true;
91 }
92
93 virtual void Pop() {
94 FNDTRACE();
95 const std::lock_guard<std::mutex> lock(m_mutex);
96 m_queue.pop();
97 }
98
99 protected:
100 std::queue<QueueType> m_queue;
101 std::chrono::time_point<std::chrono::system_clock>
104 std::mutex m_mutex;
105 std::chrono::duration<double_t> m_log_full_push_timer{std::chrono::duration<double_t>(10)};
106 };
107}
108
109#endif
virtual bool Pop(QueueType &value)
Definition queue.hpp:82
std::queue< QueueType > m_queue
Definition queue.hpp:100
virtual void Clear()
Definition queue.hpp:49
std::string m_queue_id
Definition queue.hpp:28
virtual void Pop()
Definition queue.hpp:93
virtual size_t GetSize()
Definition queue.hpp:42
virtual void Push(QueueType value)
Definition queue.hpp:56
std::mutex m_mutex
Definition queue.hpp:104
Queue(unsigned int max_size, std::string id)
Definition queue.hpp:36
Queue()
Definition queue.hpp:31
unsigned int m_max_size
Definition queue.hpp:29
std::chrono::duration< double_t > m_log_full_push_timer
Definition queue.hpp:105
uint32_t m_queue_full_push_count
Definition queue.hpp:103
std::chrono::time_point< std::chrono::system_clock > m_last_queue_full_push_err
Definition queue.hpp:102
Definition adapterBase.cpp:18
std::chrono::time_point< std::chrono::system_clock > TimeNow()
Definition tools.cpp:19
Header file for the CamCom Common Library Tools.