![]() |
|
|
Generated: 18 Jul 2008 |
00001 // $Id: ToStream.h,v 1.7 2007/07/16 13:40:14 hmd Exp $ 00002 // ============================================================================ 00003 // CVS tag $Name: v25r2 $, version $Revision: 1.7 $ 00004 // ============================================================================ 00005 #ifndef GAUDIPROPERTYPARSERS_PARSERVALUETOSTREAM_H 00006 #define GAUDIPROPERTYPARSERS_PARSERVALUETOSTREAM_H 1 00007 // ============================================================================ 00008 // Include files 00009 // ============================================================================ 00010 // STD & STL 00011 // ============================================================================ 00012 #include <iostream> 00013 #include <iomanip> 00014 #include <vector> 00015 #include <map> 00016 #include <set> 00017 #include <list> 00018 #include <string> 00019 #include <sstream> 00020 00021 // ============================================================================ 00022 // GaudiKernel 00023 // ============================================================================ 00024 #include "GaudiKernel/Map.h" 00025 #include "GaudiKernel/HashMap.h" 00026 #include "GaudiKernel/VectorMap.h" 00027 // ============================================================================ 00028 00029 namespace Gaudi 00030 { 00031 namespace Utils 00032 { 00033 // ======================================================================== 00039 template<class TYPE> 00040 std::ostream& toStream ( const TYPE& obj, std::ostream& s ) ; 00041 00042 // ======================================================================== 00049 inline std::ostream& toStream 00050 ( const std::string& obj , std::ostream& s ) 00051 { 00052 if ( std::string::npos == obj.find('\'') ) 00053 { s << "\'" << obj << "\'" ; } 00054 else 00055 { s << "\"" << obj << "\"" ; } 00056 return s ; 00057 } 00062 inline std::ostream& toStream 00063 ( const bool obj , std::ostream& s ) 00064 { return s << ( obj ? "True" : "False" ) ; } 00069 inline std::ostream& toStream 00070 ( const float obj , std::ostream& s ) 00071 { 00072 const int p = s.precision() ; 00073 return s << std::setprecision ( 6 ) << obj << std::setprecision ( p ) ; 00074 } 00079 inline std::ostream& toStream 00080 ( const double obj , std::ostream& s ) 00081 { 00082 const int p = s.precision() ; 00083 return s << std::setprecision ( 8 ) << obj << std::setprecision ( p ) ; 00084 } 00089 inline std::ostream& toStream 00090 ( const long double obj , std::ostream& s ) 00091 { 00092 const int p = s.precision() ; 00093 return s << std::setprecision ( 10 ) << obj << std::setprecision ( p ) ; 00094 } 00095 // ======================================================================== 00102 template<class TYPE,class ALLOCATOR> 00103 inline std::ostream& toStream 00104 ( const std::vector<TYPE,ALLOCATOR>& obj, std::ostream& s) 00105 { 00106 s << "[ "; 00107 for ( typename std::vector<TYPE,ALLOCATOR>::const_iterator cur = obj.begin() ; 00108 obj.end() != cur ; ++cur ) 00109 { 00110 if ( obj.begin() != cur ) { s << " , "; } 00111 toStream ( *cur , s ) ; 00112 } 00113 return s << " ]"; 00114 } 00115 // ======================================================================== 00122 template<class TYPE,class ALLOCATOR> 00123 inline std::ostream& toStream 00124 ( const std::list<TYPE,ALLOCATOR>& obj, std::ostream& s) 00125 { 00126 s << "[ "; 00127 for ( typename std::list<TYPE,ALLOCATOR>::const_iterator cur = obj.begin() ; 00128 obj.end() != cur ; ++cur ) 00129 { 00130 if ( obj.begin() != cur ) { s << " , "; } 00131 toStream ( *cur , s ) ; 00132 } 00133 return s << " ]"; 00134 } 00135 // ======================================================================== 00143 template<class KTYPE, class VTYPE> 00144 inline std::ostream& toStream 00145 ( const std::pair<KTYPE,VTYPE>& obj, std::ostream& s) 00146 { 00147 s << "( " ; 00148 toStream ( obj.first , s ) ; 00149 s << " , " ; 00150 toStream ( obj.second , s ) ; 00151 return s << " )" ; 00152 } 00153 // ======================================================================== 00160 template<class TYPE,class CMP,class ALLOCATOR> 00161 inline std::ostream& toStream 00162 ( const std::set<TYPE,CMP,ALLOCATOR>& obj, std::ostream& s) 00163 { 00164 s << "[ "; 00165 for ( typename std::set<TYPE,CMP,ALLOCATOR>::const_iterator cur = obj.begin() ; 00166 obj.end() != cur ; ++cur ) 00167 { 00168 if ( obj.begin() != cur ) { s << " , "; } 00169 toStream ( *cur , s ) ; 00170 } 00171 return s << " ]"; 00172 } 00173 // ======================================================================== 00181 template<class KTYPE, class VTYPE,class CMP,class ALLOCATOR> 00182 inline std::ostream& toStream 00183 ( const std::map<KTYPE,VTYPE,CMP,ALLOCATOR>& obj, std::ostream& s ) 00184 { 00185 s << "{ "; 00186 for ( typename std::map<KTYPE,VTYPE,CMP,ALLOCATOR>::const_iterator cur = 00187 obj.begin() ; obj.end() != cur ; ++cur ) 00188 { 00189 if ( obj.begin() != cur ) { s << " , " ; } 00190 toStream ( cur -> first , s ) ; 00191 s << " : " ; 00192 toStream ( cur -> second , s ) ; 00193 } 00194 return s << " }"; 00195 } 00196 // ======================================================================== 00205 template<class KTYPE, class VTYPE,class CMP,class ALLOCATOR> 00206 inline std::ostream& toStream 00207 ( const GaudiUtils::VectorMap<KTYPE,VTYPE,CMP,ALLOCATOR>& obj, std::ostream& s ) 00208 { 00209 s << "{ "; 00210 for ( typename GaudiUtils::VectorMap<KTYPE,VTYPE,CMP,ALLOCATOR>::const_iterator cur = obj.begin() ; 00211 obj.end() != cur ; ++cur ) 00212 { 00213 if ( obj.begin() != cur ) { s << " , " ; } 00214 toStream ( cur -> first , s ) ; 00215 s << " : " ; 00216 toStream ( cur -> second , s ) ; 00217 } 00218 return s << " }"; 00219 } 00220 // ======================================================================== 00229 template<class KTYPE, class VTYPE,class MAP> 00230 inline std::ostream& toStream 00231 ( const GaudiUtils::Map<KTYPE,VTYPE,MAP>& obj, std::ostream& s) 00232 { 00233 s << "{ "; 00234 for ( typename GaudiUtils::Map<KTYPE,VTYPE,MAP>::const_iterator cur = obj.begin() ; 00235 obj.end() != cur ; ++cur ) 00236 { 00237 if ( obj.begin() != cur ) { s << " , " ; } 00238 toStream ( cur -> first , s ) ; 00239 s << " : " ; 00240 toStream ( cur -> second , s ) ; 00241 } 00242 return s << " }"; 00243 } 00244 // ======================================================================== 00253 template<class KTYPE, class VTYPE,class HASH,class MAP> 00254 inline std::ostream& toStream 00255 ( const GaudiUtils::HashMap<KTYPE,VTYPE,HASH,MAP>& obj, std::ostream& s) 00256 { 00257 s << "{ "; 00258 for ( typename GaudiUtils::HashMap<KTYPE,VTYPE,HASH,MAP>::const_iterator cur = obj.begin() ; 00259 obj.end() != cur ; ++cur ) 00260 { 00261 if ( obj.begin() != cur ) { s << " , " ; } 00262 toStream ( cur -> first , s ) ; 00263 s << " : " ; 00264 toStream ( cur -> second , s ) ; 00265 } 00266 return s << " }"; 00267 } 00268 00269 // ======================================================================== 00275 template<class TYPE> 00276 inline std::ostream& toStream ( const TYPE& obj, std::ostream& s ) 00277 { return s << obj ; } 00278 00279 // ======================================================================== 00287 template <class TYPE> 00288 inline std::string toString ( const TYPE& obj ) 00289 { 00290 std::ostringstream s; 00291 toStream ( obj , s); 00292 return s.str(); 00293 } 00294 00295 } // end of namespace Utils 00296 } // end of namespace Gaudi 00297 00298 // ============================================================================ 00299 // The END 00300 // ============================================================================ 00301 #endif 00302 // ============================================================================ 00303