Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v31r0 (aeb156f0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Dictionary.cpp
Go to the documentation of this file.
1 #include "GaudiKernel/System.h"
2 namespace GaudiDict {
3  std::string typeName( const std::type_info& typ );
5  std::string vectorName( const std::string& typ );
6  std::string pairName( const std::type_info& typ1, const std::type_info& typ2 );
7  std::string relationName( const std::string& prefix, const std::type_info& typ1, const std::type_info& typ2 );
10  std::string templateName2( std::string templ, const std::type_info& typ1, const std::type_info& typ2 );
11  std::string templateName3( std::string templ, const std::type_info& typ1, const std::type_info& typ2,
12  const std::type_info& typ3 );
14 } // namespace GaudiDict
15 
16 static std::string clean( std::string c ) {
17  for ( size_t occ = c.find( " *" ); occ != std::string::npos; occ = c.find( " *" ) ) c.replace( occ, 2, "*" );
18  return c;
19 }
20 
22  std::string r = clean( System::typeinfoName( typ ) );
23  // if ( r.compare(0,4,"enum") == 0 ) {
24  // r = "int";
25  //}
26  return r;
27 }
28 
30  return templateName1( std::move( templ ), typeName( typ ) );
31 }
32 
34  s += "<";
35  s += typ;
36  s += ( s.back() == '>' ) ? " >" : ">"; // with C++11, we can have <somename<T>>...
37  return clean( s );
38 }
39 
41  s += "<";
42  s += typeName( typ1 );
43  s += ",";
44  s += typeName( typ2 );
45  s += ( s.back() == '>' ) ? " >" : ">";
46  return clean( s );
47 }
48 
50  const std::type_info& typ3 ) {
51  s += "<";
52  s += typeName( typ1 );
53  s += ",";
54  s += typeName( typ2 );
55  s += ",";
56  s += typeName( typ3 );
57  s += ( s.back() == '>' ) ? " >" : ">";
58  return clean( s );
59 }
60 
61 std::string GaudiDict::vectorName( const std::type_info& typ ) { return templateName1( "std::vector", typ ); }
62 
63 std::string GaudiDict::vectorName( const std::string& typ ) { return templateName1( "std::vector", typ ); }
64 
66  return templateName2( "std::pair", typ1, typ2 );
67 }
68 
70  std::string s = "KeyedContainer<";
71  s += typeName( typ1 );
72  s += ",";
73  s += mgr_typ;
74  if ( mgr_typ[mgr_typ.length() - 1] == '>' ) s += " ";
75  s += ">";
76  return clean( s );
77 }
78 
79 std::string GaudiDict::relationName( const std::string& /* prefix */, const std::type_info& /* typ1 */,
80  const std::type_info& /* typ2 */ ) {
81  return "";
82 }
std::string templateName3(std::string templ, const std::type_info &typ1, const std::type_info &typ2, const std::type_info &typ3)
Definition: Dictionary.cpp:49
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:309
std::string templateName2(std::string templ, const std::type_info &typ1, const std::type_info &typ2)
Definition: Dictionary.cpp:40
std::string keyedContainerName(const std::string &prefix, const std::type_info &typ1)
Definition: Dictionary.cpp:69
STL class.
T replace(T...args)
std::string pairName(const std::type_info &typ1, const std::type_info &typ2)
Definition: Dictionary.cpp:65
string prefix
Definition: gaudirun.py:327
T move(T...args)
T find(T...args)
T length(T...args)
std::string relationName(const std::string &prefix, const std::type_info &typ1, const std::type_info &typ2)
Definition: Dictionary.cpp:79
std::string templateName1(std::string templ, const std::type_info &typ)
Definition: Dictionary.cpp:29
T back(T...args)
string s
Definition: gaudirun.py:312
std::string typeName(const std::type_info &typ)
Definition: Dictionary.cpp:21
std::string vectorName(const std::type_info &typ)
Definition: Dictionary.cpp:61