|
Gaudi Framework, version v21r4 |
| Home | Generated: 7 Sep 2009 |
Definition in file HbookName.h.
#include <string>
#include <algorithm>


Go to the source code of this file.
Defines | |
| #define | GAUDIALG_HBOOKNAME_H 1 |
Functions | |
| std::string | dirHbookName (const std::string &addr, const int maxLen=16) |
| Simple function to convert any valid Gaudi address (name in Transient Store) to address, which is simultaneously valid for Hbook directory. | |
| std::string | histoHbookName (const std::string &addr, const int maxLen=8) |
| Simple function to convert any valid Gaudi address(name in Transient Store) to address, which is simultaneously valid for Hbook histogram. | |
| #define GAUDIALG_HBOOKNAME_H 1 |
Definition at line 4 of file HbookName.h.
| std::string @32::dirHbookName | ( | const std::string & | addr, | |
| const int | maxLen = 16 | |||
| ) | [inline, static] |
Simple function to convert any valid Gaudi address (name in Transient Store) to address, which is simultaneously valid for Hbook directory.
examples: "verylongname" --> "verylong/name"
| old | old address | |
| maxLen | maximum allowed length of directory name (16 for Hbook) |
Definition at line 35 of file HbookName.h.
00037 { 00038 // ignore empty locations 00039 if( addr.empty() ) { return std::string(); } 00040 // 00041 std::string old( addr ); 00042 // remove long names 00043 if( 0 < maxLen && maxLen < (int) old.size() ) 00044 { 00045 std::string::iterator p1,p2; 00046 p1 = old.begin(); 00047 const char sep('/'); 00048 while( old.end() != p1 ) 00049 { 00050 p1 = 00051 std::find_if( p1 , 00052 old.end() , 00053 std::bind2nd(std::not_equal_to<char>(),sep)); 00054 p2 = std::find( p1 , old.end() , sep ) ; 00055 if( ( p2 - p1 ) <= (int) maxLen ) { p1 = p2 ; continue ; } 00056 old.insert( p1 + maxLen , sep ) ; 00057 p1 = old.begin() ; 00058 } 00059 } 00061 return old; 00062 }
| std::string @32::histoHbookName | ( | const std::string & | addr, | |
| const int | maxLen = 8 | |||
| ) | [inline, static] |
Simple function to convert any valid Gaudi address(name in Transient Store) to address, which is simultaneously valid for Hbook histogram.
examples: "verylongname/116" --> "verylong/name/116" "verylongname" --> "verylong/name/1" "somename/here/" --> "somename/here/1" "directory/object" --> "director/y/object/1"
| old | old address | |
| maxLen | maximum allowed length of directory name (8 for Hbook) |
Definition at line 82 of file HbookName.h.
00084 { 00085 // ignore empty locations 00086 if( addr.empty() ) { return std::string(); } 00087 // 00088 std::string old( addr ); 00089 { // make valid histogram ID (integer) 00090 std::string::size_type pos 00091 = old.find_last_of( '/' ); 00092 if ( std::string::npos == pos ) { old += "/1" ; } 00093 else if ( old.size() - 1 == pos ) { old += '1' ; } 00094 else 00095 { 00096 const int id = 00097 atoi( std::string( old , pos + 1 , std::string::npos ).c_str() ); 00098 if( 0 == id ) { old+="/1"; } 00099 } 00100 } 00101 // remove long names 00102 if( 0 < maxLen && maxLen < (int) old.size() ) 00103 { 00104 std::string::iterator p1,p2; 00105 p1 = old.begin(); 00106 const char sep('/'); 00107 while( old.end() != p1 ) 00108 { 00109 p1 = 00110 std::find_if( p1 , 00111 old.end() , 00112 std::bind2nd(std::not_equal_to<char>(),sep)); 00113 p2 = std::find( p1 , old.end() , sep ) ; 00114 if( ( p2 - p1 ) <= (int) maxLen ) { p1 = p2 ; continue ; } 00115 old.insert( p1 + maxLen , sep ) ; 00116 p1 = old.begin() ; 00117 } 00118 } 00119 // 00120 return old; 00121 }