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
ColumnDataArrayoperator= (ColumnDataArray &&other) noexcept=default
 ~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 232 of file ColumnarToolArray.cxx.

234 : m_info (std::move (other.m_info))
235 , m_accessors (std::move (other.m_accessors))
236 {
237 for (auto *ptr : m_accessors)
238 {
239 if (ptr->dataRef == &other)
240 ptr->dataRef = this;
241 }
242 }
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 246 of file ColumnarToolArray.cxx.

248 {
249 for (auto *ptr : m_accessors)
250 {
251 if (ptr->dataRef == this)
252 ptr->dataRef = nullptr;
253 }
254 }

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 274 of file ColumnarToolArray.cxx.

276 {
277 if (m_accessors.empty())
278 {
279 m_info = val_info;
280
281 // ensure that any index is not zero. zero is reserved for a
282 // nullptr, so that if an index has never been initialized, we
283 // get a segfault on access.
284 m_info.index = 0;
285 } else
286 {
287 if (val_info.type != m_info.type)
288 throw std::runtime_error ("multiple types for column: " + name);
289 if (m_info.accessMode == ColumnAccessMode::update || val_info.accessMode == ColumnAccessMode::update)
290 m_info.accessMode = ColumnAccessMode::update;
291 else if (m_info.accessMode == ColumnAccessMode::output || val_info.accessMode == ColumnAccessMode::output)
292 m_info.accessMode = ColumnAccessMode::output;
293 if (!val_info.isOptional)
294 m_info.isOptional = false;
295 if (val_info.offsetName != m_info.offsetName)
296 throw std::runtime_error ("inconsistent offset map for column: " + name);
297 }
298
299 if (val_accessorData)
300 {
301 m_accessors.push_back (val_accessorData);
302 val_accessorData->dataRef = this;
303 }
304 }
@ 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 258 of file ColumnarToolArray.cxx.

260 {
261 return m_accessors.empty();
262 }

◆ info()

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

get the column info

Definition at line 266 of file ColumnarToolArray.cxx.

268 {
269 return m_info;
270 }

◆ mergeData()

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

merge the data from another column

Definition at line 320 of file ColumnarToolArray.cxx.

322 {
323 mergeColumnInfo (m_info, other.m_info);
324 addAccessor (name, other.m_info, nullptr);
325 m_accessors.insert (m_accessors.end(), other.m_accessors.begin(), other.m_accessors.end());
326 for (auto *ptr : other.m_accessors)
327 ptr->dataRef = this;
328 other.m_accessors.clear();
329 }
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)
defaultnoexcept

◆ removeAccessor()

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

remove an accessor data object

Definition at line 308 of file ColumnarToolArray.cxx.

310 {
311 auto iter = std::find (m_accessors.begin(), m_accessors.end(), &val_accessorData);
312 if (iter == m_accessors.end())
313 return;
314 m_accessors.erase (iter);
315 val_accessorData.dataRef = nullptr;
316 }

◆ setIndex()

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

set the index for this column

Definition at line 333 of file ColumnarToolArray.cxx.

335 {
336 m_info.index = index;
337 for (auto *ptr : m_accessors)
338 *ptr->dataIndexPtr = index;
339 }
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: