ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
columnar::ColumnDataArray Struct Referencefinal

#include <ColumnarToolDataArray.h>

Collaboration diagram for columnar::ColumnDataArray:

Public Member Functions

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

Private Attributes

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

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  }

◆ ~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)
288  else if (m_info.accessMode == ColumnAccessMode::output || val_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  }

◆ 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  }

◆ 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  }

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:
createLinkingScheme.iter
iter
Definition: createLinkingScheme.py:62
columnar::ColumnInfo::accessMode
ColumnAccessMode accessMode
the access mode for the column
Definition: ColumnInfo.h:58
columnar::ColumnInfo::offsetName
std::string offsetName
the name of the offset column used for this column (or empty string for none)
Definition: ColumnInfo.h:74
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
columnar::ColumnInfo::type
const std::type_info * type
the type of the individual entries in the column
Definition: ColumnInfo.h:54
columnar::ColumnAccessMode::output
@ output
an output column
columnar::ColumnDataArray::addAccessor
void addAccessor(const std::string &name, const ColumnInfo &val_info, ColumnAccessorDataArray *val_accessorData)
add an info to the column
Definition: ColumnarToolArray.cxx:272
columnar::ColumnInfo::isOptional
bool isOptional
whether this column is optional
Definition: ColumnInfo.h:121
columnar::ColumnAccessMode::update
@ update
an updateable column
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
columnar::mergeColumnInfo
void mergeColumnInfo(ColumnInfo &target, const ColumnInfo &source)
Definition: ColumnInfoHelpers.cxx:34
DeMoScan.index
string index
Definition: DeMoScan.py:362
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
columnar::ColumnInfo::index
unsigned index
the index of the column in the data array
Definition: ColumnInfo.h:46
columnar::ColumnDataArray::m_info
ColumnInfo m_info
the column info
Definition: ColumnarToolDataArray.h:50
columnar::ColumnDataArray::m_accessors
std::vector< ColumnAccessorDataArray * > m_accessors
the data on all accessors for this column
Definition: ColumnarToolDataArray.h:53