The Gaudi Framework  v32r0 (3325bb39)
FixTESPathDetails Namespace Reference

Functions

std::unique_ptr< IDataHandleVisitorfixDataHandlePath (std::string_view rit, std::string rootName, MsgStream *dbg)
 
std::string fullTESLocation (std::string_view location, std::string_view rit)
 

Function Documentation

std::unique_ptr< IDataHandleVisitor > FixTESPathDetails::fixDataHandlePath ( std::string_view  rit,
std::string  rootName,
MsgStream dbg 
)

Definition at line 61 of file FixTESPath.cpp.

61  {
62  if ( !rootName.empty() && '/' != rootName.back() ) rootName += "/";
63  return std::make_unique<DHHFixer>( [rit, rootName = std::move( rootName ), dbg]( std::string_view location ) {
64  auto tokens = boost::tokenizer<boost::char_separator<char>>{location, boost::char_separator<char>{":"}};
65  auto result =
66  std::accumulate( tokens.begin(), tokens.end(), std::string{}, [&]( std::string s, std::string_view tok ) {
67  std::string r = fullTESLocation( tok, rit );
68  // check whether we have an absolute path if yes use it - else prepend DataManager Root
69  if ( r[0] != '/' ) r = rootName + r;
70  return s.empty() ? r : s + ':' + r;
71  } );
72  if ( result != location && dbg ) ( *dbg ) << "Changing " << location << " to " << result << endmsg;
73  return result;
74  } );
75  }
T empty(T...args)
STL class.
std::string fullTESLocation(std::string_view location, std::string_view rit)
Definition: FixTESPath.cpp:40
T move(T...args)
T back(T...args)
string s
Definition: gaudirun.py:316
T accumulate(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
std::string FixTESPathDetails::fullTESLocation ( std::string_view  location,
std::string_view  rit 
)

Definition at line 40 of file FixTESPath.cpp.

40  {
41  // The logic is:
42  // if no R.I.T., give back location
43  // if R.I.T., this is the mapping:
44  // (note that R.I.T. contains a trailing '/')
45  // location -> result
46  // -------------------------------------------------
47  // "" -> R.I.T.[:-1] ("rit")
48  // "/Event" -> R.I.T.[:-1] ("rit")
49  // "/Event/MyObj" -> R.I.T. + "MyObj" ("rit/MyObj")
50  // "MyObj" -> R.I.T. + "MyObj" ("rit/MyObj")
51  return rit.empty()
53  : location.empty() || ( location == "/Event" )
54  ? std::string{rit.substr( 0, rit.size() - 1 )}
55  : location.compare( 0, 7, "/Event/" ) == 0
56  ? std::string{rit}.append( location.substr( 7 ) )
57  : location.compare( 0, 1, "/" ) == 0 ? std::string{rit}.append( location.substr( 1 ) )
58  : std::string{rit}.append( location );
59  }
STL class.
T append(T...args)
T substr(T...args)