DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
fddetdataformats
include
fddetdataformats
FrameConcepts.hpp
Go to the documentation of this file.
1
23
24
#ifndef FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_FRAMECONCEPTS_HPP_
25
#define FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_FRAMECONCEPTS_HPP_
26
27
#include "
detdataformats/DAQEthHeader.hpp
"
28
#include "
detdataformats/DAQHeader.hpp
"
29
30
#include <concepts>
31
#include <cstdint>
32
33
namespace
dunedaq::fddetdataformats
{
34
35
template
<
typename
T>
36
concept
HasGetADC
= std::is_member_function_pointer_v<
decltype
(&T::get_adc)>;
37
38
template
<
typename
T>
39
concept
HasSetADC
= std::is_member_function_pointer_v<
decltype
(&T::set_adc)>;
40
41
template
<
typename
T>
42
concept
HasDAQHeader
=
requires
(
const
T t) { t.daq_header; } &&
43
(std::same_as<decltype(std::declval<T>().daq_header),
dunedaq::detdataformats::DAQEthHeader
> ||
44
std::same_as<
decltype
(std::declval<T>().daq_header),
dunedaq::detdataformats::DAQHeader
>);
45
46
template
<
typename
T>
47
concept
HasFrameHeader
=
requires
(
const
T t) { t.header; };
// NOLINT(readability/braces)
48
49
// Instead of std::totally_ordered, this just literally only requires the "<" operator
50
template
<
typename
T>
51
concept
HasLessThan
=
requires
(
const
T a,
const
T b) {
52
{ a < b } -> std::convertible_to<bool>;
53
};
// NOLINT(readability/braces)
54
55
template
<
typename
T>
56
concept
HasNoCompilerPadding
=
requires
{
57
// "convertible_to" is used rather than "same_as" because s_expected_bytes is typically constexpr
58
{ T::s_expected_bytes } -> std::convertible_to<std::size_t>;
59
} && (T::s_expected_bytes ==
sizeof
(T));
60
61
template
<
typename
T>
62
concept
HasGetTimestamp
=
requires
(
const
T ct) {
63
{ ct.get_timestamp() } -> std::same_as<uint64_t>;
// NOLINT(build/unsigned)
64
};
// NOLINT(readability/braces)
65
66
template
<
typename
T>
67
concept
HasSetTimestamp
=
requires
(T t, uint64_t ts)
// NOLINT(build/unsigned)
68
{
69
{ t.set_timestamp(ts) } -> std::same_as<void>;
70
};
// NOLINT(readability/braces)
71
72
// TODO: John Freeman (jcfree@fnal.gov), Jun-17-2026
73
74
// In the next two months, figure out a concept parallel to
75
// AdaptableFrameConcept which can be made specific to the type
76
// adapters in fdreadoutlibs (as opposed to, e.g.,
77
// TriggerPrimitiveTypeAdapter.hpp in trigger). This can include
78
// concepts commented out below like "has an ADC getter", etc.)
79
80
template
<
typename
T>
81
concept
AdaptableFrameConcept
=
82
HasNoCompilerPadding<T>
&&
HasLessThan<T>
&&
83
// HasGetADC<T> &&
84
// HasSetADC<T> &&
85
// HasDAQHeader<T> &&
86
// HasFrameHeader<T> &&
87
HasGetTimestamp<T>
&&
HasSetTimestamp<T>
&& std::is_standard_layout_v<T> && std::is_trivially_copyable_v<T>;
88
89
}
// namespace dunedaq::fddetdataformats
90
91
#endif
// FDDETDATAFORMATS_INCLUDE_FDDETDATAFORMATS_FRAMECONCEPTS_HPP_
DAQEthHeader.hpp
DAQHeader.hpp
dunedaq::fddetdataformats::AdaptableFrameConcept
Definition
FrameConcepts.hpp:81
dunedaq::fddetdataformats::HasDAQHeader
Definition
FrameConcepts.hpp:42
dunedaq::fddetdataformats::HasFrameHeader
Definition
FrameConcepts.hpp:47
dunedaq::fddetdataformats::HasGetADC
Definition
FrameConcepts.hpp:36
dunedaq::fddetdataformats::HasGetTimestamp
Definition
FrameConcepts.hpp:62
dunedaq::fddetdataformats::HasLessThan
Definition
FrameConcepts.hpp:51
dunedaq::fddetdataformats::HasNoCompilerPadding
Definition
FrameConcepts.hpp:56
dunedaq::fddetdataformats::HasSetADC
Definition
FrameConcepts.hpp:39
dunedaq::fddetdataformats::HasSetTimestamp
Definition
FrameConcepts.hpp:67
dunedaq::fddetdataformats
Definition
CRTBernFrame.hpp:29
dunedaq::detdataformats::DAQEthHeader
DAQEthHeader is a versioned and unified structure for every FE electronics.
Definition
DAQEthHeader.hpp:23
dunedaq::detdataformats::DAQHeader
DAQHeader is a versioned and unified structure for every FE electronics.
Definition
DAQHeader.hpp:23
Generated on
for DUNE-DAQ by
1.18.0