ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
Columnar
ColumnarCore
ColumnarCore
VectorColumn.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
7
8
#ifndef COLUMNAR_CORE_VECTOR_COLUMN_H
9
#define COLUMNAR_CORE_VECTOR_COLUMN_H
10
11
#include <
ColumnarCore/ColumnAccessor.h
>
12
#include <
ColumnarCore/VectorConvertView.h
>
13
#include <span>
14
#include <vector>
15
16
namespace
columnar
17
{
28
29
30
31
namespace
detail
32
{
33
template
<
typename
CT,ColumnarMode CM>
34
requires
(CM::useNestedVectors)
35
class
MemoryAccessor
<std::vector<CT>,CM>
final
36
{
39
public
:
40
41
using
BaseAccessor
=
MemoryAccessor<CT,CM>
;
42
static_assert
(
BaseAccessor::isDefined
,
"Element type for std::vector has no accessor defined. Please check includes and whether the type is supported."
);
43
44
static
constexpr
ColumnAccessMode
CAM
=
ColumnAccessMode::input
;
45
46
static
constexpr
bool
isDefined
=
true
;
47
static
constexpr
bool
viewIsReference
=
false
;
48
static
constexpr
bool
hasSetter
=
false
;
49
using
ElementType
=
typename
BaseAccessor::MemoryType
;
50
using
MemoryType
= std::vector<ElementType>;
51
52
static
void
updateColumnInfo
(
ColumnInfo
&
/*info*/
)
53
{}
54
55
[[nodiscard]]
static
auto
makeViewer
(
void
** dataArea)
56
{
57
if
constexpr
(
BaseAccessor::viewIsReference
)
58
return
[] (
const
MemoryType
& value) {
return
std::span<const ElementType> (value);};
59
else
60
{
61
return
[viewer = BaseAccessor::makeViewer(dataArea)] (
const
MemoryType
& value) {
return
VectorConvertView
(viewer, std::span<const ElementType> (value));};
62
}
63
}
64
};
65
66
67
68
69
// the column accessor for std::vector in ColumnarModeArray
70
//
71
// This is one of the more tricky accessors, as it need to connect to
72
// two underlying columns. The first column is the offset column, the
73
// second is the data column.
74
template
<
typename
CT>
75
requires
(
ContainerFreeAccessor<CT,ColumnAccessMode::input,ColumnarModeArray>::isDefined
)
76
class
ContainerFreeAccessor
<std::vector<CT>,
ColumnAccessMode::input
,
ColumnarModeArray
>
final
77
{
80
public
:
81
82
static
constexpr
ColumnAccessMode
CAM
=
ColumnAccessMode::input
;
83
using
CM
=
ColumnarModeArray
;
84
85
static
constexpr
bool
isDefined
=
true
;
86
static
constexpr
unsigned
internalOffsetColumns
=
ContainerFreeAccessor<CT,ColumnAccessMode::input,ColumnarModeArray>::internalOffsetColumns
+ 1;
87
88
ContainerFreeAccessor
() =
default
;
89
90
ContainerFreeAccessor
(
ColumnarTool<CM>
& columnarTool,
ColumnAccessorOptions
&& options, ColumnAccessorOptionsArray&& optionsArray)
91
{
92
std::string offsetColumn;
93
if
(optionsArray.numOffsets +
internalOffsetColumns
== 1u)
94
offsetColumn = optionsArray.baseName +
".offset"
;
95
else
if
(optionsArray.numOffsets +
internalOffsetColumns
== 2u)
96
{
97
if
(optionsArray.numOffsets == 0u)
98
offsetColumn = optionsArray.baseName +
".outerOffset"
;
99
else
100
offsetColumn = optionsArray.baseName +
".innerOffset"
;
101
}
else
102
{
103
offsetColumn = optionsArray.baseName +
".offset"
+ std::to_string(optionsArray.numOffsets);
104
}
105
106
auto
offsetInfo = options.makeColumnInfo();
107
offsetInfo.offsetName = optionsArray.offsetName;
108
offsetInfo.isOffset =
true
;
109
m_offsetData
= std::make_unique<ColumnAccessorDataArray> (&
m_offsetIndex
, &
m_offsetData
, &
typeid
(
ColumnarOffsetType
),
ColumnAccessMode::input
);
110
columnarTool.addColumn (offsetColumn,
m_offsetData
.get(), std::move (offsetInfo));
111
auto
dataOptions = optionsArray;
112
dataOptions.offsetName = offsetColumn;
113
dataOptions.dataSuffix =
".data"
;
114
dataOptions.numOffsets += 1u;
115
m_dataAccessor
=
ContainerFreeAccessor<CT,ColumnAccessMode::input,CM>
(columnarTool, std::move (options), std::move (dataOptions));
116
}
117
118
ContainerFreeAccessor
(
ContainerFreeAccessor
&& that)
119
:
m_dataAccessor
(
std
::move (that.
m_dataAccessor
))
120
{
121
moveAccessor
(
m_offsetIndex
,
m_offsetData
, that.m_offsetIndex, that.m_offsetData);
122
}
123
124
ContainerFreeAccessor
&
operator =
(
ContainerFreeAccessor
&& that)
125
{
126
if
(
this
!= &that)
127
{
128
moveAccessor
(
m_offsetIndex
,
m_offsetData
, that.m_offsetIndex, that.m_offsetData);
129
m_dataAccessor
= std::move (that.m_dataAccessor);
130
}
131
return
*
this
;
132
}
133
134
auto
operator ()
(
void
** dataArea, std::size_t
index
)
const
noexcept
135
{
136
auto
*offset =
static_cast<
const
ColumnarOffsetType
*
>
(dataArea[
m_offsetIndex
]);
137
return
m_dataAccessor
(dataArea, offset[
index
], offset[
index
+1]);
138
}
139
140
auto
operator ()
(
void
** dataArea, std::size_t beginIndex, std::size_t endIndex)
const
noexcept
141
{
142
auto
*offset =
static_cast<
const
ColumnarOffsetType
*
>
(dataArea[
m_offsetIndex
]);
143
return
detail::VectorConvertView
([&dataAccessor =
m_dataAccessor
, dataArea] (
const
auto
& internalIndex)
noexcept
{
144
const
ColumnarOffsetType
& thisEndIndex = (&internalIndex)[1];
145
return
dataAccessor (dataArea, internalIndex, thisEndIndex);},
146
std::span<const ColumnarOffsetType> (offset + beginIndex, offset + endIndex));
147
}
148
149
bool
isAvailable
(
void
** dataArea)
const
noexcept
150
{
151
return
m_dataAccessor
.isAvailable (dataArea);
152
}
153
156
private
:
157
158
unsigned
m_offsetIndex
= 0u;
159
std::unique_ptr<ColumnAccessorDataArray>
m_offsetData
;
160
ContainerFreeAccessor<CT,ColumnAccessMode::input,ColumnarModeArray>
m_dataAccessor
;
161
};
162
}
163
}
164
165
#endif
operator=
ElementLink & operator=(const ElementLink &)=default
ColumnAccessor.h
operator()
void operator()(T1)
VectorConvertView.h
columnar::ColumnarTool
the base class for all columnar components
Definition
ColumnAccessorDataArray.h:17
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::m_dataAccessor
ContainerFreeAccessor< CT, ColumnAccessMode::input, ColumnarModeArray > m_dataAccessor
Definition
VectorColumn.h:160
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::isDefined
static constexpr bool isDefined
Definition
VectorColumn.h:85
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::internalOffsetColumns
static constexpr unsigned internalOffsetColumns
Definition
VectorColumn.h:86
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::CAM
static constexpr ColumnAccessMode CAM
Definition
VectorColumn.h:82
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::ContainerFreeAccessor
ContainerFreeAccessor()=default
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::isAvailable
bool isAvailable(void **dataArea) const noexcept
Definition
VectorColumn.h:149
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::CM
ColumnarModeArray CM
Definition
VectorColumn.h:83
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::ContainerFreeAccessor
ContainerFreeAccessor(ColumnarTool< CM > &columnarTool, ColumnAccessorOptions &&options, ColumnAccessorOptionsArray &&optionsArray)
Definition
VectorColumn.h:90
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::m_offsetData
std::unique_ptr< ColumnAccessorDataArray > m_offsetData
Definition
VectorColumn.h:159
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::ContainerFreeAccessor
ContainerFreeAccessor(ContainerFreeAccessor &&that)
Definition
VectorColumn.h:118
columnar::detail::ContainerFreeAccessor< std::vector< CT >, ColumnAccessMode::input, ColumnarModeArray >::m_offsetIndex
unsigned m_offsetIndex
Definition
VectorColumn.h:158
columnar::detail::ContainerFreeAccessor::isDefined
static constexpr bool isDefined
Definition
ColumnAccessor.h:119
columnar::detail::MemoryAccessor< CT, CM >::viewIsReference
static constexpr bool viewIsReference
Definition
ColumnAccessor.h:152
columnar::detail::MemoryAccessor< CT, CM >::isDefined
static constexpr bool isDefined
Definition
ColumnAccessor.h:151
columnar::detail::MemoryAccessor< CT, CM >::MemoryType
CT MemoryType
Definition
ColumnAccessor.h:154
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::viewIsReference
static constexpr bool viewIsReference
Definition
VectorColumn.h:47
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::CAM
static constexpr ColumnAccessMode CAM
Definition
VectorColumn.h:44
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::updateColumnInfo
static void updateColumnInfo(ColumnInfo &)
Definition
VectorColumn.h:52
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::hasSetter
static constexpr bool hasSetter
Definition
VectorColumn.h:48
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::makeViewer
static auto makeViewer(void **dataArea)
Definition
VectorColumn.h:55
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::MemoryType
std::vector< ElementType > MemoryType
Definition
VectorColumn.h:50
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::ElementType
typename BaseAccessor::MemoryType ElementType
Definition
VectorColumn.h:49
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::BaseAccessor
MemoryAccessor< CT, CM > BaseAccessor
Definition
VectorColumn.h:41
columnar::detail::MemoryAccessor< std::vector< CT >, CM >::isDefined
static constexpr bool isDefined
Definition
VectorColumn.h:46
columnar::detail::MemoryAccessor
a help implementation of AccessorTemplate that handles type conversions
Definition
ColumnAccessor.h:139
columnar::detail
Container id definitions for the columnar infrastructure.
Definition
ColumnAccessor.h:97
columnar::detail::VectorConvertView
VectorConvertView(FunctionType &&, ViewType &&) -> VectorConvertView< std::decay_t< FunctionType >, std::decay_t< ViewType > >
columnar
Definition
ClusterDef.h:16
columnar::moveAccessor
void moveAccessor(unsigned &dataIndex, std::unique_ptr< ColumnAccessorDataArray > &accessorData, unsigned &sourceIndex, std::unique_ptr< ColumnAccessorDataArray > &sourceData)
Definition
ColumnAccessorDataArray.cxx:30
columnar::ColumnAccessMode
ColumnAccessMode
an enum for the different access modes for a column
Definition
ColumnInfo.h:20
columnar::ColumnAccessMode::input
@ input
an input column
Definition
ColumnInfo.h:22
columnar::ColumnarOffsetType
std::size_t ColumnarOffsetType
the type used for the size and offsets in the columnar data
Definition
ColumnarInterfaces/ColumnarInterfaces/ColumnarDef.h:19
index
Definition
index.py:1
std
STL namespace.
columnar::ColumnAccessorOptions
Definition
ColumnAccessor.h:25
columnar::ColumnInfo
a struct that contains meta-information about each column that's needed to interface the column with ...
Definition
ColumnInfo.h:36
columnar::ColumnarModeArray
Definition
ColumnarCore/ColumnarCore/ColumnarDef.h:45
Generated on
for ATLAS Offline Software by
1.17.0