DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T > Class Template Reference

#include <SkipListLatencyBufferModel.hpp>

Inheritance diagram for dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >:
[legend]
Collaboration diagram for dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >:
[legend]

Classes

struct  Iterator

Public Types

using SkipListT = typename folly::ConcurrentSkipList<T>
using SkipListTIter = typename SkipListT::iterator
using SkipListTAcc = typename folly::ConcurrentSkipList<T>::Accessor
using SkipListTSkip = typename folly::ConcurrentSkipList<T>::Skipper
Public Types inherited from dunedaq::opmonlib::MonitorableObject
using NodePtr = std::weak_ptr<MonitorableObject>
using NewNodePtr = std::shared_ptr<MonitorableObject>
using ElementId = std::string

Public Member Functions

 SkipListLatencyBufferModel ()
void conf (const appmodel::LatencyBuffer *) override
 Configure the LB.
void scrap (const appfwk::DAQModule::CommandData_t &) override
 Unconfigure the LB.
std::shared_ptr< SkipListT > & get_skip_list ()
size_t occupancy () const override
 Occupancy of LB.
void flush () override
 Flush all elements from the latency buffer.
bool write (T &&new_element) override
 Move referenced object into LB.
std::pair< const T *, boolwrite_and_return (T &&new_element)
bool put (T &new_element)
bool read (T &element) override
 Move object from LB to referenced.
void allocate_memory (size_t) override
 Allocate memory for LB.
Iterator begin ()
Iterator end ()
Iterator lower_bound (T &element, bool with_errors=false)
const T * front () override
 Get pointer to the front of the LB.
const T * back () override
 Get pointer to the back of the LB.
void pop (size_t num=1) override
Public Member Functions inherited from dunedaq::datahandlinglibs::LatencyBufferConcept< T >
 LatencyBufferConcept ()
virtual ~LatencyBufferConcept ()
 LatencyBufferConcept (const LatencyBufferConcept &)=delete
 LatencyBufferConcept is not copy-constructible.
LatencyBufferConceptoperator= (const LatencyBufferConcept &)=delete
 LatencyBufferConcept is not copy-assginable.
 LatencyBufferConcept (LatencyBufferConcept &&)=delete
 LatencyBufferConcept is not move-constructible.
LatencyBufferConceptoperator= (LatencyBufferConcept &&)=delete
 LatencyBufferConcept is not move-assignable.
virtual void pop (std::size_t amount)=0
 Pop specified amount of elements from LB.
Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject (const MonitorableObject &)=delete
MonitorableObjectoperator= (const MonitorableObject &)=delete
 MonitorableObject (MonitorableObject &&)=delete
MonitorableObjectoperator= (MonitorableObject &&)=delete
virtual ~MonitorableObject ()=default
auto get_opmon_id () const noexcept
auto get_opmon_level () const noexcept

Static Public Attributes

static constexpr bool expects_order = false

Protected Member Functions

virtual void generate_opmon_data () override
Protected Member Functions inherited from dunedaq::opmonlib::MonitorableObject
 MonitorableObject ()=default
void register_node (ElementId name, NewNodePtr)
void publish (google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept

Private Attributes

std::shared_ptr< SkipListTm_skip_list

Static Private Attributes

static constexpr uint32_t unconfigured_head_height = 2

Additional Inherited Members

Static Public Member Functions inherited from dunedaq::opmonlib::MonitorableObject
static bool publishable_metric (OpMonLevel entry, OpMonLevel system) noexcept

Detailed Description

template<class T>
class dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >

Definition at line 28 of file SkipListLatencyBufferModel.hpp.

Member Typedef Documentation

◆ SkipListT

template<class T>
using dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::SkipListT = typename folly::ConcurrentSkipList<T>

Definition at line 33 of file SkipListLatencyBufferModel.hpp.

◆ SkipListTAcc

template<class T>
using dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::SkipListTAcc = typename folly::ConcurrentSkipList<T>::Accessor

Definition at line 35 of file SkipListLatencyBufferModel.hpp.

◆ SkipListTIter

template<class T>
using dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::SkipListTIter = typename SkipListT::iterator

Definition at line 34 of file SkipListLatencyBufferModel.hpp.

◆ SkipListTSkip

template<class T>
using dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::SkipListTSkip = typename folly::ConcurrentSkipList<T>::Skipper

Definition at line 36 of file SkipListLatencyBufferModel.hpp.

Constructor & Destructor Documentation

◆ SkipListLatencyBufferModel()

Member Function Documentation

◆ allocate_memory()

template<class T>
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::allocate_memory ( size_t )
inlineoverridevirtual

Allocate memory for LB.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 105 of file SkipListLatencyBufferModel.hpp.

106 {
107 TLOG(TLVL_DEBUG) << "SkipListLatencyBufferModel::allocate_memory not implemented.";
108 }

◆ back()

template<class T>
const T * dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::back ( )
overridevirtual

Get pointer to the back of the LB.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 114 of file SkipListLatencyBufferModel.hxx.

115{
117 return acc.last();
118}
typename folly::ConcurrentSkipList< T >::Accessor SkipListTAcc

◆ begin()

◆ conf()

template<class T>
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::conf ( const appmodel::LatencyBuffer * conf)
inlineoverridevirtual

◆ end()

◆ flush()

template<class T>
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::flush ( )
inlineoverridevirtual

Flush all elements from the latency buffer.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 99 of file SkipListLatencyBufferModel.hpp.

◆ front()

template<class T>
const T * dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::front ( )
overridevirtual

Get pointer to the front of the LB.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 106 of file SkipListLatencyBufferModel.hxx.

107{
109 return acc.first();
110}

◆ generate_opmon_data()

template<class T>
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::generate_opmon_data ( )
overrideprotectedvirtual

Hook for customisable pubblication. The function can throw, exception will be caught by the monitoring thread

Reimplemented from dunedaq::opmonlib::MonitorableObject.

Definition at line 134 of file SkipListLatencyBufferModel.hxx.

134 {
136 info.set_num_buffer_elements(occupancy());
137 this->publish(std::move(info));
138}
void publish(google::protobuf::Message &&, CustomOrigin &&co={}, OpMonLevel l=to_level(EntryOpMonLevel::kDefault)) const noexcept

◆ get_skip_list()

template<class T>
std::shared_ptr< SkipListT > & dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::get_skip_list ( )
inline

Definition at line 95 of file SkipListLatencyBufferModel.hpp.

95{ return std::ref(m_skip_list); }

◆ lower_bound()

◆ occupancy()

template<class T>
size_t dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::occupancy ( ) const
overridevirtual

Occupancy of LB.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 10 of file SkipListLatencyBufferModel.hxx.

11{
12 auto occupancy = 0;
13 {
15 occupancy = acc.size();
16 }
17 return occupancy;
18}

◆ pop()

template<class T>
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::pop ( size_t num = 1)
override

Definition at line 122 of file SkipListLatencyBufferModel.hxx.

123{
124 {
126 for (unsigned i = 0; i < num; ++i) {
127 acc.pop_back();
128 }
129 }
130}

◆ put()

template<class T>
bool dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::put ( T & new_element)

Definition at line 50 of file SkipListLatencyBufferModel.hxx.

51{
52 bool success = false;
53 {
55 auto ret = acc.insert(new_element); // ret T = std::pair<iterator, bool>
56 success = ret.second;
57 }
58 return success;
59}

◆ read()

template<class T>
bool dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::read ( T & element)
overridevirtual

Move object from LB to referenced.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 63 of file SkipListLatencyBufferModel.hxx.

64{
65 bool found = false;
66 {
68 auto lb_node = acc.begin();
69 found = (lb_node == acc.end()) ? false : true;
70 if (found) {
72 }
73 }
74 return found;
75}

◆ scrap()

template<class T>
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::scrap ( const appfwk::DAQModule::CommandData_t & cfg)
inlineoverridevirtual

Unconfigure the LB.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 88 of file SkipListLatencyBufferModel.hpp.

89 {
90 // RS -> Cross-check, we don't need to flush first?
92 }

◆ write()

template<class T>
bool dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::write ( T && element)
overridevirtual

Move referenced object into LB.

Implements dunedaq::datahandlinglibs::LatencyBufferConcept< T >.

Definition at line 22 of file SkipListLatencyBufferModel.hxx.

23{
24 bool success = false;
25 {
27 auto ret = acc.insert(std::move(new_element)); // ret T = std::pair<iterator, bool>
28 success = ret.second;
29 }
30 return success;
31}

◆ write_and_return()

template<class T>
std::pair< const T *, bool > dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::write_and_return ( T && new_element)

Definition at line 35 of file SkipListLatencyBufferModel.hxx.

36{
37 const T* written = nullptr;
38 bool success = false;
39 {
41 const auto [iter, result] = acc.insert(std::move(new_element));
42 written = &(*iter);
44 }
45 return {written, success};
46}

Member Data Documentation

◆ expects_order

template<class T>
bool dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::expects_order = false
staticconstexpr

Definition at line 38 of file SkipListLatencyBufferModel.hpp.

◆ m_skip_list

template<class T>
std::shared_ptr<SkipListT> dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::m_skip_list
private

Definition at line 126 of file SkipListLatencyBufferModel.hpp.

◆ unconfigured_head_height

template<class T>
uint32_t dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::unconfigured_head_height = 2
staticconstexprprivate

Definition at line 129 of file SkipListLatencyBufferModel.hpp.


The documentation for this class was generated from the following files: