ATLAS Offline Software
RootAuxVectorFactory.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
17 #include "AthLinks/ElementLinkBase.h"
18 #include "CxxUtils/ClassName.h"
20 #include "TClass.h"
21 #include "TVirtualCollectionProxy.h"
22 #include "TROOT.h"
23 #include <iostream>
24 #include <stdexcept>
25 
26 
27 namespace {
28 
29 
38 TClass* lookupVectorType (TClass *cl)
39 {
40  std::string tname = cl->GetName();
41  tname += "::vector_type";
42  TDataType* typ = gROOT->GetType (tname.c_str());
43  if (typ)
44  return TClass::GetClass (typ->GetFullTypeName());
45  return nullptr;
46 }
47 
48 
49 } // anonymous namespace
50 
51 
52 namespace SG {
53 
54 
64  SG::auxid_t auxid,
65  size_t size, size_t /*capacity*/,
66  bool isLinked)
67  : IAuxTypeVector (auxid, isLinked),
68  m_factory (factory),
69  m_ownFlag (true)
70 {
71  const TClass* vecClass = factory->vecClass();
72  m_proxy.reset (vecClass->GetCollectionProxy()->Generate());
73  m_obj = factory->objClass()->New ();
74  m_vec = reinterpret_cast<char*> (m_obj) + factory->offset();
75  m_proxy->PushProxy (m_vec);
76  this->resize (size);
77 }
78 
79 
96  SG::auxid_t auxid,
97  void* data,
98  bool isPacked,
99  bool ownFlag,
100  bool isLinked)
101  : IAuxTypeVector (auxid, isLinked),
102  m_factory (factory),
103  m_ownFlag (ownFlag)
104 {
105  if (isPacked) std::abort();
106  const TClass* vecClass = factory->vecClass();
107  m_proxy.reset (vecClass->GetCollectionProxy()->Generate());
108  m_obj = data;
109  m_vec = reinterpret_cast<char*> (m_obj) + factory->offset();
110  m_proxy->PushProxy (m_vec);
111 }
112 
113 
119  : IAuxTypeVector (other),
120  m_factory (other.m_factory),
121  m_proxy (other.m_proxy->Generate()),
122  m_ownFlag (true)
123 {
124  m_obj = m_factory->objClass()->New ();
125  m_vec = reinterpret_cast<char*> (m_obj) + m_factory->offset();
126  m_proxy->PushProxy (m_vec);
127  size_t sz = other.size();
128  this->resize (sz);
129 
130  if (sz > 0) {
132  const void* otherPtr = other.toPtr();
133  rootType.copyRange (this->toPtr(), otherPtr, sz);
134  }
135 }
136 
137 
144 {
145  if (m_ownFlag)
146  m_factory->objClass()->Destructor (m_obj);
147 }
148 
149 
153 std::unique_ptr<SG::IAuxTypeVector> RootAuxVector::clone() const
154 {
155  return std::make_unique<RootAuxVector> (*this);
156 }
157 
158 
163 {
164  if (m_proxy->Size() == 0)
165  return 0;
166  return m_proxy->At(0);
167 }
168 
169 
173 const void* RootAuxVector::toPtr () const
174 {
175  if (m_proxy->Size() == 0)
176  return 0;
177  TVirtualCollectionProxy* proxy ATLAS_THREAD_SAFE = m_proxy.get();
178  return proxy->At(0);
179 }
180 
181 
186 {
187  return m_obj;
188 }
189 
190 
194 size_t RootAuxVector::size() const
195 {
196  return m_proxy->Size();
197 }
198 
199 
207 {
208  const void* orig = this->toPtr();
209  m_proxy->Allocate(sz, false);
210  return this->toPtr() == orig;
211 }
212 
213 
218 void RootAuxVector::reserve (size_t /*sz*/)
219 {
220 }
221 
222 
249 bool RootAuxVector::shift (size_t pos, ptrdiff_t offs)
250 {
251  size_t eltsz = m_proxy->GetIncrement();
252 
254 
255  if (offs < 0) {
256  if (-offs > static_cast<ptrdiff_t>(pos)) offs = -pos;
257  char* beg = reinterpret_cast<char*>(m_proxy->At(0));
258  rootType.copyRange (beg + eltsz*(pos+offs),
259  beg + eltsz*pos,
260  m_proxy->Size() - pos);
261  m_proxy->Allocate (m_proxy->Size() + offs, false);
262  return true;
263  }
264  else if (offs > 0) {
265  size_t oldsz = m_proxy->Size();
266  m_proxy->Allocate (oldsz + offs, false);
267  char* beg = reinterpret_cast<char*>(m_proxy->At(0));
268  if (pos < oldsz)
269  rootType.copyRange (beg + eltsz*(pos+offs),
270  beg + eltsz*pos,
271  oldsz - pos);
272  rootType.clearRange (beg + eltsz*pos, offs);
273  return false;
274  }
275  return true;
276 }
277 
278 
300 bool RootAuxVector::insertMove (size_t pos, void* beg, void* end,
301  SG::IAuxStore& /*srcStore*/)
302 {
303  size_t eltsz = m_proxy->GetIncrement();
304  const void* orig = this->toPtr();
306 
307  char* begp = reinterpret_cast<char*> (beg);
308  char* endp = reinterpret_cast<char*> (end);
309  size_t nelt = (endp-begp) / eltsz;
310 
311  shift (pos, nelt);
312  // FIXME: want move, not copy.
313  // But i don't seem to be able to call move operations through cling,
314  // so just use copy for now.
315  rootType.copyRange (reinterpret_cast<char*>(this->toPtr()) + pos*eltsz,
316  beg, nelt);
317  return this->toPtr() == orig;
318 }
319 
320 
332 const std::type_info* RootAuxVector::objType() const
333 {
334  return m_factory->objClass()->GetTypeInfo();
335 }
336 
337 
338 //==================================================================
339 
340 
346  : m_objClass (objClass),
347  m_vecClass (objClass),
348  m_offset (0),
349  m_isEL (NONE)
350 {
351  TVirtualCollectionProxy* proxy = m_vecClass->GetCollectionProxy();
352 
353  if (!proxy) {
354  TClass* vecClass = lookupVectorType (objClass);
355  if (vecClass) {
356  m_vecClass = vecClass;
357  Int_t offs = objClass->GetBaseClassOffset (vecClass);
358  if (offs >= 0) {
359  m_offset = offs;
360  proxy = vecClass->GetCollectionProxy();
361  }
362  else {
363  ATHCONTAINERS_ERROR("RootAuxVectorFactory::RootAuxVectorFactory",
364  std::string("Can't find vector base class in ") +
365  objClass->GetName());
366  }
367  }
368  }
369 
370  if (!proxy) {
371  std::string err = "Can't find collection proxy for ";
372  err += m_vecClass->GetName();
373  throw std::runtime_error (err.c_str());
374  }
375 
376  if (m_vecClass->GetTypeInfo() == 0) {
377  ATHCONTAINERS_ERROR("RootAuxVectorFactory::RootAuxVectorFactory",
378  std::string("No type_info available for class ") +
379  m_vecClass->GetName() +
380  std::string(". There is probably a missing dictionary. We will likely crash further on."));
381  }
382 
383  TClass* eltClass = proxy->GetValueClass();
384  if (eltClass) {
385  m_type.init (eltClass);
386 
387  const std::type_info* ti = eltClass->GetTypeInfo();
388  if (ti) {
389 
390  static const CxxUtils::ClassName pat1 ("ElementLink<$T>");
391  static const CxxUtils::ClassName pat2 ("std::vector<ElementLink<$T> >");
392 
395  if (clname.match (pat1, matches)) {
397  if (eltClass->GetBaseClass ("ElementLinkBase") == nullptr) {
399  }
400  }
401  else if (clname.match (pat2, matches)) {
403 
404  TVirtualCollectionProxy* proxy2 = eltClass->GetCollectionProxy();
405  if (proxy2) {
406  TClass* innerEltClass = proxy2->GetValueClass();
407  if (innerEltClass) {
408  if (innerEltClass->GetBaseClass ("ElementLinkBase") == nullptr) {
410  }
411  }
412  }
413  }
414  }
415  }
416  else
417  m_type.init (proxy->GetType());
418 }
419 
420 
425 {
426 }
427 
428 
436 std::unique_ptr<SG::IAuxTypeVector>
438  size_t size,
439  size_t capacity,
440  bool isLinked) const
441 {
442  return std::make_unique<RootAuxVector> (this, auxid, size, capacity,
443  isLinked);
444 }
445 
446 
467 std::unique_ptr<SG::IAuxTypeVector>
469  void* data,
470  IAuxTypeVector* linkedVector,
471  bool isPacked,
472  bool ownFlag,
473  bool isLinked) const
474 {
475  if (linkedVector) std::abort();
476  return std::make_unique<RootAuxVector> (this, auxid, data, isPacked, ownFlag,
477  isLinked);
478 }
479 
480 
484  AuxVectorData& dst,
485  size_t dst_index,
486  const AuxVectorData& src,
487  size_t src_index,
488  size_t n) const
489 {
490  if (n == 0) return nullptr;
491  size_t eltsz = m_type.getSize();
492  char* dstptr = reinterpret_cast<char*> (dst.getDataArray (auxid));
493  if (&src == &dst) {
494  // Source and destination containers are the same,
495  // so we don't need to bother with fetching the src pointer.
496  // copyRange properly handles overlapping regions.
497  m_type.copyRange (dstptr + eltsz*dst_index, dstptr + eltsz*src_index, n);
498  return dstptr + eltsz*dst_index;
499  }
500  else {
501  const char* srcptr = reinterpret_cast<const char*>(src.getDataArrayAllowMissing (auxid));
502  if (srcptr) {
503  m_type.copyRange (dstptr + eltsz*dst_index, srcptr + eltsz*src_index, n);
504  return dstptr + eltsz*dst_index;
505  }
506  else {
507  m_type.clearRange (dstptr + eltsz*dst_index, n);
508  return nullptr;
509  }
510  }
511 }
512 
513 
526  AuxVectorData& dst,
527  size_t dst_index,
528  const AuxVectorData& src,
529  size_t src_index,
530  size_t n) const
531 {
532  (void)copyImpl (auxid, dst, dst_index, src, src_index, n);
533 }
534 
535 
549  AuxVectorData& dst, size_t dst_index,
550  const AuxVectorData& src, size_t src_index,
551  size_t n) const
552 {
553  char* dstptr = copyImpl (auxid, dst, dst_index, src, src_index, n);
554 
555  if (m_isEL == ELEMENT_LINK) {
556  size_t eltsz = m_type.getSize();
557  for (size_t i = 0; i < n; i++) {
558  reinterpret_cast<ElementLinkBase*>(dstptr + i*eltsz)->thin();
559  }
560  }
561  else if (m_isEL == ELEMENT_LINK_VECTOR) {
562  size_t eltsz = m_type.getSize();
563  for (size_t i = 0; i < n; i++) {
564  std::vector<ElementLinkBase>& v =
565  *reinterpret_cast<std::vector<ElementLinkBase>* > (dstptr +i*eltsz);
566  for (ElementLinkBase& el : v) {
567  el.thin();
568  }
569  }
570  }
571  else if (m_isEL == ELEMENT_LINK_NONPOINTER) {
572  ATHCONTAINERS_ERROR("RootAuxVectorFactory::copyForOutput",
573  std::string("Cannot apply thinning for ElementLink with non-pointer element: ") +
574  m_vecClass->GetName());
575  }
576 }
577 
578 
592  AuxVectorData& a, size_t aindex,
593  AuxVectorData& b, size_t bindex,
594  size_t n) const
595 {
596  if (n == 0) return;
597  void* aptr = a.getDataArray (auxid);
598  void* bptr = &a == &b ? aptr : b.getDataArray (auxid);
599  m_type.swapRange (aptr, aindex, bptr, bindex, n);
600 }
601 
602 
611  AuxVectorData& dst, size_t dst_index,
612  size_t n) const
613 {
614  if (n == 0) return;
615  m_type.clearRange (dst.getDataArray (auxid), dst_index, n);
616 }
617 
618 
623 {
624  return m_type.getSize();
625 }
626 
627 
631 const std::type_info* RootAuxVectorFactory::tiVec() const
632 {
633  return m_objClass->GetTypeInfo();
634 }
635 
636 
643 {
644  return true;
645 }
646 
647 
653 const std::type_info* RootAuxVectorFactory::tiAlloc() const
654 {
655  return nullptr;
656 }
657 
658 
663 {
664  std::string name = SG::normalizedTypeinfoName (*m_vecClass->GetTypeInfo());
666  std::string alloc_name;
667  if (cn.ntargs() >= 2) {
668  alloc_name = cn.targ(1).fullName();
669  }
670  else if (cn.ntargs() == 1) {
671  alloc_name = "std::allocator<" + cn.targ(0).fullName();
672  if (alloc_name[alloc_name.size()-1] == '>') alloc_name += " ";
673  alloc_name += ">";
674  }
675  return alloc_name;
676 }
677 
678 
679 } // namespace SG
SG::RootAuxVector::toPtr
virtual void * toPtr() override
Return a pointer to the start of the vector's data.
Definition: RootAuxVectorFactory.cxx:162
SG::RootAuxVector::toVector
virtual void * toVector() override
Return a pointer to the overall object.
Definition: RootAuxVectorFactory.cxx:185
ClassName.h
Recursively separate out template arguments in a C++ class name.
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
RootUtils::Type::swapRange
void swapRange(void *a, size_t a_index, void *b, size_t b_index, size_t n) const
Swap a range of objects between vectors.
Definition: Type.cxx:567
SG::AuxVectorData::getDataArray
const void * getDataArray(SG::auxid_t auxid) const
Return a const pointer to the start of an aux data vector.
SG::RootAuxVector::reserve
virtual void reserve(size_t sz) override
Change the capacity of the vector.
Definition: RootAuxVectorFactory.cxx:218
RootUtils::Type::init
void init(const std::string &typname)
Initialize from a type name.
Definition: Type.cxx:154
SG::RootAuxVector::m_ownFlag
bool m_ownFlag
Should be delete the vector object?
Definition: RootAuxVectorFactory.h:239
fitman.sz
sz
Definition: fitman.py:527
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:392
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
SG::RootAuxVector::clone
virtual std::unique_ptr< SG::IAuxTypeVector > clone() const override
Make a copy of this vector.
Definition: RootAuxVectorFactory.cxx:153
SG::RootAuxVectorFactory::isDynamic
virtual bool isDynamic() const override
True if the vectors created by this factory work by dynamic emulation (via TVirtualCollectionProxy or...
Definition: RootAuxVectorFactory.cxx:642
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
SG::normalizedTypeinfoName
std::string normalizedTypeinfoName(const std::type_info &info)
Convert a type_info to a normalized string representation (matching the names used in the root dictio...
Definition: normalizedTypeinfoName.cxx:120
SG::RootAuxVectorFactory::m_isEL
enum SG::RootAuxVectorFactory::@28 m_isEL
Flag to tell whether we need to do thinning.
ATHCONTAINERS_ERROR
#define ATHCONTAINERS_ERROR(ctx, msg)
Definition: error.h:50
SG::RootAuxVector::shift
virtual bool shift(size_t pos, ptrdiff_t offs) override
Shift the elements of the vector.
Definition: RootAuxVectorFactory.cxx:249
SG::RootAuxVectorFactory::m_type
RootUtils::Type m_type
Wrapper for the ROOT type of the element.
Definition: RootAuxVectorFactory.h:469
SG::RootAuxVector::m_obj
void * m_obj
Pointer to the overall object itself.
Definition: RootAuxVectorFactory.h:233
SG::RootAuxVectorFactory::clear
virtual void clear(SG::auxid_t auxid, AuxVectorData &dst, size_t dst_index, size_t n) const override
Clear a range of elements within a vector.
Definition: RootAuxVectorFactory.cxx:610
SG::RootAuxVectorFactory::tiAllocName
virtual std::string tiAllocName() const override
Return the (demangled) name of the vector allocator.
Definition: RootAuxVectorFactory.cxx:662
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
ElementLinkBase
Base class for ElementLinks to vectors of pointers.
Definition: AthLinks/ElementLinkBase.h:59
RootUtils::Type::getSize
size_t getSize() const
Return the size in bytes of an instance of the described type.
Definition: Type.cxx:375
SG::RootAuxVectorFactory::m_offset
size_t m_offset
Offset of the STL vector within the overall object.
Definition: RootAuxVectorFactory.h:466
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
SG::RootAuxVector::m_factory
const RootAuxVectorFactory * m_factory
Pointer back to the factory class for this type.
Definition: RootAuxVectorFactory.h:224
SG::RootAuxVectorFactory::RootAuxVectorFactory
RootAuxVectorFactory(TClass *objClass)
Constructor.
Definition: RootAuxVectorFactory.cxx:345
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
SG::RootAuxVectorFactory::rootType
const RootUtils::Type & rootType() const
Return the ROOT type wrapper.
Definition: RootAuxVectorFactory.h:280
SG::RootAuxVector::size
virtual size_t size() const override
Return the size of the vector.
Definition: RootAuxVectorFactory.cxx:194
SG::RootAuxVector::insertMove
virtual bool insertMove(size_t pos, void *beg, void *end, SG::IAuxStore &srcStore) override
Insert elements into the vector via move semantics.
Definition: RootAuxVectorFactory.cxx:300
CxxUtils::ClassName::ntargs
size_t ntargs() const
Return number of template arguments.
Definition: ClassName.cxx:275
CxxUtils::ClassName
Recursively separate out template arguments in a C++ class name.
Definition: CxxUtils/CxxUtils/ClassName.h:101
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
lumiFormat.i
int i
Definition: lumiFormat.py:92
RootUtils::Type::clearRange
void clearRange(void *dst, size_t n) const
Clear a range of objects.
Definition: Type.cxx:420
beamspotman.n
n
Definition: beamspotman.py:731
SG::RootAuxVectorFactory::offset
size_t offset() const
Return the offset of the vector within the object.
Definition: RootAuxVectorFactory.h:302
CxxUtils::ClassName::fullName
std::string fullName() const
Return the full name of the expression.
Definition: ClassName.cxx:252
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
error.h
Helper for emitting error messages.
SG::RootAuxVectorFactory::tiVec
virtual const std::type_info * tiVec() const override
Return the type_info of the overall object.
Definition: RootAuxVectorFactory.cxx:631
SG::RootAuxVectorFactory::ELEMENT_LINK_VECTOR
@ ELEMENT_LINK_VECTOR
Definition: RootAuxVectorFactory.h:472
AuxVectorData.h
Manage lookup of vectors of auxiliary data.
SG::RootAuxVectorFactory::m_objClass
TClass * m_objClass
The TClass for the overall object.
Definition: RootAuxVectorFactory.h:460
normalizedTypeinfoName.h
Convert a type_info to a normalized string representation (matching the names used in the root dictio...
CxxUtils::ClassName::targ
const ClassName & targ(size_t i) const
Return one template argument.
Definition: ClassName.cxx:285
SG::RootAuxVector::m_vec
void * m_vec
Pointer to the vector object itself.
Definition: RootAuxVectorFactory.h:236
WriteBchToCool.beg
beg
Definition: WriteBchToCool.py:69
SG::RootAuxVectorFactory::tiAlloc
virtual const std::type_info * tiAlloc() const override
Return the type_info of the vector allocator.
Definition: RootAuxVectorFactory.cxx:653
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::RootAuxVectorFactory::getEltSize
virtual size_t getEltSize() const override
Return the size of an element of this vector type.
Definition: RootAuxVectorFactory.cxx:622
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
SG::RootAuxVector::objType
virtual const std::type_info * objType() const override
Return the type of the complete object to be saved.
Definition: RootAuxVectorFactory.cxx:332
SG::RootAuxVectorFactory::m_vecClass
TClass * m_vecClass
The TClass for the std::vector.
Definition: RootAuxVectorFactory.h:463
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
SG::RootAuxVectorFactory::copyForOutput
virtual void copyForOutput(SG::auxid_t auxid, AuxVectorData &dst, size_t dst_index, const AuxVectorData &src, size_t src_index, size_t n) const override
Copy elements between vectors, possibly applying thinning.
Definition: RootAuxVectorFactory.cxx:548
SG::IAuxStore
Interface for non-const operations on an auxiliary store.
Definition: IAuxStore.h:48
python.PyAthena.v
v
Definition: PyAthena.py:157
SG::RootAuxVectorFactory::create
virtual std::unique_ptr< SG::IAuxTypeVector > create(SG::auxid_t auxid, size_t size, size_t capacity, bool isLinked) const override
Create a vector object of this type.
Definition: RootAuxVectorFactory.cxx:437
SG::RootAuxVectorFactory
Dynamic implementation of IAuxVectorFactory, relying on root's vector proxy.
Definition: RootAuxVectorFactory.h:262
SG::RootAuxVector
Dynamic implementation of IAuxTypeVector, relying on root vector proxy.
Definition: RootAuxVectorFactory.h:48
SG::RootAuxVectorFactory::ELEMENT_LINK
@ ELEMENT_LINK
Definition: RootAuxVectorFactory.h:472
a
TList * a
Definition: liststreamerinfos.cxx:10
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
RootUtils::Type::copyRange
void copyRange(void *dst, const void *src, size_t n) const
Copy a range of objects.
Definition: Type.cxx:389
CxxUtils::ClassName::match_t
std::map< std::string, ClassName > match_t
Map used to hold variable assignments from matching.
Definition: CxxUtils/CxxUtils/ClassName.h:200
SG::RootAuxVectorFactory::swap
virtual void swap(SG::auxid_t auxid, AuxVectorData &a, size_t aindex, AuxVectorData &b, size_t bindex, size_t n) const override
Swap elements between vectors.
Definition: RootAuxVectorFactory.cxx:591
SG::RootAuxVectorFactory::copy
virtual void copy(SG::auxid_t auxid, AuxVectorData &dst, size_t dst_index, const AuxVectorData &src, size_t src_index, size_t n) const override
Copy elements between vectors.
Definition: RootAuxVectorFactory.cxx:525
SG::IAuxTypeVector
Abstract interface for manipulating vectors of arbitrary types.
Definition: IAuxTypeVector.h:40
RootAuxVectorFactory.h
Dynamic implementation of IAuxVectorFactory, relying on root's vector proxy.
RootUtils::Type
Wrapper for ROOT types.
Definition: Type.h:40
SG::RootAuxVector::m_proxy
std::unique_ptr< TVirtualCollectionProxy > m_proxy
The collection proxy for the vector.
Definition: RootAuxVectorFactory.h:230
SG::RootAuxVector::RootAuxVector
RootAuxVector(const RootAuxVectorFactory *factory, SG::auxid_t auxid, size_t size, size_t capacity, bool isLinked)
Constructor.
Definition: RootAuxVectorFactory.cxx:63
SG::AuxVectorData
Manage lookup of vectors of auxiliary data.
Definition: AuxVectorData.h:167
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
SG::RootAuxVectorFactory::~RootAuxVectorFactory
virtual ~RootAuxVectorFactory() override
Destructor.
Definition: RootAuxVectorFactory.cxx:424
SG::RootAuxVectorFactory::ELEMENT_LINK_NONPOINTER
@ ELEMENT_LINK_NONPOINTER
Definition: RootAuxVectorFactory.h:472
SG::RootAuxVectorFactory::createFromData
virtual std::unique_ptr< SG::IAuxTypeVector > createFromData(SG::auxid_t auxid, void *data, IAuxTypeVector *linkedVector, bool isPacked, bool ownFlag, bool isLinked) const override
Create a vector object of this type from a data blob.
Definition: RootAuxVectorFactory.cxx:468
checker_macros.h
Define macros for attributes used to control the static checker.
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
SG::RootAuxVector::~RootAuxVector
virtual ~RootAuxVector() override
Destructor.
Definition: RootAuxVectorFactory.cxx:143
xAOD::Utils::rootType
char rootType(char typeidType)
This function is used internally in the code when creating primitive dynamic auxiliary branches.
Definition: Control/xAODRootAccess/Root/Utils.cxx:226
SG::RootAuxVectorFactory::copyImpl
char * copyImpl(SG::auxid_t auxid, AuxVectorData &dst, size_t dst_index, const AuxVectorData &src, size_t src_index, size_t n) const
Helper for copy; returns a pointer to the first destination object, or nullptr if the destination was...
Definition: RootAuxVectorFactory.cxx:483
SG::RootAuxVector::resize
virtual bool resize(size_t sz) override
Change the size of the vector.
Definition: RootAuxVectorFactory.cxx:206
CxxUtils::ClassName::match
bool match(const ClassName &pattern, match_t &matches) const
Match this expression against a pattern.
Definition: ClassName.cxx:339