FWCore
SOA
interface
Column.h
Go to the documentation of this file.
1
#ifndef FWCore_SOA_Column_h
2
#define FWCore_SOA_Column_h
3
// -*- C++ -*-
4
//
5
// Package: FWCore/SOA
6
// Class : Column
7
//
42
//
43
// Original Author: Chris Jones
44
// Created: Thu, 24 Aug 2017 16:17:56 GMT
45
//
46
47
// system include files
48
49
// user include files
50
51
// forward declarations
52
namespace
edm
{
53
namespace
soa {
54
58
template
<
typename
COL,
typename
F>
59
struct
ColumnFillerHolder
{
60
using
Column_type
= COL;
61
F
m_f
;
62
};
63
64
template
<
typename
T,
typename
INHERIT>
65
struct
Column
{
66
using
type
=
T
;
67
68
static
constexpr
const
char
*
const
&
label
() {
return
INHERIT::kLabel; }
69
70
template
<
typename
F>
71
static
ColumnFillerHolder<INHERIT, F>
filler
(
F
&& iF) {
72
return
{iF};
73
}
74
75
private
:
76
Column
() =
default
;
77
Column
(
const
Column
&) =
delete
;
// stop default
78
79
const
Column
&
operator=
(
const
Column
&) =
delete
;
// stop default
80
};
81
82
}
// namespace soa
83
}
// namespace edm
84
85
#define SOA_DECLARE_COLUMN(_ClassName_, _Type_, _String_) \
86
struct _ClassName_ : public edm::soa::Column<_Type_, _ClassName_> { \
87
static constexpr const char* const kLabel = _String_; \
88
}
89
90
/*
91
* SOA_DECLARE_DEFAULT macro to define a default way to retrieve the column
92
* values from an arbitrary class, i.e. a templated value_for_column function.
93
* A call to the macro should be placed in edm::soa namespace.
94
*
95
* This templated value_for_column function has the advantage that
96
* value_for_column does not have to be redefined for multiple classes with a
97
* similar interface, but it has one caveat: if a different value_for_column
98
* function needs to be defined for a given class, it needs to be defined also
99
* for all derived classes, otherwise the templated value_for_column function
100
* will still be used for the derived classes.
101
*
102
* If this becomes a real problem, the SOA_DECLARE_DEFAULT can be changed to
103
* define a value_for_column_default() function, and all callers of
104
* value_for_column() check the existence of a value_for_column_default()
105
* overload first.
106
*
107
* For now, it is encouraged to adapt the interface of the class to the generic
108
* value_for_column function generated by this macro, rather than implementing
109
* value_for_column overloads for each class.
110
*/
111
#define SOA_DECLARE_DEFAULT(_ClassName_, _Expression_) \
112
template <class Object> \
113
_ClassName_::type value_for_column(Object const& x, _ClassName_*) { \
114
return x._Expression_; \
115
}
116
#endif
edm::soa::Column::label
static constexpr const char *const & label()
Definition:
Column.h:68
edm
HLT enums.
Definition:
AlignableModifier.h:19
edm::soa::Column< int, MissingInnerHits >::type
int type
Definition:
Column.h:66
F
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition:
blowfish.cc:163
edm::soa::Column::filler
static ColumnFillerHolder< INHERIT, F > filler(F &&iF)
Definition:
Column.h:71
edm::soa::Column::Column
Column()=default
edm::soa::ColumnFillerHolder::m_f
F m_f
Definition:
Column.h:61
edm::soa::ColumnFillerHolder::Column_type
COL Column_type
Definition:
Column.h:60
T
long double T
Definition:
Basic3DVectorLD.h:48
edm::soa::Column
Definition:
Column.h:65
edm::soa::Column::operator=
const Column & operator=(const Column &)=delete
edm::soa::ColumnFillerHolder
Definition:
Column.h:59
Generated for CMSSW Reference Manual by
1.8.16