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  s_newInstance = newInstance;
25 }
26 
29  return s_newInstance ? (*s_newInstance)() : new LinkManager();
30 }
31 
34  return (0<=id && (unsigned)id < m_linkVector.size()) ? m_linkVector[id] : nullptr;
35 }
36 
39  if ( pObject ) {
40  for ( auto& i : m_linkVector ) {
41  if ( i->object() == pObject ) return i;
42  }
43  }
44  return nullptr;
45 }
46 
49  if ( 0 != path.length() ) {
50  for ( auto & i : m_linkVector ) {
51  if ( i->path() == path ) return i;
52  }
53  }
54  return nullptr;
55 }
56 
58 long LinkManager::addLink(const std::string& path, const DataObject* pObject) const {
59  long n = 0;
60  for ( auto& lnk : m_linkVector ) {
61  const DataObject* pO = lnk->object();
62  if ( pO && pO == pObject ) return n;
63  if ( lnk->path() == path ) {
64  if ( pObject && pObject != pO ) {
65  lnk->setObject(const_cast<DataObject*>(pObject));
66  }
67  return n;
68  }
69  ++n;
70  }
71  // Link is completely unknown
72  m_linkVector.emplace_back( new Link(m_linkVector.size(), path, const_cast<DataObject*>(pObject)) );
73  return m_linkVector.back()->ID();
74 }
75 
76 // Remove a link by object reference
77 long LinkManager::removeLink(const DataObject* pObject) const {
78  long n = 0;
79  for ( auto i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
80  if ( (*i)->object() == pObject ) {
81  delete *i;
82  m_linkVector.erase(i);
83  return n;
84  }
85  ++n;
86  }
87  return INVALID;
88 }
89 
90 // Remove a link by object reference
92  long n = 0;
93  for ( auto i = m_linkVector.begin(); i != m_linkVector.end(); i++ ) {
94  if ( (*i)->path() == path ) {
95  delete *i;
96  m_linkVector.erase(i);
97  return n;
98  }
99  n++;
100  }
101  return INVALID;
102 }
103 
104 // Remove a link by object reference
105 long LinkManager::removeLink(long id) const {
106  auto i = std::next(m_linkVector.begin(), id );
107  delete *i;
108  m_linkVector.erase(i);
109  return id;
110 }
111 
114  for (auto& i : m_linkVector) delete i;
115  m_linkVector.clear();
116 }
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