The Gaudi Framework
master (2e57474e)
Toggle main menu visibility
Loading...
Searching...
No Matches
LinkManager.cpp
Go to the documentation of this file.
1
/***********************************************************************************\
2
* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3
* *
4
* This software is distributed under the terms of the Apache version 2 licence, *
5
* copied verbatim in the file "LICENSE". *
6
* *
7
* In applying this licence, CERN does not waive the privileges and immunities *
8
* granted to it by virtue of its status as an Intergovernmental Organization *
9
* or submit itself to any jurisdiction. *
10
\***********************************************************************************/
11
#include <
GaudiKernel/DataObject.h
>
12
#include <
GaudiKernel/IRegistry.h
>
13
#include <
GaudiKernel/LinkManager.h
>
14
#include <algorithm>
15
16
namespace
{
17
template
<
typename
Container,
typename
Pred>
18
auto
findLink( Container& c, Pred pred ) {
19
auto
i = std::find_if(
c
.begin(),
c
.end(), pred );
20
return
i !=
c
.end() ? *i :
nullptr
;
21
}
22
23
}
// namespace
24
26
LinkManager::~LinkManager
() {
27
for
(
auto
& i :
m_linkVector
)
delete
i;
28
}
29
31
IOpaqueAddress
*
LinkManager::Link::address
() {
32
if
(
m_pObject
) {
33
IRegistry
* pReg =
m_pObject
->registry();
34
if
( pReg )
return
pReg->
address
();
35
}
36
return
nullptr
;
37
}
38
40
const
LinkManager::Link
*
LinkManager::link
(
long
id
)
const
{
41
return
( 0 <=
id
&& (
unsigned
)
id
<
m_linkVector
.size() ) ?
m_linkVector
[id] :
nullptr
;
42
}
43
44
LinkManager::Link
*
LinkManager::link
(
long
id
) {
45
return
( 0 <=
id
&& (
unsigned
)
id
<
m_linkVector
.size() ) ?
m_linkVector
[id] :
nullptr
;
46
}
47
49
const
LinkManager::Link
*
LinkManager::link
(
const
DataObject
* pObject )
const
{
50
return
pObject ? findLink(
m_linkVector
, [=](
auto
* j ) {
return
j->object() == pObject; } ) :
nullptr
;
51
}
52
53
LinkManager::Link
*
LinkManager::link
(
const
DataObject
* pObject ) {
54
return
pObject ? findLink(
m_linkVector
, [=](
auto
* j ) {
return
j->object() == pObject; } ) :
nullptr
;
55
}
56
58
const
LinkManager::Link
*
LinkManager::link
( std::string_view path )
const
{
59
return
!path.empty() ? findLink(
m_linkVector
, [=](
auto
* j ) {
return
j->path() == path; } ) :
nullptr
;
60
}
61
LinkManager::Link
*
LinkManager::link
( std::string_view path ) {
62
return
!path.empty() ? findLink(
m_linkVector
, [=](
auto
* j ) {
return
j->path() == path; } ) :
nullptr
;
63
}
64
66
long
LinkManager::addLink
(
const
std::string& path,
const
DataObject
* pObject ) {
67
long
n = 0;
68
for
(
auto
& lnk :
m_linkVector
) {
69
const
DataObject
* pO = lnk->object();
70
if
( pO && pO == pObject )
return
n;
71
if
( lnk->path() == path ) {
72
if
( pObject && pObject != pO ) { lnk->setObject(
const_cast<
DataObject
*
>
( pObject ) ); }
73
return
n;
74
}
75
++n;
76
}
77
// Link is completely unknown
78
return
m_linkVector
.emplace_back(
new
Link
(
m_linkVector
.size(), path,
const_cast<
DataObject
*
>
( pObject ) ) )->ID();
79
}
DataObject.h
IRegistry.h
LinkManager.h
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition
DataObject.h:37
IOpaqueAddress
Opaque address interface definition.
Definition
IOpaqueAddress.h:28
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition
IRegistry.h:29
IRegistry::address
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
LinkManager::Link
Embedded class defining a symbolic link Note: No explicit copy constructor; implicit compiler generat...
Definition
LinkManager.h:38
LinkManager::Link::address
IOpaqueAddress * address()
Access to the object's address.
Definition
LinkManager.cpp:31
LinkManager::Link::m_pObject
DataObject * m_pObject
Pointer to object behind the link.
Definition
LinkManager.h:42
LinkManager::addLink
long addLink(const std::string &path, const DataObject *pObject)
Add link by object reference and path.
Definition
LinkManager.cpp:66
LinkManager::~LinkManager
~LinkManager()
Standard Destructor.
Definition
LinkManager.cpp:26
LinkManager::m_linkVector
std::vector< Link * > m_linkVector
@ TODO: replace by std::vector<std::unique_ptr<Link>> once ROOT does 'automatic' schema conversion fr...
Definition
LinkManager.h:76
LinkManager::link
const Link * link(long id) const
Retrieve symbolic link identified by ID.
Definition
LinkManager.cpp:40
gaudirun.c
c
Definition
gaudirun.py:525
GaudiKernel
src
Lib
LinkManager.cpp
Generated on
for The Gaudi Framework by
1.17.0