DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
datahandlinglibs
include
datahandlinglibs
models
SkipListLatencyBufferModel.hpp
Go to the documentation of this file.
1
8
#ifndef DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_SKIPLISTLATENCYBUFFERMODEL_HPP_
9
#define DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_SKIPLISTLATENCYBUFFERMODEL_HPP_
10
11
#include "
datahandlinglibs/DataHandlingIssues.hpp
"
12
#include "
datahandlinglibs/ReadoutLogging.hpp
"
13
#include "
datahandlinglibs/concepts/LatencyBufferConcept.hpp
"
14
15
#include "
logging/Logging.hpp
"
16
17
#include "folly/ConcurrentSkipList.h"
18
19
#include <memory>
20
#include <utility>
21
22
using
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
;
23
24
namespace
dunedaq
{
25
namespace
datahandlinglibs
{
26
27
template
<
class
T>
28
class
SkipListLatencyBufferModel
:
public
LatencyBufferConcept
<T>
29
{
30
31
public
:
32
// Using shorter Folly typenames
33
using
SkipListT
=
typename
folly::ConcurrentSkipList<T>;
34
using
SkipListTIter
=
typename
SkipListT::iterator;
35
using
SkipListTAcc
=
typename
folly::ConcurrentSkipList<T>::Accessor;
// SKL Accessor
36
using
SkipListTSkip
=
typename
folly::ConcurrentSkipList<T>::Skipper;
// Skipper accessor
37
38
static
constexpr
bool
expects_order
=
false
;
39
40
// Constructor
41
SkipListLatencyBufferModel
()
42
:
m_skip_list
(folly::ConcurrentSkipList<T>::createInstance(
unconfigured_head_height
))
43
{
44
TLOG
(
TLVL_WORK_STEPS
) <<
"Initializing non configured latency buffer"
;
45
}
46
47
// Iterator for SkipList
48
struct
Iterator
49
{
50
using
iterator_category
= std::forward_iterator_tag;
51
using
difference_type
= std::ptrdiff_t;
52
using
value_type
= T;
53
using
pointer
= T*;
54
using
reference
= T&;
55
56
Iterator
(
SkipListTAcc
&& acc,
SkipListTIter
iter)
57
:
m_acc
(
std
::move(acc))
58
,
m_iter
(iter)
59
{}
60
61
reference
operator*
()
const
{
return
*
m_iter
; }
62
pointer
operator->
() {
return
&(*m_iter); }
63
Iterator
&
operator++
()
// NOLINT(runtime/increment_decrement) :)
64
{
65
m_iter
++;
66
return
*
this
;
67
}
68
69
friend
bool
operator==
(
const
Iterator
& a,
const
Iterator
& b) {
return
a.
m_iter
== b.
m_iter
; }
70
friend
bool
operator!=
(
const
Iterator
& a,
const
Iterator
& b) {
return
a.
m_iter
!= b.
m_iter
; }
71
72
bool
good
() {
return
m_iter
.good(); }
73
74
75
private
:
76
SkipListTAcc
m_acc
;
77
SkipListTIter
m_iter
;
78
};
79
80
// Configure
81
void
conf
(
const
appmodel::LatencyBuffer
*
/*conf*/
)
override
82
{
83
// Reset datastructure
84
m_skip_list
= folly::ConcurrentSkipList<T>::createInstance(
unconfigured_head_height
);
85
}
86
87
// Unconfigure
88
void
scrap
(
const
appfwk::DAQModule::CommandData_t&
/*args*/
)
override
89
{
90
// RS -> Cross-check, we don't need to flush first?
91
m_skip_list
= folly::ConcurrentSkipList<T>::createInstance(
unconfigured_head_height
);
92
}
93
94
// Get whole skip-list helper function
95
std::shared_ptr<SkipListT>&
get_skip_list
() {
return
std::ref(
m_skip_list
); }
96
97
// Override interface implementations
98
size_t
occupancy
()
const override
;
99
void
flush
()
override
{
pop
(
occupancy
()); }
100
bool
write
(T&& new_element)
override
;
101
std::pair<const T*, bool>
write_and_return
(T&& new_element);
102
bool
put
(T& new_element);
// override
103
bool
read
(T& element)
override
;
104
105
void
allocate_memory
(
size_t
)
override
106
{
107
TLOG
(TLVL_DEBUG) <<
"SkipListLatencyBufferModel::allocate_memory not implemented."
;
108
}
109
110
// Iterator support
111
Iterator
begin
();
112
Iterator
end
();
113
Iterator
lower_bound
(T& element,
bool
with_errors=
false
);
114
115
// Front/back accessors override
116
const
T*
front
()
override
;
117
const
T*
back
()
override
;
118
119
// Pop X override
120
void
pop
(
size_t
num = 1)
override
;
// NOLINT(build/unsigned)
121
protected
:
122
virtual
void
generate_opmon_data
()
override
;
123
124
private
:
125
// Concurrent SkipList
126
std::shared_ptr<SkipListT>
m_skip_list
;
127
128
// Configuration for datastructure head-hight
129
static
constexpr
uint32_t
unconfigured_head_height
= 2;
// NOLINT(build/unsigned)
130
};
131
132
}
// namespace datahandlinglibs
133
}
// namespace dunedaq
134
135
// Declarations
136
#include "
detail/SkipListLatencyBufferModel.hxx
"
137
138
#endif
// DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_MODELS_SKIPLISTLATENCYBUFFERMODEL_HPP_
DataHandlingIssues.hpp
TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
IfaceWrapper.cpp:52
LatencyBufferConcept.hpp
ReadoutLogging.hpp
SkipListLatencyBufferModel.hxx
dunedaq::appmodel::LatencyBuffer
Definition
LatencyBuffer.hpp:20
dunedaq::datahandlinglibs::LatencyBufferConcept::LatencyBufferConcept
LatencyBufferConcept()
Definition
LatencyBufferConcept.hpp:34
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::occupancy
size_t occupancy() const override
Occupancy of LB.
Definition
SkipListLatencyBufferModel.hxx:10
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::begin
Iterator begin()
Definition
SkipListLatencyBufferModel.hxx:79
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::m_skip_list
std::shared_ptr< SkipListT > m_skip_list
Definition
SkipListLatencyBufferModel.hpp:126
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::lower_bound
Iterator lower_bound(T &element, bool with_errors=false)
Definition
SkipListLatencyBufferModel.hxx:97
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::get_skip_list
std::shared_ptr< SkipListT > & get_skip_list()
Definition
SkipListLatencyBufferModel.hpp:95
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::SkipListTSkip
typename folly::ConcurrentSkipList< T >::Skipper SkipListTSkip
Definition
SkipListLatencyBufferModel.hpp:36
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::SkipListTAcc
typename folly::ConcurrentSkipList< T >::Accessor SkipListTAcc
Definition
SkipListLatencyBufferModel.hpp:35
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::write_and_return
std::pair< const T *, bool > write_and_return(T &&new_element)
Definition
SkipListLatencyBufferModel.hxx:35
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::unconfigured_head_height
static constexpr uint32_t unconfigured_head_height
Definition
SkipListLatencyBufferModel.hpp:129
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::SkipListLatencyBufferModel
SkipListLatencyBufferModel()
Definition
SkipListLatencyBufferModel.hpp:41
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::read
bool read(T &element) override
Move object from LB to referenced.
Definition
SkipListLatencyBufferModel.hxx:63
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::expects_order
static constexpr bool expects_order
Definition
SkipListLatencyBufferModel.hpp:38
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::SkipListTIter
typename SkipListT::iterator SkipListTIter
Definition
SkipListLatencyBufferModel.hpp:34
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::generate_opmon_data
virtual void generate_opmon_data() override
Definition
SkipListLatencyBufferModel.hxx:134
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::SkipListT
typename folly::ConcurrentSkipList< T > SkipListT
Definition
SkipListLatencyBufferModel.hpp:33
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::write
bool write(T &&new_element) override
Move referenced object into LB.
Definition
SkipListLatencyBufferModel.hxx:22
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::scrap
void scrap(const appfwk::DAQModule::CommandData_t &) override
Unconfigure the LB.
Definition
SkipListLatencyBufferModel.hpp:88
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::back
const T * back() override
Get pointer to the back of the LB.
Definition
SkipListLatencyBufferModel.hxx:114
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::conf
void conf(const appmodel::LatencyBuffer *) override
Configure the LB.
Definition
SkipListLatencyBufferModel.hpp:81
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::flush
void flush() override
Flush all elements from the latency buffer.
Definition
SkipListLatencyBufferModel.hpp:99
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::put
bool put(T &new_element)
Definition
SkipListLatencyBufferModel.hxx:50
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::pop
void pop(size_t num=1) override
Definition
SkipListLatencyBufferModel.hxx:122
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::allocate_memory
void allocate_memory(size_t) override
Allocate memory for LB.
Definition
SkipListLatencyBufferModel.hpp:105
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::front
const T * front() override
Get pointer to the front of the LB.
Definition
SkipListLatencyBufferModel.hxx:106
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::end
Iterator end()
Definition
SkipListLatencyBufferModel.hxx:88
Logging.hpp
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
ReadoutLogging.hpp:23
dunedaq::datahandlinglibs
Definition
DataHandlingConcept.hpp:16
dunedaq
Including Qt Headers.
Definition
module.cpp:16
std
Definition
SchemaUtils.hpp:118
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::value_type
T value_type
Definition
SkipListLatencyBufferModel.hpp:52
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::Iterator
Iterator(SkipListTAcc &&acc, SkipListTIter iter)
Definition
SkipListLatencyBufferModel.hpp:56
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::operator!=
friend bool operator!=(const Iterator &a, const Iterator &b)
Definition
SkipListLatencyBufferModel.hpp:70
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::good
bool good()
Definition
SkipListLatencyBufferModel.hpp:72
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::difference_type
std::ptrdiff_t difference_type
Definition
SkipListLatencyBufferModel.hpp:51
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::reference
T & reference
Definition
SkipListLatencyBufferModel.hpp:54
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::operator*
reference operator*() const
Definition
SkipListLatencyBufferModel.hpp:61
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::pointer
T * pointer
Definition
SkipListLatencyBufferModel.hpp:53
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::operator++
Iterator & operator++()
Definition
SkipListLatencyBufferModel.hpp:63
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::m_iter
SkipListTIter m_iter
Definition
SkipListLatencyBufferModel.hpp:77
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::iterator_category
std::forward_iterator_tag iterator_category
Definition
SkipListLatencyBufferModel.hpp:50
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::operator==
friend bool operator==(const Iterator &a, const Iterator &b)
Definition
SkipListLatencyBufferModel.hpp:69
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::operator->
pointer operator->()
Definition
SkipListLatencyBufferModel.hpp:62
dunedaq::datahandlinglibs::SkipListLatencyBufferModel::Iterator::m_acc
SkipListTAcc m_acc
Definition
SkipListLatencyBufferModel.hpp:76
Generated on
for DUNE-DAQ by
1.17.0