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 updateColumnRef (const std::string &from, const std::string &to)
 rename columns 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 215 of file ColumnarToolArray.cxx.

217  : m_info (std::move (other.m_info))
218  , m_accessors (std::move (other.m_accessors))
219  {
220  for (auto *ptr : m_accessors)
221  {
222  if (ptr->dataRef == &other)
223  ptr->dataRef = this;
224  }
225  }

◆ ~ColumnDataArray()

columnar::ColumnDataArray::~ColumnDataArray ( )
noexcept

standard destructor

Definition at line 229 of file ColumnarToolArray.cxx.

231  {
232  for (auto *ptr : m_accessors)
233  {
234  if (ptr->dataRef == this)
235  ptr->dataRef = nullptr;
236  }
237  }

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

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

◆ empty()

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

whether this column has no associated accessors

Definition at line 241 of file ColumnarToolArray.cxx.

243  {
244  return m_accessors.empty();
245  }

◆ info()

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

get the column info

Definition at line 249 of file ColumnarToolArray.cxx.

251  {
252  return m_info;
253  }

◆ mergeData()

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

merge the data from another column

Definition at line 303 of file ColumnarToolArray.cxx.

305  {
306  addAccessor (name, other.m_info, nullptr);
307  m_accessors.insert (m_accessors.end(), other.m_accessors.begin(), other.m_accessors.end());
308  for (auto *ptr : other.m_accessors)
309  ptr->dataRef = this;
310  other.m_accessors.clear();
311  }

◆ operator=()

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

◆ removeAccessor()

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

remove an accessor data object

Definition at line 291 of file ColumnarToolArray.cxx.

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

◆ setIndex()

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

set the index for this column

Definition at line 334 of file ColumnarToolArray.cxx.

336  {
337  m_info.index = index;
338  for (auto *ptr : m_accessors)
339  *ptr->dataIndexPtr = index;
340  }

◆ updateColumnRef()

void columnar::ColumnDataArray::updateColumnRef ( const std::string &  from,
const std::string &  to 
)

rename columns

Definition at line 315 of file ColumnarToolArray.cxx.

317  {
318  auto remapName = [&] (std::string& name)
319  {
320  if (name == from)
321  name = to;
322  };
323 
327  for (auto& linkTargetName : m_info.linkTargetNames)
328  remapName (linkTargetName);
330  }

Member Data Documentation

◆ m_accessors

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

the data on all accessors for this column

Definition at line 56 of file ColumnarToolDataArray.h.

◆ m_info

ColumnInfo columnar::ColumnDataArray::m_info
private

the column info

Definition at line 53 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::name
std::string name
the name of the column
Definition: ColumnInfo.h:42
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
columnar::ColumnInfo::variantLinkKeyColumn
std::string variantLinkKeyColumn
if this is a variant link column, this is the name of the column with the container keys
Definition: ColumnInfo.h:169
columnar::ColumnInfo::replacesColumn
std::string replacesColumn
whether this replaces another column
Definition: ColumnInfo.h:102
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:258
columnar::ColumnInfo::isOptional
bool isOptional
whether this column is optional
Definition: ColumnInfo.h:121
columnar::ColumnAccessMode::update
@ update
an updateable column
FlavorTagInference::str::remapName
const std::string remapName(const std::string &name, std::map< std::string, std::string > &remap, std::set< std::string > &usedRemap)
Definition: PhysicsAnalysis/JetTagging/FlavorTagInference/Root/StringUtils.cxx:8
columnar::ColumnInfo::linkTargetNames
std::vector< std::string > linkTargetNames
for link columns: the name(s) of the container(s) we link to
Definition: ColumnInfo.h:154
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
CxxUtils::to
CONT to(RANGE &&r)
Definition: ranges.h:39
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:53
columnar::ColumnDataArray::m_accessors
std::vector< ColumnAccessorDataArray * > m_accessors
the data on all accessors for this column
Definition: ColumnarToolDataArray.h:56