The Gaudi Framework  master (594c33fa)
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
 
LinkManageroperator= (LinkManager &&)=default
 
 LinkManager (LinkManager const &)=delete
 
LinkManageroperator= (LinkManager const &)=delete
 
 ~LinkManager ()
 Standard Destructor. More...
 
long size () const
 Retrieve number of link present. More...
 
bool empty () const
 
const Linklink (long id) const
 Retrieve symbolic link identified by ID. More...
 
Linklink (long id)
 
const Linklink (const DataObject *pObject) const
 Retrieve symbolic link identified by object. More...
 
Linklink (const DataObject *pObject)
 
const Linklink (std::string_view path) const
 Retrieve symbolic link identified by path. More...
 
Linklink (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 31 of file LinkManager.h.

Member Enumeration Documentation

◆ DirLinkType

Directory link types.

Enumerator
INVALID 
VALID 

Definition at line 35 of file LinkManager.h.

35 { 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 27 of file LinkManager.cpp.

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

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 67 of file LinkManager.cpp.

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

◆ begin()

auto LinkManager::begin ( ) const
inline

Definition at line 107 of file LinkManager.h.

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

◆ empty()

bool LinkManager::empty ( ) const
inline

Definition at line 92 of file LinkManager.h.

92 { return m_linkVector.empty(); }

◆ end()

Sentinel LinkManager::end ( ) const
inline

Definition at line 106 of file LinkManager.h.

106 { return {}; }

◆ link() [1/6]

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

Definition at line 54 of file LinkManager.cpp.

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

◆ 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 50 of file LinkManager.cpp.

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

◆ link() [3/6]

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

Definition at line 45 of file LinkManager.cpp.

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

◆ link() [4/6]

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

Retrieve symbolic link identified by ID.

Definition at line 41 of file LinkManager.cpp.

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

◆ link() [5/6]

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

Definition at line 62 of file LinkManager.cpp.

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

◆ 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 59 of file LinkManager.cpp.

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

◆ 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 91 of file LinkManager.h.

91 { 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 79 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:86
GaudiAlg.HistoUtils.path
path
Definition: HistoUtils.py:960
GaudiPartProp.tests.id
id
Definition: tests.py:111
ProduceConsume.j
j
Definition: ProduceConsume.py:101
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:234
DataObject
Definition: DataObject.h:36
Gaudi::Details::operator==
bool operator==(const PropertyId &lhs, const PropertyId &rhs)
Definition: PropertyId.h:111
Iterator
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Definition: Iterator.h:28