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

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

245 {
246 for (auto *ptr : m_accessors)
247 {
248 if (ptr->dataRef == this)
249 ptr->dataRef = nullptr;
250 }
251 }

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

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

257 {
258 return m_accessors.empty();
259 }

◆ info()

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

get the column info

Definition at line 263 of file ColumnarToolArray.cxx.

265 {
266 return m_info;
267 }

◆ mergeData()

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

merge the data from another column

Definition at line 317 of file ColumnarToolArray.cxx.

319 {
320 mergeColumnInfo (m_info, other.m_info);
321 addAccessor (name, other.m_info, nullptr);
322 m_accessors.insert (m_accessors.end(), other.m_accessors.begin(), other.m_accessors.end());
323 for (auto *ptr : other.m_accessors)
324 ptr->dataRef = this;
325 other.m_accessors.clear();
326 }
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 305 of file ColumnarToolArray.cxx.

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

◆ setIndex()

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

set the index for this column

Definition at line 330 of file ColumnarToolArray.cxx.

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