ATLAS Offline Software
Loading...
Searching...
No Matches
columnar::ColumnDataArray Struct Referencefinal

#include <ColumnarToolDataArray.h>

Collaboration diagram for columnar::ColumnDataArray:

Public Member Functions

 ColumnDataArray () noexcept=default
 standard constructor
 ColumnDataArray (ColumnDataArray &&other) noexcept
 standard move constructor
ColumnDataArray operator= (ColumnDataArray &&other) noexcept=delete
 ~ColumnDataArray () noexcept
 standard destructor
bool empty () const noexcept
 whether this column has no associated accessors
const ColumnInfoinfo () const noexcept
 get the column info
void addAccessor (const std::string &name, const ColumnInfo &val_info, ColumnAccessorDataArray *val_accessorData)
 add an info to the column
void removeAccessor (ColumnAccessorDataArray &val_accessorData)
 remove an accessor data object
void mergeData (const std::string &name, ColumnDataArray &&other)
 merge the data from another column
void setIndex (unsigned val_index) noexcept
 set the index for this column

Private Attributes

ColumnInfo m_info
 the column info
std::vector< ColumnAccessorDataArray * > m_accessors
 the data on all accessors for this column

Detailed Description

Definition at line 16 of file ColumnarToolDataArray.h.

Constructor & Destructor Documentation

◆ ColumnDataArray() [1/2]

columnar::ColumnDataArray::ColumnDataArray ( )
defaultnoexcept

standard constructor

◆ ColumnDataArray() [2/2]

columnar::ColumnDataArray::ColumnDataArray ( ColumnDataArray && other)
noexcept

standard move constructor

Definition at line 218 of file ColumnarToolArray.cxx.

220 : m_info (std::move (other.m_info))
221 , m_accessors (std::move (other.m_accessors))
222 {
223 for (auto *ptr : m_accessors)
224 {
225 if (ptr->dataRef == &other)
226 ptr->dataRef = this;
227 }
228 }
void * ptr(T *p)
Definition SGImplSvc.cxx:74
std::vector< ColumnAccessorDataArray * > m_accessors
the data on all accessors for this column
ColumnInfo m_info
the column info

◆ ~ColumnDataArray()

columnar::ColumnDataArray::~ColumnDataArray ( )
noexcept

standard destructor

Definition at line 232 of file ColumnarToolArray.cxx.

234 {
235 for (auto *ptr : m_accessors)
236 {
237 if (ptr->dataRef == this)
238 ptr->dataRef = nullptr;
239 }
240 }

Member Function Documentation

◆ addAccessor()

void columnar::ColumnDataArray::addAccessor ( const std::string & name,
const ColumnInfo & val_info,
ColumnAccessorDataArray * val_accessorData )

add an info to the column

Definition at line 260 of file ColumnarToolArray.cxx.

262 {
263 if (m_accessors.empty())
264 {
265 m_info = val_info;
266
267 // ensure that any index is not zero. zero is reserved for a
268 // nullptr, so that if an index has never been initialized, we
269 // get a segfault on access.
270 m_info.index = 0;
271 } else
272 {
273 if (val_info.type != m_info.type)
274 throw std::runtime_error ("multiple types for column: " + name);
275 if (m_info.accessMode == ColumnAccessMode::update || val_info.accessMode == ColumnAccessMode::update)
276 m_info.accessMode = ColumnAccessMode::update;
277 else if (m_info.accessMode == ColumnAccessMode::output || val_info.accessMode == ColumnAccessMode::output)
278 m_info.accessMode = ColumnAccessMode::output;
279 if (!val_info.isOptional)
280 m_info.isOptional = false;
281 if (val_info.offsetName != m_info.offsetName)
282 throw std::runtime_error ("inconsistent offset map for column: " + name);
283 }
284
285 if (val_accessorData)
286 {
287 m_accessors.push_back (val_accessorData);
288 val_accessorData->dataRef = this;
289 }
290 }
@ update
an updateable column
Definition ColumnInfo.h:27
@ output
an output column
Definition ColumnInfo.h:24

◆ empty()

bool columnar::ColumnDataArray::empty ( ) const
noexcept

whether this column has no associated accessors

Definition at line 244 of file ColumnarToolArray.cxx.

246 {
247 return m_accessors.empty();
248 }

◆ info()

const ColumnInfo & columnar::ColumnDataArray::info ( ) const
noexcept

get the column info

Definition at line 252 of file ColumnarToolArray.cxx.

254 {
255 return m_info;
256 }

◆ mergeData()

void columnar::ColumnDataArray::mergeData ( const std::string & name,
ColumnDataArray && other )

merge the data from another column

Definition at line 306 of file ColumnarToolArray.cxx.

308 {
309 mergeColumnInfo (m_info, other.m_info);
310 addAccessor (name, other.m_info, nullptr);
311 m_accessors.insert (m_accessors.end(), other.m_accessors.begin(), other.m_accessors.end());
312 for (auto *ptr : other.m_accessors)
313 ptr->dataRef = this;
314 other.m_accessors.clear();
315 }
void mergeColumnInfo(ColumnInfo &target, const ColumnInfo &source)
void addAccessor(const std::string &name, const ColumnInfo &val_info, ColumnAccessorDataArray *val_accessorData)
add an info to the column

◆ operator=()

ColumnDataArray columnar::ColumnDataArray::operator= ( ColumnDataArray && other)
deletenoexcept

◆ removeAccessor()

void columnar::ColumnDataArray::removeAccessor ( ColumnAccessorDataArray & val_accessorData)

remove an accessor data object

Definition at line 294 of file ColumnarToolArray.cxx.

296 {
297 auto iter = std::find (m_accessors.begin(), m_accessors.end(), &val_accessorData);
298 if (iter == m_accessors.end())
299 return;
300 m_accessors.erase (iter);
301 val_accessorData.dataRef = nullptr;
302 }

◆ setIndex()

void columnar::ColumnDataArray::setIndex ( unsigned val_index)
noexcept

set the index for this column

Definition at line 319 of file ColumnarToolArray.cxx.

321 {
322 m_info.index = index;
323 for (auto *ptr : m_accessors)
324 *ptr->dataIndexPtr = index;
325 }
str index
Definition DeMoScan.py:362

Member Data Documentation

◆ m_accessors

std::vector<ColumnAccessorDataArray*> columnar::ColumnDataArray::m_accessors
private

the data on all accessors for this column

Definition at line 53 of file ColumnarToolDataArray.h.

◆ m_info

ColumnInfo columnar::ColumnDataArray::m_info
private

the column info

Definition at line 50 of file ColumnarToolDataArray.h.


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