| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

ToStream.h

Go to the documentation of this file.
00001 // $Id: ToStream.h,v 1.8 2008/10/30 23:38:46 marcocle Exp $
00002 // ============================================================================
00003 // CVS tag $Name: GAUDI_v20r4-pre $, version $Revision: 1.8 $
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     // ========================================================================
00103     template<class KTYPE, class VTYPE> 
00104     inline std::ostream& toStream 
00105     ( const std::pair<KTYPE,VTYPE>& obj, std::ostream& s)
00106     {
00107       s << "( "  ; 
00108       toStream ( obj.first  , s ) ;
00109       s << " , " ;
00110       toStream ( obj.second , s ) ;
00111       return s << " )" ;
00112     }
00113     // ========================================================================
00120     template<class TYPE,class ALLOCATOR> 
00121     inline std::ostream& toStream 
00122     ( const std::vector<TYPE,ALLOCATOR>& obj, std::ostream& s)
00123     {
00124       s << "[ ";
00125       for ( typename std::vector<TYPE,ALLOCATOR>::const_iterator cur = obj.begin() ;
00126             obj.end() != cur ; ++cur )
00127       {
00128         if ( obj.begin() != cur ) { s << " , "; }
00129         toStream ( *cur , s ) ;
00130       }
00131       return s << " ]";
00132     }
00133     // ========================================================================
00140     template<class TYPE,class ALLOCATOR> 
00141     inline std::ostream& toStream 
00142     ( const std::list<TYPE,ALLOCATOR>& obj, std::ostream& s)
00143     {
00144       s << "[ ";
00145       for ( typename std::list<TYPE,ALLOCATOR>::const_iterator cur = obj.begin() ;
00146             obj.end() != cur ; ++cur )
00147       {
00148         if ( obj.begin() != cur ) { s << " , "; }
00149         toStream ( *cur , s ) ;
00150       }
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 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:56:58 2011 for GaudiKernel by doxygen 1.4.7