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.
 
bool put (T &new_element)
 
bool read (T &element) override
 Move object from LB to referenced.
 
void allocate_memory (size_t) override
 Whether or not the buffer is allocatable. false by default.
 
Iterator begin ()
 
Iterator end ()
 
Iterator lower_bound (T &element, bool with_errors=false)
 
const T * front () override
 Write referenced object into LB without moving it.
 
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 supports_delayed_postprocessing = true
 

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()

template<class T >
dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::SkipListLatencyBufferModel ( )
inline

Definition at line 41 of file SkipListLatencyBufferModel.hpp.

42 : m_skip_list(folly::ConcurrentSkipList<T>::createInstance(unconfigured_head_height))
43 {
44 TLOG(TLVL_WORK_STEPS) << "Initializing non configured latency buffer";
45 }
#define TLOG(...)
Definition macro.hpp:22

Member Function Documentation

◆ allocate_memory()

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

Whether or not the buffer is allocatable. false by default.

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

Definition at line 104 of file SkipListLatencyBufferModel.hpp.

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

◆ 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 99 of file SkipListLatencyBufferModel.hxx.

100{
102 return acc.last();
103}
typename folly::ConcurrentSkipList< T >::Accessor SkipListTAcc

◆ begin()

template<class T >
SkipListLatencyBufferModel< T >::Iterator dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::begin ( )

Definition at line 64 of file SkipListLatencyBufferModel.hxx.

65{
67 SkipListTIter iter = acc.begin();
68 return std::move(SkipListLatencyBufferModel<T>::Iterator(std::move(acc), iter));
69}

◆ conf()

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

Configure the LB.

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

Definition at line 81 of file SkipListLatencyBufferModel.hpp.

82 {
83 // Reset datastructure
84 m_skip_list = folly::ConcurrentSkipList<T>::createInstance(unconfigured_head_height);
85 }

◆ end()

Definition at line 73 of file SkipListLatencyBufferModel.hxx.

74{
76 SkipListTIter iter = acc.end();
77 return std::move(SkipListLatencyBufferModel<T>::Iterator(std::move(acc), iter));
78}

◆ 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

Write referenced object into LB without moving it.

Get pointer to the front of the LB

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

Definition at line 91 of file SkipListLatencyBufferModel.hxx.

92{
94 return acc.first();
95}

◆ 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 119 of file SkipListLatencyBufferModel.hxx.

119 {
120 opmon::LatencyBufferInfo info;
121 info.set_num_buffer_elements(occupancy());
122 this->publish(std::move(info));
123}
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()

template<class T >
SkipListLatencyBufferModel< T >::Iterator dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::lower_bound ( T & element,
bool with_errors = false )

Definition at line 82 of file SkipListLatencyBufferModel.hxx.

83{
85 SkipListTIter iter = acc.lower_bound(element);
86 return std::move(SkipListLatencyBufferModel<T>::Iterator(std::move(acc), iter));
87}

◆ 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 107 of file SkipListLatencyBufferModel.hxx.

108{
109 {
111 for (unsigned i = 0; i < num; ++i) {
112 acc.pop_back();
113 }
114 }
115}

◆ put()

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

Definition at line 35 of file SkipListLatencyBufferModel.hxx.

36{
37 bool success = false;
38 {
40 auto ret = acc.insert(new_element); // ret T = std::pair<iterator, bool>
41 success = ret.second;
42 }
43 return success;
44}

◆ 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 48 of file SkipListLatencyBufferModel.hxx.

49{
50 bool found = false;
51 {
53 auto lb_node = acc.begin();
54 found = (lb_node == acc.end()) ? false : true;
55 if (found) {
56 element = *lb_node;
57 }
58 }
59 return found;
60}

◆ 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?
91 m_skip_list = folly::ConcurrentSkipList<T>::createInstance(unconfigured_head_height);
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}

Member Data Documentation

◆ m_skip_list

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

Definition at line 125 of file SkipListLatencyBufferModel.hpp.

◆ supports_delayed_postprocessing

template<class T >
bool dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::supports_delayed_postprocessing = true
staticconstexpr

Definition at line 38 of file SkipListLatencyBufferModel.hpp.

◆ unconfigured_head_height

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

Definition at line 128 of file SkipListLatencyBufferModel.hpp.


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