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

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

◆ 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

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

◆ 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) {
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?
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: