The Gaudi Framework  v38r3 (c3fc9673)
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 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