The Gaudi Framework  v36r7 (7f57a304)
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...
 

Public Types

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

Public Member Functions

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

Static Public Member Functions

static LinkManagernewInstance ()
 Static instantiation. More...
 
static void setInstantiator (LinkManager *(*newInstance)())
 Assign new instantiator. More...
 

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()

LinkManager::LinkManager ( )
default

Standard Constructor.

◆ ~LinkManager()

LinkManager::~LinkManager ( )

Standard Destructor.

destructor

Definition at line 20 of file LinkManager.cpp.

20  {
21  for ( auto& i : m_linkVector ) delete i;
22 }

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

59  {
60  long n = 0;
61  for ( auto& lnk : m_linkVector ) {
62  const DataObject* pO = lnk->object();
63  if ( pO && pO == pObject ) return n;
64  if ( lnk->path() == path ) {
65  if ( pObject && pObject != pO ) { lnk->setObject( const_cast<DataObject*>( pObject ) ); }
66  return n;
67  }
68  ++n;
69  }
70  // Link is completely unknown
71  return m_linkVector.emplace_back( new Link( m_linkVector.size(), path, const_cast<DataObject*>( pObject ) ) )->ID();
72 }

◆ empty()

bool LinkManager::empty ( ) const
inline

Definition at line 92 of file LinkManager.h.

92 { return m_linkVector.empty(); }

◆ link() [1/3]

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

Retrieve symbolic link identified by object.

Retrieve symbolic link identified by Object pointer.

Definition at line 45 of file LinkManager.cpp.

45  {
46  if ( !pObject ) return nullptr;
47  auto i = std::find_if( m_linkVector.begin(), m_linkVector.end(), [=]( auto* j ) { return j->object() == pObject; } );
48  return i != m_linkVector.end() ? *i : nullptr;
49 }

◆ link() [2/3]

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

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() [3/3]

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

Retrieve symbolic link identified by path.

Retrieve symbolic link identified by Object path.

Definition at line 52 of file LinkManager.cpp.

52  {
53  if ( path.empty() ) return nullptr;
54  auto i = std::find_if( m_linkVector.begin(), m_linkVector.end(), [=]( auto* j ) { return j->path() == path; } );
55  return i != m_linkVector.end() ? *i : nullptr;
56 }

◆ newInstance()

LinkManager * LinkManager::newInstance ( )
static

Static instantiation.

Definition at line 37 of file LinkManager.cpp.

37 { return s_newInstance ? ( *s_newInstance )() : new LinkManager(); }

◆ setInstantiator()

void LinkManager::setInstantiator ( LinkManager *(*)()  newInstance)
static

Assign new instantiator.

Definition at line 34 of file LinkManager.cpp.

34 { s_newInstance = newInstance; }

◆ 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:
std::find_if
T find_if(T... args)
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:961
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:235
DataObject
Definition: DataObject.h:40