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 nlohmann::json &) 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
 

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 39 of file SkipListLatencyBufferModel.hpp.

40 : m_skip_list(folly::ConcurrentSkipList<T>::createInstance(unconfigured_head_height))
41 {
42 TLOG(TLVL_WORK_STEPS) << "Initializing non configured latency buffer";
43 }
#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 102 of file SkipListLatencyBufferModel.hpp.

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

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

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

◆ begin()

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

Definition at line 62 of file SkipListLatencyBufferModel.hxx.

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

◆ 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 79 of file SkipListLatencyBufferModel.hpp.

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

◆ end()

Definition at line 71 of file SkipListLatencyBufferModel.hxx.

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

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

90{
92 return acc.first();
93}

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

117 {
118 opmon::LatencyBufferInfo info;
119 info.set_num_buffer_elements(occupancy());
120 this->publish(std::move(info));
121}
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 93 of file SkipListLatencyBufferModel.hpp.

93{ 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 80 of file SkipListLatencyBufferModel.hxx.

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

◆ occupancy()

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

Occupancy of LB.

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

Definition at line 8 of file SkipListLatencyBufferModel.hxx.

9{
10 auto occupancy = 0;
11 {
13 occupancy = acc.size();
14 }
15 return occupancy;
16}

◆ pop()

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

Definition at line 105 of file SkipListLatencyBufferModel.hxx.

106{
107 {
109 for (unsigned i = 0; i < num; ++i) {
110 acc.pop_back();
111 }
112 }
113}

◆ put()

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

Definition at line 33 of file SkipListLatencyBufferModel.hxx.

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

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

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

◆ scrap()

template<class T >
void dunedaq::datahandlinglibs::SkipListLatencyBufferModel< T >::scrap ( const nlohmann::json & cfg)
inlineoverridevirtual

Unconfigure the LB.

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

Definition at line 86 of file SkipListLatencyBufferModel.hpp.

87 {
88 // RS -> Cross-check, we don't need to flush first?
89 m_skip_list = folly::ConcurrentSkipList<T>::createInstance(unconfigured_head_height);
90 }

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

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

Member Data Documentation

◆ m_skip_list

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

Definition at line 123 of file SkipListLatencyBufferModel.hpp.

◆ unconfigured_head_height

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

Definition at line 126 of file SkipListLatencyBufferModel.hpp.


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