ATLAS Offline Software
ByteStreamAuxContainer_v1.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // System include(s):
6 #include <iostream>
7 
8 // EDM include(s):
12 
13 // Local include(s):
15 
16 namespace xAOD {
17 
19  : SG::IAuxStore(),
20  m_int(), m_float(), m_vecInt(), m_vecFloat(),
21  m_staticVecs(), m_dynamicVecs(),
22  m_locked( false ),
23  m_name( "UNKNOWN" ) {
24 
25  }
26 
29  : SG::IAuxStore( parent ),
30  m_int( parent.m_int ), m_float( parent.m_float ),
31  m_vecInt( parent.m_vecInt ), m_vecFloat( parent.m_vecFloat ),
32  // The auxiliary IDs are copied:
33  m_auxids( parent.m_auxids ),
34  // But the internal pointers are not:
35  m_staticVecs(),
36  m_dynamicVecs(), m_locked( false ),
37  m_name( parent.m_name ) {
38 
39  }
40 
42 
43  // Clean up the helper objects:
44  std::vector< SG::IAuxTypeVector* >::iterator itr = m_dynamicVecs.begin();
46  for( ; itr != end; ++itr ) {
47  if( *itr ) delete *itr;
48  }
49  itr = m_staticVecs.begin();
50  end = m_staticVecs.end();
51  for( ; itr != end; ++itr ) {
52  if( *itr ) delete *itr;
53  }
54  }
55 
59 
60  if (this != &rhs) {
61  // Copy the persistent variables:
62  m_int = rhs.m_int;
63  m_float = rhs.m_float;
64  m_vecInt = rhs.m_vecInt;
65  m_vecFloat = rhs.m_vecFloat;
66 
67  // Also copy the list of auxiliary IDs handled:
68  m_auxids = rhs.m_auxids;
69 
70  // The static variables should be left alone. Those should still
71  // point to the correct places in memory. But the dynamic variables
72  // need to be cleared out. Those will be re-created when/if needed.
73  for( auto* ptr : m_dynamicVecs ) {
74  delete ptr;
75  }
76  m_dynamicVecs.clear();
77 
78  // Copy the container's name:
79  m_name = rhs.m_name;
80  }
81 
82  return *this;
83  }
84 
85  const void* ByteStreamAuxContainer_v1::getData( auxid_t auxid ) const {
86 
87  guard_t guard (m_mutex);
88 
89  // If it's a static auxiliary property:
90  if( ( auxid < m_staticVecs.size() ) && ( m_staticVecs[ auxid ] ) ) {
91  // We're done already:
92  return m_staticVecs[ auxid ]->toPtr();
93  }
94  // If it's a dynamic one:
95  else if( ( auxid < m_dynamicVecs.size() ) &&
96  ( m_dynamicVecs[ auxid ] ) ) {
97  // We're done already:
98  return m_dynamicVecs[ auxid ]->toPtr();
99  }
100 
101  // Try to retrieve the dynamic variable:
102  // quiet on because this method may be called from isAccessible
103  // and that shouldn't generate any output.
104  return getData1 (auxid, 0, 0, true, false);
105  }
106 
109 
110  // Return the full list of IDs:
111  return getWritableAuxIDs();
112  }
113 
116  size_t size,
117  size_t capacity)
118  {
119  guard_t guard (m_mutex);
120 
121  // Does this variable already exist?
122  void* ret = nullptr;
123  if( ( auxid < m_staticVecs.size() ) && ( m_staticVecs[ auxid ] ) ) {
124  ret = m_staticVecs[ auxid ]->toPtr();
125  }
126  // If it's a dynamic one:
127  else if( ( auxid < m_dynamicVecs.size() ) &&
128  ( m_dynamicVecs[ auxid ] ) ) {
129  ret = m_dynamicVecs[ auxid ]->toPtr();
130  }
131 
132  if (!ret)
133  ret = getData1 (auxid, 0, 0, true, true);
134 
135  if (ret) {
136  // Raise exception if locked and not a decoration.
137  if (m_locked) {
138  if ( ! m_decorations.test (auxid) ) {
139  throw SG::ExcStoreLocked (auxid);
140  }
141  }
142  return ret;
143  }
144 
145  // Make a new variable.
146  ret = getData1 (auxid, size, capacity, false, true);
147 
148  // If locked, mark as a decoration.
149  if (m_locked) {
150  m_decorations.insert (auxid);
151  }
152 
153  return ret;
154  }
155 
156 
159  {
160  guard_t guard (m_mutex);
161  return m_locked && m_decorations.test (auxid);
162  }
163 
164 
166  {
167  guard_t guard (m_mutex);
168  m_locked = true;
169  }
170 
172  {
173  guard_t guard (m_mutex);
174 
176 
177  bool anycleared = false;
178  for (auxid_t auxid : m_decorations) {
179  if (m_dynamicVecs[auxid]) {
180  delete m_dynamicVecs[auxid];
181  m_dynamicVecs[auxid] = nullptr;
182  m_auxids.erase( auxid );
183  anycleared = true;
184 
185  const std::string name = r.getName( auxid );
186  const std::type_info* ti = r.getType( auxid );
187  if (ti == &typeid(int))
188  m_int.erase (name);
189  else if (ti == &typeid(float))
190  m_float.erase (name);
191  else if (ti == &typeid(std::vector<int>))
192  m_vecInt.erase (name);
193  else if (ti == &typeid(std::vector<float>))
194  m_vecFloat.erase (name);
195  }
196  }
198 
199  return anycleared;
200  }
201 
202 
205  {
206  guard_t guard (m_mutex);
207  m_decorations.reset (auxid);
208  }
209 
210 
212  {
213  for (SG::auxid_t i : m_auxids) {
214  if (i < m_staticVecs.size() && m_staticVecs[i]) {
215  size_t sz = m_staticVecs[i]->size();
216  if (sz > 0)
217  return sz;
218  }
219  if (i < m_dynamicVecs.size() && m_dynamicVecs[i]) {
220  size_t sz = m_dynamicVecs[i]->size();
221  if (sz > 0)
222  return sz;
223  }
224  }
225 
226  return 0;
227  }
228 
230  {
231  guard_t guard (m_mutex);
232  return size_noLock();
233  }
234 
235 
237  size_t capacity ) {
238 
239  guard_t guard (m_mutex);
240 
241  // Check if we have such a static variable:
242  if( ( auxid < m_staticVecs.size() ) && ( m_staticVecs[ auxid ] ) ) {
243  // Set it to the right size:
244  m_staticVecs[ auxid ]->reserve( capacity );
245  m_staticVecs[ auxid ]->resize( size );
246  // We're done already:
247  return m_staticVecs[ auxid ]->toPtr();
248  }
249  // Check if we already know about this dynamic variable:
250  else if( ( auxid < m_dynamicVecs.size() ) &&
251  ( m_dynamicVecs[ auxid ] ) ) {
252  // Set it to the right size:
253  m_dynamicVecs[ auxid ]->reserve( capacity );
254  m_dynamicVecs[ auxid ]->resize( size );
255  // We're done already:
256  return m_dynamicVecs[ auxid ]->toPtr();
257  }
258 
259  return getData1 (auxid, size, capacity, false, false);
260  }
261 
264 
265  return m_auxids;
266  }
267 
269 
270  guard_t guard (m_mutex);
271 
272  if (m_locked)
273  throw SG::ExcStoreLocked ("resize");
274 
275  bool nomoves = true;
276  for (SG::IAuxTypeVector* v : m_dynamicVecs) {
277  if(v) {
278  if (!v->resize( size ))
279  nomoves = false;
280  }
281  }
282 
284  if(v) {
285  if (!v->resize( size ))
286  nomoves = false;
287  }
288  }
289 
290  return nomoves;
291  }
292 
294 
295  guard_t guard (m_mutex);
296 
297  if (m_locked)
298  throw SG::ExcStoreLocked ("reserve");
299 
300  std::vector< SG::IAuxTypeVector* >::iterator itr = m_dynamicVecs.begin();
302  for( ; itr != end; ++itr ) {
303  if( *itr ) ( *itr )->reserve( size );
304  }
305  itr = m_staticVecs.begin();
306  end = m_staticVecs.end();
307  for( ; itr != end; ++itr ) {
308  if( *itr ) ( *itr )->reserve( size );
309  }
310 
311  return;
312  }
313 
314  void ByteStreamAuxContainer_v1::shift( size_t pos, ptrdiff_t offs ) {
315 
316  guard_t guard (m_mutex);
317 
318  if (m_locked)
319  throw SG::ExcStoreLocked ("shift");
320 
321  std::vector< SG::IAuxTypeVector* >::iterator itr = m_dynamicVecs.begin();
323  for( ; itr != end; ++itr ) {
324  if( *itr ) ( *itr )->shift( pos, offs );
325  }
326  itr = m_staticVecs.begin();
327  end = m_staticVecs.end();
328  for( ; itr != end; ++itr ) {
329  if( *itr ) ( *itr )->shift( pos, offs );
330  }
331 
332  return;
333  }
334 
336  IAuxStore& other,
337  const SG::auxid_set_t& ignore_in) {
338 
339  guard_t guard( m_mutex );
340 
341  // This operation is not allowed on a locked container:
342  if( m_locked ) {
343  throw SG::ExcStoreLocked( "insertMove" );
344  }
345 
347  bool nomove = true;
348  size_t other_size = other.size();
349 
350  SG::auxid_set_t ignore = ignore_in;
351 
352  // Do the operation on the static variables:
353  for (SG::auxid_t id : m_auxids) {
354  SG::IAuxTypeVector* v_dst = nullptr;
355  if (id < m_dynamicVecs.size())
356  v_dst = m_dynamicVecs[id];
357  if (!v_dst && id < m_staticVecs.size())
358  v_dst = m_staticVecs[id];
359  if (v_dst) {
360  ignore.insert (id);
361  if (other.getData (id)) {
362  void* src_ptr = other.getData (id, other_size, other_size);
363  if (src_ptr) {
364  if (!v_dst->insertMove (pos, src_ptr,
365  reinterpret_cast<char*>(src_ptr) + other_size*r.getEltSize(id),
366  other))
367  nomove = false;
368  }
369  }
370  else {
371  const void* orig = v_dst->toPtr();
372  v_dst->shift (pos, other_size);
373  if (orig != v_dst->toPtr())
374  nomove = false;
375  }
376  }
377  }
378 
379  // Add any new variables not present in the original container.
380  for (SG::auxid_t id : other.getAuxIDs()) {
381  if (!m_auxids.test(id) &&
382  !ignore.test(id))
383  {
384  if (other.getData (id)) {
385  void* src_ptr = other.getData (id, other_size, other_size);
386  if (src_ptr) {
387  size_t sz = size_noLock();
388  getData1 (id, sz, sz, true, false);
389  m_dynamicVecs[id]->resize (sz - other_size);
390  m_dynamicVecs[id]->insertMove (pos, src_ptr, reinterpret_cast<char*>(src_ptr) + other_size*r.getEltSize(id),
391  other);
392  nomove = false;
393  }
394  }
395  }
396  }
397 
398  return nomove;
399  }
400 
401 
403 
404  guard_t guard (m_mutex);
405 
406  for (SG::IAuxTypeVector* p : m_dynamicVecs)
407  delete p;
408  m_dynamicVecs.clear();
409 
411 #define ADD_IDS(VAR, TYP) \
412  do { typedef std::map< std::string, std::vector< TYP > > CONT; \
413  for (CONT::value_type& p : VAR) \
414  m_auxids.insert (r.getAuxID< TYP > (p.first, "", SG::AuxVarFlags::SkipNameCheck)); } while(0)
415  ADD_IDS(m_int, int);
416  ADD_IDS(m_float, float);
417  ADD_IDS(m_vecInt, std::vector<int>);
418  ADD_IDS(m_vecFloat, std::vector<float>);
419 #undef ADD_IDS
420 
421  return;
422  }
423 
424  const char* ByteStreamAuxContainer_v1::name() const {
425 
426  return m_name.c_str();
427  }
428 
430 
431  m_name = name;
432  return;
433  }
434 
437  template< typename T >
438  void*
440  std::map< std::string,
441  std::vector< T > >& pers,
442  size_t size, size_t capacity,
443  bool quiet,
444  bool forDecor) const {
445 
446  // Private method --- should hold lock before calling this.
447 
448  // Look up the name of the variable:
450  const std::string name = r.getName( auxid );
451 
452  // Try to find the variable:
453  typename std::map< std::string, std::vector< T > >::iterator itr =
454  pers.find( name );
455  if( itr == pers.end() ) {
456  // Variable isn't there. Fail if capacity==0.
457  if (capacity == 0) {
458  if (!quiet) {
459  std::cerr << "ERROR xAOD::ByteStreamAuxContainer_v1::getData (const) "
460  << "Variable with unknown name (" << name << ") requested"
461  << std::endl;
462  }
463  return nullptr;
464  }
465 
466  if (m_locked && !forDecor)
467  throw SG::ExcStoreLocked ("getData");
468 
469  if (r.isLinked(auxid)) {
470  std::cerr << "ERROR xAOD::ByteStreamAuxContainer_v1 doesn't implement linked variables"
471  << std::endl;
472  return nullptr;
473  }
474 
475  // Create the variable.
476  itr = pers.insert (std::make_pair (name, std::vector<T>())).first;
477  }
478 
479  // Get hold of the variable.
480  std::vector< T >& var = itr->second;
481 
482  // Make sure that the internal vector is big enough:
483  if( m_dynamicVecs.size() <= auxid ) {
484  m_dynamicVecs.resize( auxid + 1 );
485  }
486 
487  // Just an internal check...
488  if( m_dynamicVecs[ auxid ] ) {
489  std::cerr << "ERROR xAOD::ByteStreamAuxContainer_v1::getData "
490  << "Internal inconsistency detected!" << std::endl;
491  return m_dynamicVecs[ auxid ]->toPtr();
492  }
493 
494  // Register the variable:
495  m_dynamicVecs[ auxid ] = new AuxPersVector< T >( auxid, var, false, nullptr );
496 
497  if (capacity > 0) {
498  // Set it to the right size:
499  m_dynamicVecs[ auxid ]->reserve( capacity );
500  m_dynamicVecs[ auxid ]->resize( size );
501  }
502 
503  // Remember that we are now handling this variable:
504  m_auxids.insert( auxid );
505 
506  // Return the pointer to the array:
507  return m_dynamicVecs[ auxid ]->toPtr();
508  }
509 
510  void*
512  size_t size, size_t capacity,
513  bool quiet,
514  bool forDecor) const {
515 
516  // Private method --- should hold lock before calling this.
517 
518  if( *( SG::AuxTypeRegistry::instance().getType( auxid ) ) ==
519  typeid( int ) ) {
520 
521  return getData1( auxid, m_int, size, capacity, quiet, forDecor );
522  }
523  else if( *( SG::AuxTypeRegistry::instance().getType( auxid ) ) ==
524  typeid( float ) ) {
525 
526  return getData1( auxid, m_float, size, capacity, quiet, forDecor );
527  }
528  else if( *( SG::AuxTypeRegistry::instance().getType( auxid ) ) ==
529  typeid( std::vector< int > ) ) {
530 
531  return getData1( auxid, m_vecInt, size, capacity, quiet, forDecor );
532  }
533  else if( *( SG::AuxTypeRegistry::instance().getType( auxid ) ) ==
534  typeid( std::vector< float > ) ) {
535 
536  return getData1( auxid, m_vecFloat, size, capacity, quiet, forDecor );
537  }
538 
539  // The object can't handle this variable type...
540  std::cerr << "ERROR xAOD::ByteStreamAuxContainer_v1::getData "
541  << "Unknown variable type ("
542  << SG::AuxTypeRegistry::instance().getType( auxid )->name()
543  << ") requested" << std::endl;
544 
545  return nullptr;
546  }
547 
548 } // namespace xAOD
xAOD::ByteStreamAuxContainer_v1::getData1
void * getData1(auxid_t auxid, std::map< std::string, std::vector< T > > &pers, size_t size, size_t capacity, bool quiet, bool forDecor) const
Function retrieving a simple dynamic variable.
Definition: ByteStreamAuxContainer_v1.cxx:439
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
SG::IAuxTypeVector::shift
virtual bool shift(size_t pos, ptrdiff_t offs)=0
Shift the elements of the vector.
beamspotman.r
def r
Definition: beamspotman.py:676
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
xAOD::ByteStreamAuxContainer_v1::lock
virtual void lock() override
Lock the container.
Definition: ByteStreamAuxContainer_v1.cxx:165
xAOD::name
name
Definition: TriggerMenuJson_v1.cxx:29
xAOD::ByteStreamAuxContainer_v1::resize
virtual bool resize(size_t size) override
Resize the arrays to a given size.
Definition: ByteStreamAuxContainer_v1.cxx:268
fitman.sz
sz
Definition: fitman.py:527
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:49
quiet
bool quiet
Definition: TrigGlobEffCorrValidation.cxx:190
xAOD::ByteStreamAuxContainer_v1::lockDecoration
virtual void lockDecoration(SG::auxid_t auxid) override
Lock a decoration.
Definition: ByteStreamAuxContainer_v1.cxx:204
SG::ExcStoreLocked
Exception — Attempted to modify auxiliary data in a locked store.
Definition: Control/AthContainers/AthContainers/exceptions.h:183
exceptions.h
Exceptions that can be thrown from AthContainers.
xAOD::other
@ other
Definition: TrackingPrimitives.h:509
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
xAOD::ByteStreamAuxContainer_v1::m_staticVecs
std::vector< SG::IAuxTypeVector * > m_staticVecs
Internal list of static managed variables.
Definition: ByteStreamAuxContainer_v1.h:179
AuxPersVector.h
CxxUtils::ConcurrentBitset::clear
ConcurrentBitset & clear()
Clear all bits in the set.
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
SG::AuxTypeRegistry
Handle mappings between names and auxid_t.
Definition: AuxTypeRegistry.h:62
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
xAOD::ByteStreamAuxContainer_v1::operator=
ByteStreamAuxContainer_v1 & operator=(const ByteStreamAuxContainer_v1 &rhs)
Assignment operator.
Definition: ByteStreamAuxContainer_v1.cxx:58
DiTauMassTools::ignore
void ignore(T &&)
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:54
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
SG::AuxTypeRegistry::getType
const std::type_info * getType(SG::auxid_t auxid) const
Return the type of an aux data item.
Definition: AuxTypeRegistry.cxx:302
xAOD::ByteStreamAuxContainer_v1::auxid_t
SG::auxid_t auxid_t
The aux ID type definition from IConstAuxStore.
Definition: ByteStreamAuxContainer_v1.h:48
lumiFormat.i
int i
Definition: lumiFormat.py:92
CxxUtils::ConcurrentBitset::insert
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.
ret
T ret(T t)
Definition: rootspy.cxx:260
CxxUtils::ConcurrentBitset::reset
ConcurrentBitset & reset(bit_t bit)
Turn off one bit.
xAOD::ByteStreamAuxContainer_v1::reserve
virtual void reserve(size_t size) override
Reserve a given size for the arrays.
Definition: ByteStreamAuxContainer_v1.cxx:293
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::ByteStreamAuxContainer_v1::reset
void reset()
Function resetting the internal (cached) state of the object.
Definition: ByteStreamAuxContainer_v1.cxx:402
xAOD::ByteStreamAuxContainer_v1::m_locked
bool m_locked
Has the container been locked?
Definition: ByteStreamAuxContainer_v1.h:183
xAOD::AuxPersVector
Class managing concrete vector variables.
Definition: AuxPersVector.h:28
xAOD::ByteStreamAuxContainer_v1::ByteStreamAuxContainer_v1
ByteStreamAuxContainer_v1()
Default constructor.
Definition: ByteStreamAuxContainer_v1.cxx:18
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
xAOD::ByteStreamAuxContainer_v1::~ByteStreamAuxContainer_v1
virtual ~ByteStreamAuxContainer_v1()
Destructor.
Definition: ByteStreamAuxContainer_v1.cxx:41
xAOD::ByteStreamAuxContainer_v1::getWritableAuxIDs
virtual const auxid_set_t & getWritableAuxIDs() const override
Return a set of writable data identifiers.
Definition: ByteStreamAuxContainer_v1.cxx:263
xAOD::ByteStreamAuxContainer_v1::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Definition: ByteStreamAuxContainer_v1.h:189
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
xAOD::ByteStreamAuxContainer_v1::m_mutex
mutex_t m_mutex
Definition: ByteStreamAuxContainer_v1.h:190
xAOD::ByteStreamAuxContainer_v1::getAuxIDs
virtual const auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.
Definition: ByteStreamAuxContainer_v1.cxx:108
xAOD::ByteStreamAuxContainer_v1::name
const char * name() const
Get the name of the container instance.
Definition: ByteStreamAuxContainer_v1.cxx:424
xAOD::ByteStreamAuxContainer_v1::size
virtual size_t size() const override
Get the size of the container.
Definition: ByteStreamAuxContainer_v1.cxx:229
python.PyAthena.v
v
Definition: PyAthena.py:157
SG::IAuxTypeVector::insertMove
virtual bool insertMove(size_t pos, void *beg, void *end, IAuxStore &srcStore)=0
Insert elements into the vector via move semantics.
xAOD::ByteStreamAuxContainer_v1::clearDecorations
virtual bool clearDecorations() override
Clear all decorations.
Definition: ByteStreamAuxContainer_v1.cxx:171
xAOD::ByteStreamAuxContainer_v1::setName
void setName(const char *name)
Set the name of the container instance.
Definition: ByteStreamAuxContainer_v1.cxx:429
SG::IAuxTypeVector
Abstract interface for manipulating vectors of arbitrary types.
Definition: IAuxTypeVector.h:40
AuxTypeRegistry.h
Handle mappings between names and auxid_t.
ByteStreamAuxContainer_v1.h
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
xAOD::ByteStreamAuxContainer_v1::isDecoration
virtual bool isDecoration(auxid_t auxid) const override
Test if a variable is a decoration.
Definition: ByteStreamAuxContainer_v1.cxx:158
xAOD::ByteStreamAuxContainer_v1::m_decorations
SG::auxid_set_t m_decorations
Record which variables are decorations.
Definition: ByteStreamAuxContainer_v1.h:185
xAOD::JetConstituentVector::iterator
Definition: JetConstituentVector.h:121
xAOD::ByteStreamAuxContainer_v1::size_noLock
size_t size_noLock() const
Internal method: return size without taking out the lock.
Definition: ByteStreamAuxContainer_v1.cxx:211
xAOD::ByteStreamAuxContainer_v1::getData
virtual const void * getData(auxid_t auxid) const override
Get a pointer to a given array.
Definition: ByteStreamAuxContainer_v1.cxx:85
xAOD::ByteStreamAuxContainer_v1::getDecoration
virtual void * getDecoration(auxid_t auxid, size_t size, size_t capacity) override
Get a pointer to a given array, as a decoration.
Definition: ByteStreamAuxContainer_v1.cxx:115
xAOD::ByteStreamAuxContainer_v1
Base class for dynamic auxiliary stores saved into ByteStream.
Definition: ByteStreamAuxContainer_v1.h:44
xAOD::ByteStreamAuxContainer_v1::insertMove
virtual bool insertMove(size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore) override
Insert contents of another store via move.
Definition: ByteStreamAuxContainer_v1.cxx:335
Ringer::getType
T getType(const char *cStr)
Return Ringer enumeration of type T identifying string type:
xAOD::ByteStreamAuxContainer_v1::shift
virtual void shift(size_t pos, ptrdiff_t offs) override
Shift the contents of the stored arrays.
Definition: ByteStreamAuxContainer_v1.cxx:314
ADD_IDS
#define ADD_IDS(VAR, TYP)
SG::IAuxTypeVector::toPtr
virtual void * toPtr()=0
Return a pointer to the start of the vector's data.
CxxUtils::ConcurrentBitset::test
bool test(bit_t bit) const
Test to see if a bit is set.
xAOD::ByteStreamAuxContainer_v1::m_name
std::string m_name
Name of the container in memory. Set externally.
Definition: ByteStreamAuxContainer_v1.h:195