Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v31r0 (aeb156f0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
LinkManager.cpp
Go to the documentation of this file.
1 // Experiment specific include files
5 
6 static LinkManager* ( *s_newInstance )() = nullptr;
7 
10  for ( auto& i : m_linkVector ) delete i;
11 }
12 
15  if ( m_pObject ) {
16  IRegistry* pReg = m_pObject->registry();
17  if ( pReg ) return pReg->address();
18  }
19  return nullptr;
20 }
21 
24 
26 LinkManager* LinkManager::newInstance() { return s_newInstance ? ( *s_newInstance )() : new LinkManager(); }
27 
30  return ( 0 <= id && (unsigned)id < m_linkVector.size() ) ? m_linkVector[id] : nullptr;
31 }
32 
35  if ( pObject ) {
36  for ( auto& i : m_linkVector ) {
37  if ( i->object() == pObject ) return i;
38  }
39  }
40  return nullptr;
41 }
42 
45  if ( 0 != path.length() ) {
46  for ( auto& i : m_linkVector ) {
47  if ( i->path() == path ) return i;
48  }
49  }
50  return nullptr;
51 }
52 
54 long LinkManager::addLink( const std::string& path, const DataObject* pObject ) const {
55  long n = 0;
56  for ( auto& lnk : m_linkVector ) {
57  const DataObject* pO = lnk->object();
58  if ( pO && pO == pObject ) return n;
59  if ( lnk->path() == path ) {
60  if ( pObject && pObject != pO ) { lnk->setObject( const_cast<DataObject*>( pObject ) ); }
61  return n;
62  }
63  ++n;
64  }
65  // Link is completely unknown
66  m_linkVector.emplace_back( new Link( m_linkVector.size(), path, const_cast<DataObject*>( pObject ) ) );
67  return m_linkVector.back()->ID();
68 }
69 
70 // Remove a link by object reference
71 long LinkManager::removeLink( const DataObject* pObject ) const {
72  long n = 0;
73  for ( auto i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
74  if ( ( *i )->object() == pObject ) {
75  delete *i;
76  m_linkVector.erase( i );
77  return n;
78  }
79  ++n;
80  }
81  return INVALID;
82 }
83 
84 // Remove a link by object reference
86  long n = 0;
87  for ( auto i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
88  if ( ( *i )->path() == path ) {
89  delete *i;
90  m_linkVector.erase( i );
91  return n;
92  }
93  n++;
94  }
95  return INVALID;
96 }
97 
98 // Remove a link by object reference
99 long LinkManager::removeLink( long id ) const {
100  auto i = std::next( m_linkVector.begin(), id );
101  delete *i;
102  m_linkVector.erase( i );
103  return id;
104 }
105 
108  for ( auto& i : m_linkVector ) delete i;
109  m_linkVector.clear();
110 }
STL class.
T next(T...args)
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
T length(T...args)
Opaque address interface definition.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30