All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
LinkManager.cpp
Go to the documentation of this file.
1 // $Header: /tmp/svngaudi/tmp.jEpFh25751/Gaudi/GaudiKernel/src/Lib/LinkManager.cpp,v 1.3 2004/01/23 11:22:04 mato Exp $
2 
3 // Experiment specific include files
7 
8 static LinkManager* (*s_newInstance)() = 0;
9 
12  if ( 0 != m_pObject ) {
13  IRegistry* pReg = m_pObject->registry();
14  if ( 0 != pReg ) {
15  return pReg->address();
16  }
17  }
18  return 0;
19 }
20 
23  s_newInstance = newInstance;
24 }
25 
28  return s_newInstance ? (*s_newInstance)() : new LinkManager();
29 }
30 
33 }
34 
37  clearLinks();
38 }
39 
42  return (0<=id && (unsigned)id < m_linkVector.size()) ? m_linkVector[id] : 0;
43 }
44 
47  if ( 0 != pObject ) {
48  for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
49  if ( (*i)->object() == pObject ) {
50  return (*i);
51  }
52  }
53  }
54  return 0;
55 }
56 
59  if ( 0 != path.length() ) {
60  for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
61  if ( (*i)->path() == path ) {
62  return (*i);
63  }
64  }
65  }
66  return 0;
67 }
68 
70 long LinkManager::addLink(const std::string& path, const DataObject* pObject) const {
71  long n = 0;
72  for ( LinkVector::const_iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
73  Link* lnk = *i;
74  const DataObject* pO = lnk->object();
75  if ( 0 != pO && pO == pObject ) {
76  return n;
77  }
78  bool same_path = lnk->path() == path;
79  if ( same_path ) {
80  if ( 0 != pObject && pObject != pO ) {
81  lnk->setObject(pObject);
82  }
83  return n;
84  }
85  n++;
86  }
87  // Link is completely unknown
88  Link* link = new Link(m_linkVector.size(), path, pObject);
89  m_linkVector.push_back( link );
90  return link->ID();
91 }
92 
93 // Remove a link by object reference
94 long LinkManager::removeLink(const DataObject* pObject) const {
95  long n = 0;
96  for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
97  if ( (*i)->object() == pObject ) {
98  delete (*i);
99  m_linkVector.erase(i);
100  return n;
101  }
102  n++;
103  }
104  return INVALID;
105 }
106 
107 // Remove a link by object reference
108 long LinkManager::removeLink(const std::string& path) const {
109  long n = 0;
110  for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
111  if ( (*i)->path() == path ) {
112  delete (*i);
113  m_linkVector.erase(i);
114  return n;
115  }
116  n++;
117  }
118  return INVALID;
119 }
120 
121 // Remove a link by object reference
122 long LinkManager::removeLink(long id) const {
123  LinkVector::iterator i = m_linkVector.begin();
124  i += id;
125  delete (*i);
126  m_linkVector.erase(i);
127  return id;
128 }
129 
132  for ( LinkVector::iterator i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
133  delete (*i);
134  }
135  m_linkVector.erase(m_linkVector.begin(), m_linkVector.end());
136 }
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:69
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
GAUDI_API std::string path(const AIDA::IBaseHistogram *aida)
get the path in THS for AIDA histogram
Opaque address interface definition.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:31
list i
Definition: ana.py:128