ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType > Class Template Reference

Helper class which adds a range check to an array access if NDEBUG is not defined. More...

#include <TargetBuffer_t.h>

Collaboration diagram for TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >:

Public Member Functions

 BufferBase_t (T_VectorType &buffer)
 
const T_BaseType & operator[] (typename std::vector< T_BaseType >::size_type idx) const
 
const T_BaseType & upper_bound_at (typename std::vector< T_BaseType >::size_type idx) const
 

Protected Member Functions

template<typename T1 , typename T2 , typename T3 >
 BufferBase_t (const BufferBase_t< T1, T2, T3 > &buffer)
 
template<typename T1 , typename T2 , typename T3 >
BufferBase_toperator= (const BufferBase_t< T1, T2, T3 > &buffer)
 
 BufferBase_t (T_BufferType *buffer, typename std::vector< T_BaseType >::size_type max_idx[[maybe_unused]], const std::vector< double > &full_vector[[maybe_unused]])
 
std::vector< T_BaseType >::size_type optionalRangeCheck (typename std::vector< T_BaseType >::size_type idx) const
 
std::vector< T_BaseType >::size_type optionalRangeCheckUpperBound (typename std::vector< T_BaseType >::size_type idx) const
 
void throwRangeError (typename std::vector< T_BaseType >::size_type idx) const
 

Protected Attributes

T_BufferType * m_ptr
 
std::vector< T_BaseType >::size_type m_maxIndex
 
const T_BaseType * m_bufferStart
 
const T_BaseType * m_bufferEnd
 

Friends

class DoubleBuffer_t
 
template<typename T1 , typename T2 , typename T3 >
class BufferBase_t
 

Detailed Description

template<typename T_BaseType, typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
class TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >

Helper class which adds a range check to an array access if NDEBUG is not defined.

The helper class only provides read only access to the array, but allows a derived class to add write access if permitted by the base type.

Definition at line 22 of file TargetBuffer_t.h.

Constructor & Destructor Documentation

◆ BufferBase_t() [1/3]

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::BufferBase_t ( T_VectorType &  buffer)
inline

Definition at line 27 of file TargetBuffer_t.h.

28  : m_ptr (&(buffer[0]))
29 #ifndef NDEBUG
30  // debug code
31  , m_maxIndex(buffer.size())
32  , m_bufferStart(buffer.data())
33  , m_bufferEnd(m_bufferStart + buffer.size())//assumed contiguous
34 #endif
35  {
36  // cppcheck-suppress missingReturn; false positive
37  }

◆ BufferBase_t() [2/3]

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
template<typename T1 , typename T2 , typename T3 >
TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::BufferBase_t ( const BufferBase_t< T1, T2, T3 > &  buffer)
inlineprotected

Definition at line 42 of file TargetBuffer_t.h.

43  : m_ptr(buffer.m_ptr)
44 #ifndef NDEBUG
45  , m_maxIndex(buffer.m_maxIndex)
46  , m_bufferStart(buffer.m_bufferStart)
47  , m_bufferEnd(buffer.m_bufferEnd)
48 #endif
49  {
50  // cppcheck-suppress missingReturn; false positive
51  }

◆ BufferBase_t() [3/3]

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::BufferBase_t ( T_BufferType *  buffer,
typename std::vector< T_BaseType >::size_type max_idx]  [[maybe_unused],
const std::vector< double > &full_vector]  [[maybe_unused] 
)
inlineprotected

Definition at line 67 of file TargetBuffer_t.h.

70  : m_ptr(buffer)
71 #ifndef NDEBUG
72  // debug code
73  , m_maxIndex(max_idx)
74  , m_bufferStart(full_vector.data())
75  , m_bufferEnd(m_bufferStart+full_vector.size())//assumed contiguous
76 #endif
77  {
78  }

Member Function Documentation

◆ operator=()

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
template<typename T1 , typename T2 , typename T3 >
BufferBase_t& TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::operator= ( const BufferBase_t< T1, T2, T3 > &  buffer)
inlineprotected

Definition at line 55 of file TargetBuffer_t.h.

56  {
57  m_ptr=buffer.m_ptr;
58 #ifndef NDEBUG
59  m_maxIndex=buffer.m_maxIndex;
60  m_bufferStart=buffer.m_bufferStart;
61  m_bufferEnd=buffer.m_bufferEnd;
62 #endif
63  return *this;
64  }

◆ operator[]()

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
const T_BaseType& TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::operator[] ( typename std::vector< T_BaseType >::size_type  idx) const
inline

Definition at line 81 of file TargetBuffer_t.h.

81  {
82  return m_ptr[optionalRangeCheck(idx)];
83  }

◆ optionalRangeCheck()

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
std::vector<T_BaseType>::size_type TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::optionalRangeCheck ( typename std::vector< T_BaseType >::size_type  idx) const
inlineprotected

Definition at line 100 of file TargetBuffer_t.h.

100  {
101  if (idx>=m_maxIndex || &(m_ptr[idx])<m_bufferStart || &(m_ptr[idx])>=m_bufferEnd) {
103  }
104  return idx;
105  }

◆ optionalRangeCheckUpperBound()

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
std::vector<T_BaseType>::size_type TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::optionalRangeCheckUpperBound ( typename std::vector< T_BaseType >::size_type  idx) const
inlineprotected

Definition at line 106 of file TargetBuffer_t.h.

106  {
107  // allow for idx==0
108  if (idx>0 && (idx-1>=m_maxIndex || &(m_ptr[idx-1])<m_bufferStart || &(m_ptr[idx-1])>=m_bufferEnd)) {
110  }
111  return idx;
112  }

◆ throwRangeError()

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
void TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::throwRangeError ( typename std::vector< T_BaseType >::size_type  idx) const
protected

◆ upper_bound_at()

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
const T_BaseType& TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::upper_bound_at ( typename std::vector< T_BaseType >::size_type  idx) const
inline

Definition at line 85 of file TargetBuffer_t.h.

85  {
87  }

Friends And Related Function Documentation

◆ BufferBase_t

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
template<typename T1 , typename T2 , typename T3 >
friend class BufferBase_t
friend

Definition at line 24 of file TargetBuffer_t.h.

◆ DoubleBuffer_t

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
friend class DoubleBuffer_t
friend

Definition at line 23 of file TargetBuffer_t.h.

Member Data Documentation

◆ m_bufferEnd

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
const T_BaseType* TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::m_bufferEnd
protected

Definition at line 117 of file TargetBuffer_t.h.

◆ m_bufferStart

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
const T_BaseType* TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::m_bufferStart
protected

Definition at line 116 of file TargetBuffer_t.h.

◆ m_maxIndex

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
std::vector<T_BaseType>::size_type TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::m_maxIndex
protected

Definition at line 115 of file TargetBuffer_t.h.

◆ m_ptr

template<typename T_BaseType , typename T_BufferType = const T_BaseType, typename T_VectorType = const std::vector<T_BaseType>>
T_BufferType* TTN::BufferBase_t< T_BaseType, T_BufferType, T_VectorType >::m_ptr
protected

Definition at line 90 of file TargetBuffer_t.h.


The documentation for this class was generated from the following file:
TTN::BufferBase_t::optionalRangeCheck
std::vector< T_BaseType >::size_type optionalRangeCheck(typename std::vector< T_BaseType >::size_type idx) const
Definition: TargetBuffer_t.h:100
TTN::BufferBase_t::m_bufferStart
const T_BaseType * m_bufferStart
Definition: TargetBuffer_t.h:116
createCoolChannelIdFile.buffer
buffer
Definition: createCoolChannelIdFile.py:12
TTN::BufferBase_t::m_ptr
T_BufferType * m_ptr
Definition: TargetBuffer_t.h:90
TTN::BufferBase_t::m_bufferEnd
const T_BaseType * m_bufferEnd
Definition: TargetBuffer_t.h:117
TTN::BufferBase_t::throwRangeError
void throwRangeError(typename std::vector< T_BaseType >::size_type idx) const
TTN::BufferBase_t::m_maxIndex
std::vector< T_BaseType >::size_type m_maxIndex
Definition: TargetBuffer_t.h:115
TTN::BufferBase_t::optionalRangeCheckUpperBound
std::vector< T_BaseType >::size_type optionalRangeCheckUpperBound(typename std::vector< T_BaseType >::size_type idx) const
Definition: TargetBuffer_t.h:106
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69