ATLAS Offline Software
Loading...
Searching...
No Matches
xAOD::ShallowAuxInfo Class Referenceabstract

Shallow copy for the auxiliary store of standalone objects. More...

#include <ShallowAuxInfo.h>

Inheritance diagram for xAOD::ShallowAuxInfo:
Collaboration diagram for xAOD::ShallowAuxInfo:

Public Types

typedef SG::auxid_t auxid_t
 The aux ID type definition.
typedef SG::auxid_set_t auxid_set_t
 The aux ID set type definition.
enum  AuxStoreType { AST_ObjectStore = 0 , AST_ContainerStore = 1 }
 Type of the auxiliary store. More...

Public Member Functions

 ShallowAuxInfo ()
 Default constructor.
 ShallowAuxInfo (const DataLink< SG::IConstAuxStore > &parent)
 Constructor with a parent object.
virtual AuxStoreType getStoreType () const
 Return the type of the store object.
const DataLink< SG::IConstAuxStore > & parent () const
 Get the parent store.
void setParent (const DataLink< SG::IConstAuxStore > &link)
 Set the parent store.
bool shallowIO () const
 Check whether only the overriden parameters will be written out or not.
void setShallowIO (bool value)
 Set whether only the overriden parameters should be written out.
virtual bool insertMove (size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore=SG::auxid_set_t())=0
 Move all elements from other to this store.
virtual bool setOption (auxid_t, const AuxDataOption &)
 Set an option for a given auxiliary variable.
virtual IAuxTypeVector * linkedVector (SG::auxid_t)
virtual const IAuxTypeVector * linkedVector (SG::auxid_t) const
 Return interface for a linked variable.
Functions implementing the SG::IAuxStoreHolder interface
virtual SG::IAuxStoregetStore () override
 Get the currently used internal store object.
virtual const SG::IAuxStoregetStore () const override
virtual void setStore (SG::IAuxStore *store) override
 Set a different internal store object.
Functions implementing the SG::IConstAuxStore interface
virtual const void * getData (auxid_t auxid) const override
 Get a pointer to a given array.
virtual const SG::IAuxTypeVectorgetVector (SG::auxid_t auxid) const override final
 Return vector interface for one aux data item.
virtual const auxid_set_tgetAuxIDs () const override
 Get the types(names) of variables handled by this container.
virtual const auxid_set_tgetDecorIDs () const override
 Get the types(names) of decorations handled by this container.
virtual bool isDecoration (auxid_t auxid) const override
 Test if a variable is a decoration.
virtual void * getDecoration (auxid_t auxid, size_t size, size_t capacity) override
 Return the data vector for one aux data decoration item.
virtual void lock () override
 Lock the container.
virtual bool clearDecorations () override
 Clear all decorations.
virtual size_t size () const override
 Get the size of the container.
virtual void lockDecoration (SG::auxid_t auxid) override
 Lock a decoration.
Functions implementing the SG::IAuxStore interface
virtual void * getData (auxid_t auxid, size_t size, size_t capacity) override
 Get a pointer to a given array, creating the array if necessary.
virtual const auxid_set_tgetWritableAuxIDs () const override
 Return a set of writable data identifiers.
virtual bool resize (size_t size) override
 Resize the arrays to a given size.
virtual void reserve (size_t size) override
 Reserve a given size for the arrays.
virtual void shift (size_t pos, ptrdiff_t offs) override
 Shift the contents of the stored arrays.
virtual bool insertMove (size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore) override
 Insert contents of another store via move.
Functions implementing the SG::IAuxStoreIO interface
virtual const void * getIOData (auxid_t auxid) const override
 Get a pointer to the data being stored for one aux data item.
virtual const std::type_info * getIOType (auxid_t auxid) const override
 Return the type of the data to be stored for one aux data item.
virtual const auxid_set_tgetDynamicAuxIDs () const override
 Get the types(names) of variables created dynamically.
virtual auxid_set_t getSelectedAuxIDs () const override
 Get the IDs of the selected dynamic Aux variables (for writing)
Functions managing the instance name of the container
const charname () const
 Get the name of the container instance.
void setName (const char *name)
 Set the name of the container instance.

Static Public Attributes

static constexpr bool supportsThinning = false
 Flag that we should not use the xAOD aux store pool converter for this type.

Private Types

typedef AthContainers_detail::recursive_mutex mutex_t
 Mutex for multithread synchronization.
typedef AthContainers_detail::lock_guard< mutex_tguard_t

Private Member Functions

void remakeAuxIDs () const

Private Attributes

AuxSelection m_selection
 Dynamic attributes selection implementation.
SG::IAuxStorem_store
 Internal dynamic auxiliary store object.
SG::IAuxStoreIOm_storeIO
 The IO interface to the internal auxiliary store.
bool m_ownsStore
 Flag deciding if the object owns the dynamic store or not.
bool m_locked
 Flag keeping track of whether this object is locked or not.
DataLink< SG::IConstAuxStorem_parentLink
 Link to the parent object.
const SG::IAuxStoreIOm_parentIO
 Optional pointer to the IO interface of the parent object.
bool m_shallowIO
 Flag for whether to do "shallow IO" or not.
mutex_t m_mutex
auxid_set_t m_auxids ATLAS_THREAD_SAFE
auxid_set_t m_decorids ATLAS_THREAD_SAFE
bool m_auxidsValid ATLAS_THREAD_SAFE
std::string m_name
 Name of the container in memory. Set externally.

Detailed Description

Shallow copy for the auxiliary store of standalone objects.

The design of this is exactly the same as for the SG::AuxStoreInternal - SG::AuxStoreStandalone pair. All the code is in xAOD::ShallowAuxContainer, this class is just a convenience shorthand for calling xAOD::ShallowAuxContainer(true) in the code.

Author
Attila Krasznahorkay Attil.nosp@m.a.Kr.nosp@m.aszna.nosp@m.hork.nosp@m.ay@ce.nosp@m.rn.c.nosp@m.h
Revision
671678
Date
2015-06-02 14:28:46 +0200 (Tue, 02 Jun 2015)

Definition at line 29 of file ShallowAuxInfo.h.

Member Typedef Documentation

◆ auxid_set_t

The aux ID set type definition.

Definition at line 56 of file ShallowAuxContainer.h.

◆ auxid_t

The aux ID type definition.

Definition at line 54 of file ShallowAuxContainer.h.

◆ guard_t

◆ mutex_t

Mutex for multithread synchronization.

Definition at line 197 of file ShallowAuxContainer.h.

Member Enumeration Documentation

◆ AuxStoreType

Type of the auxiliary store.

In the xAOD EDM we use auxiliary store objects in some cases to describe a single object, and in most cases to describe a container of objects. This enumeration declares which type the object implementing this interface is.

Enumerator
AST_ObjectStore 

The store describes a single object.

AST_ContainerStore 

The store describes a container.

Definition at line 66 of file IAuxStoreHolder.h.

66 {
67 AST_ObjectStore = 0,
69 };
@ AST_ContainerStore
The store describes a container.
@ AST_ObjectStore
The store describes a single object.

Constructor & Destructor Documentation

◆ ShallowAuxInfo() [1/2]

xAOD::ShallowAuxInfo::ShallowAuxInfo ( )

Default constructor.

Definition at line 12 of file ShallowAuxInfo.cxx.

13 : ShallowAuxContainer( true ) {
14
15 }
ShallowAuxContainer(bool standalone=false)
Default constructor.

◆ ShallowAuxInfo() [2/2]

xAOD::ShallowAuxInfo::ShallowAuxInfo ( const DataLink< SG::IConstAuxStore > & parent)

Constructor with a parent object.

Definition at line 17 of file ShallowAuxInfo.cxx.

19 : ShallowAuxContainer( parent, true ) {
20
21 }
const DataLink< SG::IConstAuxStore > & parent() const
Get the parent store.

Member Function Documentation

◆ clearDecorations()

bool xAOD::ShallowAuxContainer::clearDecorations ( )
overridevirtualinherited

Clear all decorations.

Implements SG::IConstAuxStore.

Definition at line 379 of file ShallowAuxContainer.cxx.

380 {
381 guard_t guard (m_mutex);
382 bool ret = m_store->clearDecorations();
383 if (ret) {
384 remakeAuxIDs();
385 }
386 return ret;
387 }
SG::IAuxStore * m_store
Internal dynamic auxiliary store object.
AthContainers_detail::lock_guard< mutex_t > guard_t

◆ getAuxIDs()

const ShallowAuxContainer::auxid_set_t & xAOD::ShallowAuxContainer::getAuxIDs ( ) const
overridevirtualinherited

Get the types(names) of variables handled by this container.

Implements SG::IConstAuxStore.

Definition at line 232 of file ShallowAuxContainer.cxx.

232 {
233
234 guard_t guard( m_mutex );
235 if (!m_auxidsValid) {
236 remakeAuxIDs();
237 }
238 return m_auxids;
239 }

◆ getData() [1/2]

const void * xAOD::ShallowAuxContainer::getData ( auxid_t auxid) const
overridevirtualinherited

Get a pointer to a given array.

Reimplemented from SG::IAuxStore.

Definition at line 192 of file ShallowAuxContainer.cxx.

192 {
193
194 const SG::IAuxTypeVector* v = getVector( auxid );
195 if( v ) {
196 return v->toPtr();
197 }
198 return nullptr;
199 }
virtual const SG::IAuxTypeVector * getVector(SG::auxid_t auxid) const override final
Return vector interface for one aux data item.

◆ getData() [2/2]

void * xAOD::ShallowAuxContainer::getData ( auxid_t auxid,
size_t size,
size_t capacity )
overridevirtualinherited

Get a pointer to a given array, creating the array if necessary.

Implements SG::IAuxStore.

Definition at line 398 of file ShallowAuxContainer.cxx.

399 {
400
401 guard_t guard (m_mutex);
402
403 // Check if we already have this variable by any chance.
404 const void* cptr = m_store->getData( auxid );
405
406 // Create the variable in the dynamic store:
407 void* ptr = m_store->getData( auxid, size, capacity );
408
409 remakeAuxIDs();
410
411 // If in some weird way we already had this variable before, then don't
412 // try to overwrite it with the parent's payload, and finish here already.
413 if( cptr != nullptr ) {
414 return ptr;
415 }
416
417 // If the parent doesn't have this variable, then we're done already:
418 if( ! m_parentLink.isValid() ) {
419 return ptr;
420 }
421 const void* pptr = m_parentLink->getData( auxid );
422 if( ! pptr ) {
423 return ptr;
424 }
425
426 // If the variable does exist in the parent, then copy it over to this
427 // store before returning.
428
429 // Get the registry:
430 SG::AuxTypeRegistry& reg = SG::AuxTypeRegistry::instance();
431
432 // Get the type of this variable:
433 const std::type_info* type = reg.getType( auxid );
434 if( type == nullptr ) {
435 std::ostringstream message;
436 message << "Couldn't find the type of auxiliary ID " << auxid;
437 throw std::runtime_error( message.str() );
438 }
439
440 // And the allocator type for this variable.
441 const std::type_info* allocType = reg.getAllocType( auxid );
442 if( allocType == nullptr ) {
443 std::ostringstream message;
444 message << "Couldn't find the allocator type of auxiliary ID " << auxid;
445 throw std::runtime_error( message.str() );
446 }
447
448 // First let's get the vector factory of this variable:
449 const SG::IAuxTypeVectorFactory* factory =
450 SG::AuxTypeRegistry::instance().getFactory( *type, *allocType );
451 if( factory == nullptr ) {
452 std::ostringstream message;
453 message << "Couldn't find a factory for type " << type->name();
454 throw std::runtime_error( message.str() );
455 }
456
457 // Copy each element of the parent's decoration:
458 factory->copy( auxid,
459 SG::AuxVectorInterface( *this ), 0,
460 SG::AuxVectorInterface( *m_parentLink ), 0, size );
461
462 // Now we're done:
463 return ptr;
464 }
const IAuxTypeVectorFactory * getFactory(const std::type_info &ti, const std::type_info &ti_alloc)
Return the vector factory for a given vector element type.
static AuxTypeRegistry & instance()
Return the singleton registry instance.
virtual void copy(SG::auxid_t auxid, AuxVectorData &dst, size_t dst_index, const AuxVectorData &src, size_t src_index, size_t n) const =0
Copy elements between vectors.
DataLink< SG::IConstAuxStore > m_parentLink
Link to the parent object.
virtual size_t size() const override
Get the size of the container.
void * ptr(T *p)
Definition SGImplSvc.cxx:74

◆ getDecoration()

void * xAOD::ShallowAuxContainer::getDecoration ( auxid_t auxid,
size_t size,
size_t capacity )
overridevirtualinherited

Return the data vector for one aux data decoration item.

Implements SG::IConstAuxStore.

Definition at line 263 of file ShallowAuxContainer.cxx.

265 {
266
267 guard_t guard( m_mutex );
268
269 // Check if we already have this variable by any chance.
270 const void* cptr = m_store->getData( auxid );
271
272 // If the parent has such a variable, then we need to check one more
273 // thing. If it's a decoration on the parent, then we should be allowed
274 // to override it in this (possibly locked) shallow copy. But let's leave
275 // the logic of this up to the parent.
276 if( m_locked && m_parentLink.isValid() &&
277 ( m_parentLink->getAuxIDs().count( auxid ) > 0 ) )
278 {
279 if (!m_parentLink->isDecoration (auxid)) {
280 throw SG::ExcStoreLocked (auxid);
281 }
282 }
283
284 // If we got this far without any exception, then let the internal store
285 // try to provide the decoration for us:
286 const size_t nids = m_store->getAuxIDs().size();
287 void* result = m_store->getDecoration( auxid, size, capacity );
288 if( result && ( nids != m_store->getAuxIDs().size() ) ) {
289 remakeAuxIDs();
290 }
291
292 // If we already had this variable before, then don't try to overwrite it
293 // with the parent's payload, and finish here already.
294 if( cptr != nullptr ) {
295 return result;
296 }
297
298 // If the parent doesn't have this variable, then we're done.
299 if( ! m_parentLink.isValid() ) {
300 return result;
301 }
302 const void* pptr = m_parentLink->getData( auxid );
303 if( pptr == nullptr ) {
304 return result;
305 }
306
307 // If the variable does exist in the parent, then copy it over to this
308 // store before returning.
309
310 // Get the registry.
311 SG::AuxTypeRegistry& reg = SG::AuxTypeRegistry::instance();
312
313 // Get the type of this variable.
314 const std::type_info* type = reg.getType( auxid );
315 if( type == nullptr ) {
316 std::ostringstream message;
317 message << "Couldn't find the type of auxiliary ID " << auxid;
318 throw std::runtime_error( message.str() );
319 }
320
321 // And the allocator type for this variable.
322 const std::type_info* allocType = reg.getAllocType( auxid );
323 if( allocType == nullptr ) {
324 std::ostringstream message;
325 message << "Couldn't find the allocator type of auxiliary ID " << auxid;
326 throw std::runtime_error( message.str() );
327 }
328
329 // Get the vector factory of this variable.
330 const SG::IAuxTypeVectorFactory* factory =
331 SG::AuxTypeRegistry::instance().getFactory( *type, *allocType );
332 if( factory == nullptr ) {
333 std::ostringstream message;
334 message << "Couldn't find a factory for type " << type->name();
335 throw std::runtime_error( message.str() );
336 }
337
338 // Copy each element of the parent's decoration.
339 factory->copy( auxid,
340 SG::AuxVectorInterface( *this ), 0,
341 SG::AuxVectorInterface( *m_parentLink ), 0, size );
342
343 // Now we're done.
344 return result;
345 }
bool m_locked
Flag keeping track of whether this object is locked or not.

◆ getDecorIDs()

const ShallowAuxContainer::auxid_set_t & xAOD::ShallowAuxContainer::getDecorIDs ( ) const
overridevirtualinherited

Get the types(names) of decorations handled by this container.

Implements SG::IConstAuxStore.

Definition at line 242 of file ShallowAuxContainer.cxx.

242 {
243
244 guard_t guard( m_mutex );
245 if (!m_auxidsValid) {
246 remakeAuxIDs();
247 }
248 return m_decorids;
249 }

◆ getDynamicAuxIDs()

const ShallowAuxContainer::auxid_set_t & xAOD::ShallowAuxContainer::getDynamicAuxIDs ( ) const
overridevirtualinherited

Get the types(names) of variables created dynamically.

Implements SG::IAuxStoreIO.

Definition at line 568 of file ShallowAuxContainer.cxx.

568 {
569
570 if( m_shallowIO ) {
571 if( m_storeIO ) {
572 return m_store->getAuxIDs();
573 } else {
574 static const auxid_set_t dummy (0);
575 return dummy;
576 }
577 } else {
578 return getAuxIDs();
579 }
580 }
bool m_shallowIO
Flag for whether to do "shallow IO" or not.
SG::IAuxStoreIO * m_storeIO
The IO interface to the internal auxiliary store.
SG::auxid_set_t auxid_set_t
The aux ID set type definition.
virtual const auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.

◆ getIOData()

const void * xAOD::ShallowAuxContainer::getIOData ( auxid_t auxid) const
overridevirtualinherited

Get a pointer to the data being stored for one aux data item.

Implements SG::IAuxStoreIO.

Definition at line 515 of file ShallowAuxContainer.cxx.

515 {
516
517 guard_t guard (m_mutex);
518 // Do we have it?
519 if( m_storeIO && m_store->getAuxIDs().test (auxid)) {
520 return m_storeIO->getIOData( auxid );
521 }
522
523 // Do we have a parent that has it?
524 const SG::IAuxStoreIO* parentIO = m_parentIO;
525 if( ( parentIO == nullptr ) && m_parentLink.isValid() ) {
526 parentIO =
527 dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
528 }
529 if( parentIO ) {
530 return parentIO->getIOData( auxid );
531 }
532
533 // If not, then where did this variable come from?!?
534 std::cerr << "ERROR xAOD::ShallowAuxContainer::getIOData Unknown "
535 << "variable ("
537 << ") requested" << std::endl;
538 return nullptr;
539 }
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
virtual const void * getIOData(SG::auxid_t auxid) const =0
Return a pointer to the data to be stored for one aux data item.
const SG::IAuxStoreIO * m_parentIO
Optional pointer to the IO interface of the parent object.

◆ getIOType()

const std::type_info * xAOD::ShallowAuxContainer::getIOType ( auxid_t auxid) const
overridevirtualinherited

Return the type of the data to be stored for one aux data item.

Implements SG::IAuxStoreIO.

Definition at line 541 of file ShallowAuxContainer.cxx.

541 {
542
543 guard_t guard (m_mutex);
544 // Do we have it?
545 if( m_storeIO && m_store->getAuxIDs().test (auxid)) {
546 return m_storeIO->getIOType( auxid );
547 }
548
549 // Do we have a parent that has it?
550 const SG::IAuxStoreIO* parentIO = m_parentIO;
551 if( ( parentIO == nullptr ) && m_parentLink.isValid() ) {
552 parentIO =
553 dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
554 }
555 if( parentIO ) {
556 return parentIO->getIOType( auxid );
557 }
558
559 // If not, then where did this variable come from?!?
560 std::cerr << "ERROR xAOD::ShallowAuxContainer::getIOType Unknown "
561 << "variable ("
563 << ") requested" << std::endl;
564 return nullptr;
565 }
virtual const std::type_info * getIOType(SG::auxid_t auxid) const =0
Return the type of the data to be stored for one aux data item.

◆ getSelectedAuxIDs()

ShallowAuxContainer::auxid_set_t xAOD::ShallowAuxContainer::getSelectedAuxIDs ( ) const
overridevirtualinherited

Get the IDs of the selected dynamic Aux variables (for writing)

Reimplemented from SG::IAuxStoreIO.

Definition at line 583 of file ShallowAuxContainer.cxx.

583 {
584
585 if( m_shallowIO ) {
586 if( m_storeIO ) {
587 return m_selection.getSelectedAuxIDs( m_store->getAuxIDs() );
588 } else {
589 return auxid_set_t();
590 }
591 } else {
592 return m_selection.getSelectedAuxIDs( getAuxIDs() );
593 }
594 }
AuxSelection m_selection
Dynamic attributes selection implementation.

◆ getStore() [1/2]

const SG::IAuxStore * xAOD::ShallowAuxContainer::getStore ( ) const
overridevirtualinherited

Implements SG::IAuxStoreHolder.

Definition at line 159 of file ShallowAuxContainer.cxx.

160 {
161 return m_store;
162 }

◆ getStore() [2/2]

SG::IAuxStore * xAOD::ShallowAuxContainer::getStore ( )
overridevirtualinherited

Get the currently used internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 154 of file ShallowAuxContainer.cxx.

155 {
156 return m_store;
157 }

◆ getStoreType()

virtual AuxStoreType xAOD::ShallowAuxInfo::getStoreType ( ) const
inlinevirtual

Return the type of the store object.

Reimplemented from xAOD::ShallowAuxContainer.

Definition at line 43 of file ShallowAuxInfo.h.

43{ return AST_ObjectStore; }

◆ getVector()

const SG::IAuxTypeVector * xAOD::ShallowAuxContainer::getVector ( SG::auxid_t auxid) const
finaloverridevirtualinherited

Return vector interface for one aux data item.

Implements SG::IConstAuxStore.

Definition at line 201 of file ShallowAuxContainer.cxx.

201 {
202
203 guard_t guard( m_mutex );
204
205 // Check if we have this variable ourselves. I use getData(...)
206 // instead of getAuxIDs(), as a dynamic store may not have connected
207 // to all the variables yet that it has available...
208 size_t nids = m_store->getAuxIDs().size();
209 const SG::IAuxTypeVector* result = m_store->getVector( auxid );
210 if( result != nullptr && result->toPtr() != nullptr ) {
211 if( nids != m_store->getAuxIDs().size() ) {
212 remakeAuxIDs();
213 }
214 return result;
215 }
216
217 // If not, then leave it up to the parent object do deal with this:
218 if( m_parentLink.isValid() ) {
219 nids = m_parentLink->getAuxIDs().size();
220 result = m_parentLink->getVector( auxid );
221 if( result && ( nids != m_parentLink->getAuxIDs().size() ) ) {
222 remakeAuxIDs();
223 }
224 return result;
225 }
226
227 // Apparently the variable wasn't found:
228 return nullptr;
229 }

◆ getWritableAuxIDs()

const ShallowAuxContainer::auxid_set_t & xAOD::ShallowAuxContainer::getWritableAuxIDs ( ) const
overridevirtualinherited

Return a set of writable data identifiers.

Implements SG::IAuxStore.

Definition at line 467 of file ShallowAuxContainer.cxx.

467 {
468
469 // Only the variables in the dynamic store are writable. Maybe not
470 // even all of those...
471 return m_store->getWritableAuxIDs();
472 }

◆ insertMove() [1/2]

virtual bool SG::IAuxStore::insertMove ( size_t pos,
IAuxStore & other,
const SG::auxid_set_t & ignore = SG::auxid_set_t() )
pure virtualinherited

Move all elements from other to this store.

Parameters
posThe starting index of the insertion.
otherStore from which to do the move.
ignoreSet of variables that should not be added to the store.

Let len be the size of other. The store will be increased in size by len elements, with the elements at pos being copied to pos+len. Then, for each auxiliary variable, the entire contents of that variable for other will be moved to this store at index pos. This will be done via move semantics if possible; otherwise, it will be done with a copy. Variables present in this store but not in other will have the corresponding elements default-initialized. Variables in other but not in this store will be added unless they are in ignore.

Returns true if it is known that none of the vectors' memory moved, false otherwise.

Implemented in SG::AuxStoreInternal.

◆ insertMove() [2/2]

bool xAOD::ShallowAuxContainer::insertMove ( size_t pos,
IAuxStore & other,
const SG::auxid_set_t & ignore )
overridevirtualinherited

Insert contents of another store via move.

Definition at line 498 of file ShallowAuxContainer.cxx.

500 {
501
502 // Nope, not allowed...
503 throw std::runtime_error( "Trying to call insertMove on a shallow copy "
504 "container" );
505 }

◆ isDecoration()

bool xAOD::ShallowAuxContainer::isDecoration ( auxid_t auxid) const
overridevirtualinherited

Test if a variable is a decoration.

Implements SG::IConstAuxStore.

Definition at line 251 of file ShallowAuxContainer.cxx.

252 {
253 guard_t guard( m_mutex );
254 if (m_parentLink.isValid()) {
255 if (m_parentLink->isDecoration (auxid)) {
256 return true;
257 }
258 }
259 return m_store->isDecoration (auxid);
260 }

◆ linkedVector() [1/2]

virtual IAuxTypeVector * SG::IAuxStore::linkedVector ( SG::auxid_t )
inlinevirtualinherited

Reimplemented in SG::AuxStoreInternal, xAOD::AuxContainerBase, xAOD::AuxInfoBase, and xAOD::details::AuxStoreBase.

Definition at line 187 of file IAuxStore.h.

188 { return nullptr; }

◆ linkedVector() [2/2]

virtual const IAuxTypeVector * SG::IConstAuxStore::linkedVector ( SG::auxid_t ) const
inlinevirtualinherited

Return interface for a linked variable.

Parameters
auxidThe ID of the parent variable.

If auxid has a linked variable, then return the IAuxTypeVector describing it. Otherwise, return nullptr. May return nullptr unconditionally if this store does not support linked variables.

Reimplemented from SG::IConstAuxStore.

Definition at line 189 of file IConstAuxStore.h.

190 { return nullptr; }

◆ lock()

void xAOD::ShallowAuxContainer::lock ( )
overridevirtualinherited

Lock the container.

Implements SG::IConstAuxStore.

Definition at line 349 of file ShallowAuxContainer.cxx.

350 {
351 guard_t guard (m_mutex);
352 m_locked = true;
353 m_store->lock();
354 }

◆ lockDecoration()

void xAOD::ShallowAuxContainer::lockDecoration ( SG::auxid_t auxid)
overridevirtualinherited

Lock a decoration.

Implements SG::IConstAuxStore.

Definition at line 358 of file ShallowAuxContainer.cxx.

359 {
360 guard_t guard (m_mutex);
361 m_store->lockDecoration (auxid);
362 m_auxidsValid = false;
363 }

◆ name()

const char * xAOD::ShallowAuxContainer::name ( ) const
inherited

Get the name of the container instance.

Definition at line 600 of file ShallowAuxContainer.cxx.

600 {
601
602 return m_name.c_str();
603 }
std::string m_name
Name of the container in memory. Set externally.

◆ parent()

const DataLink< SG::IConstAuxStore > & xAOD::ShallowAuxContainer::parent ( ) const
inherited

Get the parent store.

Definition at line 122 of file ShallowAuxContainer.cxx.

122 {
123
124 return m_parentLink;
125 }

◆ remakeAuxIDs()

void xAOD::ShallowAuxContainer::remakeAuxIDs ( ) const
privateinherited

Definition at line 611 of file ShallowAuxContainer.cxx.

611 {
612 auxid_set_t ids = m_store->getAuxIDs();
613 if( m_parentLink.isValid() ) {
614 ids.insert (m_parentLink->getAuxIDs());
615 }
616
617 auxid_set_t decors = m_store->getDecorIDs();
618 if( m_parentLink.isValid() ) {
619 ids.insert (m_parentLink->getDecorIDs());
620 }
621
622 m_decorids = std::move(decors);
623 std::atomic_thread_fence( std::memory_order_seq_cst );
624 m_auxids = std::move(ids);
625
626 m_auxidsValid = true;
627 }

◆ reserve()

void xAOD::ShallowAuxContainer::reserve ( size_t size)
overridevirtualinherited

Reserve a given size for the arrays.

Implements SG::IAuxStore.

Definition at line 484 of file ShallowAuxContainer.cxx.

484 {
485
486 // Nope, not allowed...
487 throw std::runtime_error( "Trying to call reserve on a shallow copy "
488 "container" );
489 }

◆ resize()

bool xAOD::ShallowAuxContainer::resize ( size_t size)
overridevirtualinherited

Resize the arrays to a given size.

Implements SG::IAuxStore.

Definition at line 474 of file ShallowAuxContainer.cxx.

475 {
476 if (size == this->size()) {
477 return false;
478 }
479 // Nope, not allowed...
480 throw std::runtime_error( "Trying to call resize on a shallow copy "
481 "container" );
482 }

◆ setName()

void xAOD::ShallowAuxContainer::setName ( const char * name)
inherited

Set the name of the container instance.

Definition at line 605 of file ShallowAuxContainer.cxx.

605 {
606
607 m_name = name;
608 return;
609 }
const char * name() const
Get the name of the container instance.

◆ setOption()

virtual bool SG::IAuxStore::setOption ( auxid_t ,
const AuxDataOption &  )
inlinevirtualinherited

Set an option for a given auxiliary variable.

Parameters
auxidThe identifier of the desired aux data item.
optionThe option to set.

The interpretation of the option depends on the particular representation of the variable.

Returns true if the option setting was successful; false otherwise.

Reimplemented in SG::AuxStoreInternal, xAOD::AuxContainerBase, and xAOD::AuxInfoBase.

Definition at line 173 of file IAuxStore.h.

174 { return false; }

◆ setParent()

void xAOD::ShallowAuxContainer::setParent ( const DataLink< SG::IConstAuxStore > & link)
inherited

Set the parent store.

Definition at line 127 of file ShallowAuxContainer.cxx.

128 {
129
130 guard_t guard (m_mutex);
131 m_parentLink = link;
132 m_parentIO = dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
133 m_auxidsValid = false;
134 return;
135 }

◆ setShallowIO()

void xAOD::ShallowAuxContainer::setShallowIO ( bool value)
inherited

Set whether only the overriden parameters should be written out.

Definition at line 142 of file ShallowAuxContainer.cxx.

142 {
143
144 guard_t guard (m_mutex);
146 return;
147 }

◆ setStore()

void xAOD::ShallowAuxContainer::setStore ( SG::IAuxStore * store)
overridevirtualinherited

Set a different internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 164 of file ShallowAuxContainer.cxx.

164 {
165
166 // Check if anything needs to be done:
167 guard_t guard (m_mutex);
168 if( store == m_store ) return;
169
170 if( m_ownsStore && m_store ) {
171 delete m_store;
172 m_store = nullptr;
173 }
174
175 // Do the assignment:
176 m_store = store;
177 m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
178 m_ownsStore = true;
179 m_auxidsValid = false;
180
181 return;
182 }
bool m_ownsStore
Flag deciding if the object owns the dynamic store or not.
TestStore store
Definition TestStore.cxx:23

◆ shallowIO()

bool xAOD::ShallowAuxContainer::shallowIO ( ) const
inherited

Check whether only the overriden parameters will be written out or not.

Definition at line 137 of file ShallowAuxContainer.cxx.

137 {
138
139 return m_shallowIO;
140 }

◆ shift()

void xAOD::ShallowAuxContainer::shift ( size_t pos,
ptrdiff_t offs )
overridevirtualinherited

Shift the contents of the stored arrays.

Implements SG::IAuxStore.

Definition at line 491 of file ShallowAuxContainer.cxx.

491 {
492
493 // Nope, not allowed...
494 throw std::runtime_error( "Trying to call shift on a shallow copy "
495 "container" );
496 }

◆ size()

size_t xAOD::ShallowAuxContainer::size ( ) const
overridevirtualinherited

Get the size of the container.

Implements SG::IConstAuxStore.

Definition at line 365 of file ShallowAuxContainer.cxx.

365 {
366
367 guard_t guard( m_mutex );
368 size_t sz = m_store->size();
369 if( sz > 0 ) {
370 return sz;
371 }
372 if( m_parentLink.isValid() ) {
373 return m_parentLink->size();
374 }
375 return 0;
376 }
static Double_t sz

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/3]

auxid_set_t m_auxids xAOD::ShallowAuxContainer::ATLAS_THREAD_SAFE
mutableprivateinherited

Definition at line 203 of file ShallowAuxContainer.h.

◆ ATLAS_THREAD_SAFE [2/3]

auxid_set_t m_decorids xAOD::ShallowAuxContainer::ATLAS_THREAD_SAFE
mutableprivateinherited

Definition at line 204 of file ShallowAuxContainer.h.

◆ ATLAS_THREAD_SAFE [3/3]

bool m_auxidsValid xAOD::ShallowAuxContainer::ATLAS_THREAD_SAFE
mutableprivateinherited

Definition at line 205 of file ShallowAuxContainer.h.

◆ m_locked

bool xAOD::ShallowAuxContainer::m_locked
privateinherited

Flag keeping track of whether this object is locked or not.

Definition at line 187 of file ShallowAuxContainer.h.

◆ m_mutex

mutex_t xAOD::ShallowAuxContainer::m_mutex
mutableprivateinherited

Definition at line 199 of file ShallowAuxContainer.h.

◆ m_name

std::string xAOD::ShallowAuxContainer::m_name
privateinherited

Name of the container in memory. Set externally.

Definition at line 208 of file ShallowAuxContainer.h.

◆ m_ownsStore

bool xAOD::ShallowAuxContainer::m_ownsStore
privateinherited

Flag deciding if the object owns the dynamic store or not.

Definition at line 185 of file ShallowAuxContainer.h.

◆ m_parentIO

const SG::IAuxStoreIO* xAOD::ShallowAuxContainer::m_parentIO
privateinherited

Optional pointer to the IO interface of the parent object.

Definition at line 192 of file ShallowAuxContainer.h.

◆ m_parentLink

DataLink< SG::IConstAuxStore > xAOD::ShallowAuxContainer::m_parentLink
privateinherited

Link to the parent object.

Definition at line 190 of file ShallowAuxContainer.h.

◆ m_selection

AuxSelection xAOD::ShallowAuxContainer::m_selection
privateinherited

Dynamic attributes selection implementation.

Definition at line 178 of file ShallowAuxContainer.h.

◆ m_shallowIO

bool xAOD::ShallowAuxContainer::m_shallowIO
privateinherited

Flag for whether to do "shallow IO" or not.

Definition at line 194 of file ShallowAuxContainer.h.

◆ m_store

SG::IAuxStore* xAOD::ShallowAuxContainer::m_store
privateinherited

Internal dynamic auxiliary store object.

Definition at line 181 of file ShallowAuxContainer.h.

◆ m_storeIO

SG::IAuxStoreIO* xAOD::ShallowAuxContainer::m_storeIO
privateinherited

The IO interface to the internal auxiliary store.

Definition at line 183 of file ShallowAuxContainer.h.

◆ supportsThinning

bool xAOD::ShallowAuxInfo::supportsThinning = false
staticconstexpr

Flag that we should not use the xAOD aux store pool converter for this type.

Definition at line 35 of file ShallowAuxInfo.h.


The documentation for this class was generated from the following files: