The Gaudi Framework  v40r0 (475e45c1)
LinkManager Class Referencefinal

#include <GaudiKernel/LinkManager.h>

Collaboration diagram for LinkManager:

Classes

class  Link
 Embedded class defining a symbolic link Note: No explicit copy constructor; implicit compiler generated one is just fine. More...
 
struct  Sentinel
 

Public Types

enum  DirLinkType { INVALID, VALID }
 Directory link types. More...
 

Public Member Functions

 LinkManager ()=default
 Standard Constructor. More...
 
 LinkManager (LinkManager &&)=default
 
LinkManager & operator= (LinkManager &&)=default
 
 LinkManager (LinkManager const &)=delete
 
LinkManager & operator= (LinkManager const &)=delete
 
 ~LinkManager ()
 Standard Destructor. More...
 
long size () const
 Retrieve number of link present. More...
 
bool empty () const
 
const Link * link (long id) const
 Retrieve symbolic link identified by ID. More...
 
Link * link (long id)
 
const Link * link (const DataObject *pObject) const
 Retrieve symbolic link identified by object. More...
 
Link * link (const DataObject *pObject)
 
const Link * link (std::string_view path) const
 Retrieve symbolic link identified by path. More...
 
Link * link (std::string_view path)
 
long addLink (const std::string &path, const DataObject *pObject)
 Add link by object reference and path. More...
 
Sentinel end () const
 
auto begin () const
 

Private Attributes

std::vector< Link * > m_linkVector
 @ TODO: replace by std::vector<std::unique_ptr<Link>> once ROOT does 'automatic' schema conversion from T* to std::unique_ptr<T>... More...
 

Detailed Description

A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of non-tree like links.

Author
M.Frank

Definition at line 28 of file LinkManager.h.

Member Enumeration Documentation

◆ DirLinkType

Directory link types.

Enumerator
INVALID 
VALID 

Definition at line 32 of file LinkManager.h.

32 { INVALID, VALID };

Constructor & Destructor Documentation

◆ LinkManager() [1/3]

LinkManager::LinkManager ( )
default

Standard Constructor.

◆ LinkManager() [2/3]

LinkManager::LinkManager ( LinkManager &&  )
default

◆ LinkManager() [3/3]

LinkManager::LinkManager ( LinkManager const &  )
delete

◆ ~LinkManager()

LinkManager::~LinkManager ( )

Standard Destructor.

destructor

Definition at line 26 of file LinkManager.cpp.

26  {
27  for ( auto& i : m_linkVector ) delete i;
28 }

Member Function Documentation

◆ addLink()

long LinkManager::addLink ( const std::string &  path,
const DataObject *  pObject 
)

Add link by object reference and path.

Add link by object reference and path string.

Definition at line 66 of file LinkManager.cpp.

66  {
67  long n = 0;
68  for ( auto& lnk : m_linkVector ) {
69  const DataObject* pO = lnk->object();
70  if ( pO && pO == pObject ) return n;
71  if ( lnk->path() == path ) {
72  if ( pObject && pObject != pO ) { lnk->setObject( const_cast<DataObject*>( pObject ) ); }
73  return n;
74  }
75  ++n;
76  }
77  // Link is completely unknown
78  return m_linkVector.emplace_back( new Link( m_linkVector.size(), path, const_cast<DataObject*>( pObject ) ) )->ID();
79 }

◆ begin()

auto LinkManager::begin ( ) const
inline

Definition at line 104 of file LinkManager.h.

104  {
105  class Iterator {
106  int i;
107  LinkManager const* parent;
108 
109  public:
110  Iterator( LinkManager const* p, int i ) : i{ i }, parent{ p } {}
111  bool operator==( Sentinel ) const { return i == parent->size(); }
112  bool operator!=( Sentinel ) const { return !( *this == Sentinel{} ); }
113  Iterator& operator++() {
114  ++i;
115  return *this;
116  }
117  const Link& operator*() const { return *parent->link( i ); }
118  };
119  return Iterator{ this, 0 };
120  }

◆ empty()

bool LinkManager::empty ( ) const
inline

Definition at line 89 of file LinkManager.h.

89 { return m_linkVector.empty(); }

◆ end()

Sentinel LinkManager::end ( ) const
inline

Definition at line 103 of file LinkManager.h.

103 { return {}; }

◆ link() [1/6]

LinkManager::Link * LinkManager::link ( const DataObject *  pObject)

Definition at line 53 of file LinkManager.cpp.

53  {
54  return pObject ? findLink( m_linkVector, [=]( auto* j ) { return j->object() == pObject; } ) : nullptr;
55 }

◆ link() [2/6]

const LinkManager::Link * LinkManager::link ( const DataObject *  pObject) const

Retrieve symbolic link identified by object.

Retrieve symbolic link identified by Object pointer.

Definition at line 49 of file LinkManager.cpp.

49  {
50  return pObject ? findLink( m_linkVector, [=]( auto* j ) { return j->object() == pObject; } ) : nullptr;
51 }

◆ link() [3/6]

LinkManager::Link * LinkManager::link ( long  id)

Definition at line 44 of file LinkManager.cpp.

44  {
45  return ( 0 <= id && (unsigned)id < m_linkVector.size() ) ? m_linkVector[id] : nullptr;
46 }

◆ link() [4/6]

const LinkManager::Link * LinkManager::link ( long  id) const

Retrieve symbolic link identified by ID.

Definition at line 40 of file LinkManager.cpp.

40  {
41  return ( 0 <= id && (unsigned)id < m_linkVector.size() ) ? m_linkVector[id] : nullptr;
42 }

◆ link() [5/6]

LinkManager::Link * LinkManager::link ( std::string_view  path)

Definition at line 61 of file LinkManager.cpp.

61  {
62  return !path.empty() ? findLink( m_linkVector, [=]( auto* j ) { return j->path() == path; } ) : nullptr;
63 }

◆ link() [6/6]

const LinkManager::Link * LinkManager::link ( std::string_view  path) const

Retrieve symbolic link identified by path.

Retrieve symbolic link identified by Object path.

Definition at line 58 of file LinkManager.cpp.

58  {
59  return !path.empty() ? findLink( m_linkVector, [=]( auto* j ) { return j->path() == path; } ) : nullptr;
60 }

◆ operator=() [1/2]

LinkManager& LinkManager::operator= ( LinkManager &&  )
default

◆ operator=() [2/2]

LinkManager& LinkManager::operator= ( LinkManager const &  )
delete

◆ size()

long LinkManager::size ( ) const
inline

Retrieve number of link present.

Definition at line 88 of file LinkManager.h.

88 { return m_linkVector.size(); }

Member Data Documentation

◆ m_linkVector

std::vector<Link*> LinkManager::m_linkVector
private

@ TODO: replace by std::vector<std::unique_ptr<Link>> once ROOT does 'automatic' schema conversion from T* to std::unique_ptr<T>...

Or, even better, just std::vector<Link>, given that Link is barely larger than a pointer (40 vs. 8 bytes) – but that requires more invasive schema evolution.

The vector containing all links which are non-tree like

Definition at line 76 of file LinkManager.h.


The documentation for this class was generated from the following files:
Gaudi::Accumulators::operator*
auto operator*(const std::chrono::duration< Rep1, Period > &lhs, const std::chrono::duration< Rep2, Period > &rhs)
Multiplication of two std::chrono::duration objects with same Period.
Definition: Counters.h:40
Gaudi::Allocator::operator!=
constexpr bool operator!=(Arena< Resource, T, DefaultResource > const &lhs, Arena< Resource, U, DefaultResource > const &rhs)
Definition: Arena.h:87
AtlasMCRecoFullPrecedenceDump.path
path
Definition: AtlasMCRecoFullPrecedenceDump.py:49
GaudiPartProp.tests.id
id
Definition: tests.py:111
ProduceConsume.j
j
Definition: ProduceConsume.py:104
cpluginsvc.n
n
Definition: cpluginsvc.py:234
DataObject
Definition: DataObject.h:37
Gaudi::Details::operator==
bool operator==(const PropertyId &lhs, const PropertyId &rhs)
Definition: PropertyId.h:103
Iterator
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Definition: Iterator.h:18