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
 
Link * link (long id)
 Retrieve symbolic link identified by ID. More...
 
Link * link (const DataObject *pObject)
 Retrieve symbolic link identified by object. More...
 
Link * link (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 LinkManager * newInstance ()
 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