Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 210 of file ColumnarToolArray.cxx.

212  : m_info (std::move (other.m_info))
213  , m_accessors (std::move (other.m_accessors))
214  {
215  for (auto *ptr : m_accessors)
216  {
217  if (ptr->dataRef == &other)
218  ptr->dataRef = this;
219  }
220  }

◆ ~ColumnDataArray()

columnar::ColumnDataArray::~ColumnDataArray ( )
noexcept

standard destructor

Definition at line 224 of file ColumnarToolArray.cxx.

226  {
227  for (auto *ptr : m_accessors)
228  {
229  if (ptr->dataRef == this)
230  ptr->dataRef = nullptr;
231  }
232  }

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

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

◆ empty()

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

whether this column has no associated accessors

Definition at line 236 of file ColumnarToolArray.cxx.

238  {
239  return m_accessors.empty();
240  }

◆ info()

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

get the column info

Definition at line 244 of file ColumnarToolArray.cxx.

246  {
247  return m_info;
248  }

◆ mergeData()

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

merge the data from another column

Definition at line 298 of file ColumnarToolArray.cxx.

300  {
301  addAccessor (name, other.m_info, nullptr);
302  m_accessors.insert (m_accessors.end(), other.m_accessors.begin(), other.m_accessors.end());
303  for (auto *ptr : other.m_accessors)
304  ptr->dataRef = this;
305  other.m_accessors.clear();
306  }

◆ operator=()

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

◆ removeAccessor()

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

remove an accessor data object

Definition at line 286 of file ColumnarToolArray.cxx.

288  {
289  auto iter = std::find (m_accessors.begin(), m_accessors.end(), &val_accessorData);
290  if (iter == m_accessors.end())
291  return;
292  m_accessors.erase (iter);
293  val_accessorData.dataRef = nullptr;
294  }

◆ setIndex()

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

set the index for this column

Definition at line 327 of file ColumnarToolArray.cxx.

329  {
330  m_info.index = index;
331  for (auto *ptr : m_accessors)
332  *ptr->dataIndexPtr = index;
333  }

◆ updateColumnRef()

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

rename columns

Definition at line 310 of file ColumnarToolArray.cxx.

312  {
313  auto remapName = [&] (std::string& name)
314  {
315  if (name == from)
316  name = to;
317  };
318 
323  }

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:
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::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::ColumnInfo::linkToName
std::string linkToName
the name of the column we link to (or empty string if we don't link to a column)
Definition: ColumnInfo.h:138
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:253
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
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:364
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