| # Gaudi Framework, version v25r0 |

Home |  | Generated: Mon Feb 17 2014

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
GaudiHandle.cpp
Go to the documentation of this file.
1 #include "GaudiKernel/GaudiHandle.h"
2 #include <iostream>
3 #include <string>
4
5 //
6 // GaudiHandleBase implementation
7 //
8
9 void GaudiHandleBase::setTypeAndName( const std::string& myTypeAndName ) {
10 m_typeAndName = myTypeAndName;
11 }
12
13 std::string GaudiHandleBase::type() const {
14 std::string::size_type slash = m_typeAndName.find('/');
15 if ( slash != std::string::npos ) {
16 // return only part before /
17 return m_typeAndName.substr(0,slash);
18 } else {
19 // return full string
20 return m_typeAndName;
21 }
22 }
23
24 std::string GaudiHandleBase::name() const {
25 std::string::size_type slash = m_typeAndName.find('/');
26 if ( slash == std::string::npos ) {
27 // only type is given, or string is empty.
28 // return default name (=type or empty, in this case full string)
29 return m_typeAndName;
30 } else if ( slash != m_typeAndName.length() -1 ) {
31 // an explicit name is given, so return it
32 return m_typeAndName.substr(slash+1);
33 } else {
34 // ends with /, i.e. explicit empty name.
35 // Should probably never happen.
36 return "";
37 }
38 }
39
40 void GaudiHandleBase::setName( const std::string& myName ) {
41 m_typeAndName = type() + '/' + myName;
42 }
43
44 const std::string GaudiHandleBase::pythonPropertyClassName() const {
45 return componentType() + "Handle";
46 }
47
48 const std::string GaudiHandleBase::messageName() const {
49 std::string propName = propertyName();
50 if ( propName.empty() ) {
51 propName = pythonPropertyClassName() + "('" + m_typeAndName + "')";
52 }
53 return parentName() + "." + propName;
54 }
55
56 const std::string GaudiHandleBase::pythonRepr() const {
57 return pythonPropertyClassName() + "('" + m_typeAndName + "')";
58 }
59
60 //
61 // GaudiHandleArrayBase implementation
62 //
63 bool GaudiHandleArrayBase::setTypesAndNames( const std::vector< std::string >& myTypesAndNamesList ) {
64 clear();
65 std::vector< std::string >::const_iterator it = myTypesAndNamesList.begin(),
66 itEnd = myTypesAndNamesList.end();
67 for ( ; it != itEnd; ++it ) {
68 if ( !push_back( *it ) ) return false;
69 }
70 return true;
71 }
72
73 const std::vector< std::string >
74 GaudiHandleArrayBase::getBaseInfos( std::string (GaudiHandleBase::*pMemFunc)() const ) const {
75 std::vector< std::string > theList;
76 const GaudiHandleArrayBase::ConstBaseHandleArray& baseArray = getBaseArray();
77 GaudiHandleArrayBase::ConstBaseHandleArray::const_iterator it = baseArray.begin(),
78 itEnd = baseArray.end();
79 for ( ; it != itEnd; ++it ) theList.push_back( ((*it)->*pMemFunc)() );
80 return theList;
81 }
82
83 const std::vector< std::string > GaudiHandleArrayBase::typesAndNames() const {
84 return getBaseInfos( &GaudiHandleBase::typeAndName );
85 }
86
87 const std::vector< std::string > GaudiHandleArrayBase::types() const {
88 return getBaseInfos( &GaudiHandleBase::type );
89 }
90
91 const std::vector< std::string > GaudiHandleArrayBase::names() const {
92 return getBaseInfos( &GaudiHandleBase::name );
93 }
94
95 const std::string GaudiHandleArrayBase::pythonPropertyClassName() const {
96 return componentType() + "HandleArray";
97 }
98
99 const std::string GaudiHandleArrayBase::pythonRepr() const {
100 std::string repr = pythonPropertyClassName() + "([";
101 const std::vector< std::string >& theList = typesAndNames();
102 std::vector< std::string >::const_iterator it = theList.begin(),
103 itEnd = theList.end(), itLast = itEnd - 1;
104 for ( ; it != itEnd; ++it ) {
105 repr += "'" + *it + "'";
106 if ( it != itLast ) repr += ",";
107 }
108 repr += "])";
109 return repr;
110 }
111
112
113 //
114 // Public functions
115 //
116 std::ostream& operator<<( std::ostream& os, const GaudiHandleInfo& handle ) {
117 std::string msg;
118 const std::string& propName = handle.propertyName();
119 if ( !propName.empty() ) msg += propName + " = ";
120 msg += handle.pythonRepr();
121 os << msg;
122 return os;
123 }
124