All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ToStream.h
Go to the documentation of this file.
1 // $Id: ToStream.h,v 1.8 2008/10/30 23:38:46 marcocle Exp $
2 // ============================================================================
3 // CVS tag $Name: $, version $Revision: 1.8 $
4 // ============================================================================
5 #ifndef GAUDIPROPERTYPARSERS_PARSERVALUETOSTREAM_H
6 #define GAUDIPROPERTYPARSERS_PARSERVALUETOSTREAM_H 1
7 // ============================================================================
8 // Include files
9 // ============================================================================
10 // STD & STL
11 // ============================================================================
12 #include <iostream>
13 #include <iomanip>
14 #include <vector>
15 #include <map>
16 #include <set>
17 #include <list>
18 #include <string>
19 #include <sstream>
20 // ============================================================================
21 // GaudiKernel
22 // ============================================================================
23 #include "GaudiKernel/Map.h"
24 #include "GaudiKernel/HashMap.h"
25 #include "GaudiKernel/VectorMap.h"
26 // ============================================================================
36 // ============================================================================
37 namespace Gaudi
38 {
39  // ==========================================================================
40  namespace Utils
41  {
42  // ========================================================================
48  template<class TYPE>
49  std::ostream& toStream ( const TYPE& obj, std::ostream& s ) ;
50  // ========================================================================
62  template <class ITERATOR>
63  inline std::ostream& toStream
64  ( ITERATOR first , // begin of the sequence
65  ITERATOR last , // end of the sequence
66  std::ostream& s , // the stream
67  const std::string& open , // opening
68  const std::string& close , // closing
69  const std::string& delim ) ; // delimiter
70  // ========================================================================
77  inline std::ostream& toStream
78  ( const std::string& obj , std::ostream& s )
79  {
80  if ( std::string::npos == obj.find('\'') )
81  { s << "\'" << obj << "\'" ; }
82  else
83  { s << "\"" << obj << "\"" ; }
84  return s ;
85  }
90  inline std::ostream& toStream
91  ( const bool obj , std::ostream& s )
92  { return s << ( obj ? "True" : "False" ) ; }
97  inline std::ostream& toStream
98  ( const float obj , std::ostream& s , const int prec = 6 )
99  {
100  const int p = s.precision() ;
101  return s << std::setprecision ( prec ) << obj << std::setprecision ( p ) ;
102  }
107  inline std::ostream& toStream
108  ( const double obj , std::ostream& s , const int prec = 8 )
109  {
110  const int p = s.precision() ;
111  return s << std::setprecision ( prec ) << obj << std::setprecision ( p ) ;
112  }
117  inline std::ostream& toStream
118  ( const long double obj , std::ostream& s , const int prec = 10 )
119  {
120  const int p = s.precision() ;
121  return s << std::setprecision ( prec ) << obj << std::setprecision ( p ) ;
122  }
123  // ========================================================================
131  template<class KTYPE, class VTYPE>
132  inline std::ostream& toStream
133  ( const std::pair<KTYPE,VTYPE>& obj, std::ostream& s)
134  {
135  s << "( " ;
136  toStream ( obj.first , s ) ;
137  s << " , " ;
138  toStream ( obj.second , s ) ;
139  return s << " )" ;
140  }
141  // ========================================================================
148  template<class TYPE,class ALLOCATOR>
149  inline std::ostream& toStream
150  ( const std::vector<TYPE,ALLOCATOR>& obj, std::ostream& s)
151  {
152  return toStream ( obj.begin() , obj.end () , s , "[ " , " ]" , " , " ) ;
153  }
154  // ========================================================================
161  template<class TYPE,class ALLOCATOR>
162  inline std::ostream& toStream
163  ( const std::list<TYPE,ALLOCATOR>& obj, std::ostream& s)
164  {
165  return toStream ( obj.begin() , obj.end () , s , "[ " , " ]" , " , " ) ;
166  }
167  // ========================================================================
174  template<class TYPE,class CMP,class ALLOCATOR>
175  inline std::ostream& toStream
176  ( const std::set<TYPE,CMP,ALLOCATOR>& obj, std::ostream& s)
177  {
178  return toStream ( obj.begin() , obj.end () , s , "[ " , " ]" , " , " ) ;
179  }
180  // ========================================================================
188  template<class KTYPE, class VTYPE,class CMP,class ALLOCATOR>
189  inline std::ostream& toStream
190  ( const std::map<KTYPE,VTYPE,CMP,ALLOCATOR>& obj, std::ostream& s )
191  {
192  s << "{ ";
193  for ( typename std::map<KTYPE,VTYPE,CMP,ALLOCATOR>::const_iterator cur =
194  obj.begin() ; obj.end() != cur ; ++cur )
195  {
196  if ( obj.begin() != cur ) { s << " , " ; }
197  toStream ( cur -> first , s ) ;
198  s << " : " ;
199  toStream ( cur -> second , s ) ;
200  }
201  return s << " }";
202  }
203  // ========================================================================
212  template<class KTYPE, class VTYPE,class CMP,class ALLOCATOR>
213  inline std::ostream& toStream
214  ( const GaudiUtils::VectorMap<KTYPE,VTYPE,CMP,ALLOCATOR>& obj, std::ostream& s )
215  {
216  s << "{ ";
218  obj.end() != cur ; ++cur )
219  {
220  if ( obj.begin() != cur ) { s << " , " ; }
221  toStream ( cur -> first , s ) ;
222  s << " : " ;
223  toStream ( cur -> second , s ) ;
224  }
225  return s << " }";
226  }
227  // ========================================================================
236  template<class KTYPE, class VTYPE,class MAP>
237  inline std::ostream& toStream
238  ( const GaudiUtils::Map<KTYPE,VTYPE,MAP>& obj, std::ostream& s)
239  {
240  s << "{ ";
241  for ( typename GaudiUtils::Map<KTYPE,VTYPE,MAP>::const_iterator cur = obj.begin() ;
242  obj.end() != cur ; ++cur )
243  {
244  if ( obj.begin() != cur ) { s << " , " ; }
245  toStream ( cur -> first , s ) ;
246  s << " : " ;
247  toStream ( cur -> second , s ) ;
248  }
249  return s << " }";
250  }
251  // ========================================================================
260  template<class KTYPE, class VTYPE,class HASH,class MAP>
261  inline std::ostream& toStream
262  ( const GaudiUtils::HashMap<KTYPE,VTYPE,HASH,MAP>& obj, std::ostream& s)
263  {
264  s << "{ ";
266  obj.end() != cur ; ++cur )
267  {
268  if ( obj.begin() != cur ) { s << " , " ; }
269  toStream ( cur -> first , s ) ;
270  s << " : " ;
271  toStream ( cur -> second , s ) ;
272  }
273  return s << " }";
274  }
275  // ========================================================================
280  template <class TYPE, unsigned int N>
281  std::ostream& toStream ( TYPE(&obj)[N] , std::ostream& s )
282  {
283  return toStream ( obj , obj + N , s , "( " , " )" , " , " ) ;
284  }
285  // ========================================================================
290  template <class TYPE, unsigned int N>
291  std::ostream& toStream ( const TYPE(&obj)[N] , std::ostream& s )
292  {
293  return toStream ( obj , obj + N , s , "( " , " )" , " , " ) ;
294  }
295  // ========================================================================
300  template <unsigned int N>
301  std::ostream& toStream ( char (&obj)[N] , std::ostream& s )
302  { return toStream ( std::string ( obj , obj+N ) , s ) ; }
303  // ========================================================================
308  template <unsigned int N>
309  std::ostream& toStream ( const char (&obj)[N] , std::ostream& s )
310  { return toStream ( std::string ( obj , obj+N ) , s ) ; }
311  // ========================================================================
316  inline std::ostream& toStream ( const char* obj , std::ostream& s )
317  { return toStream ( std::string ( obj ) , s ) ; }
318  // ========================================================================
324  template<class TYPE>
325  inline std::ostream& toStream ( const TYPE& obj, std::ostream& s )
326  { return s << obj ; }
327  // ========================================================================
339  template <class ITERATOR>
340  inline std::ostream& toStream
341  ( ITERATOR first , // begin of the sequence
342  ITERATOR last , // end of the sequence
343  std::ostream& s , // the stream
344  const std::string& open , // opening
345  const std::string& close , // closing
346  const std::string& delim ) // delimiter
347  {
348  s << open ;
349  for ( ITERATOR curr = first ; curr != last ; ++curr )
350  {
351  if ( first != curr ) { s << delim ; }
352  toStream ( *curr , s ) ;
353  }
354  s << close ;
355  //
356  return s ;
357  }
358  // ========================================================================
366  template <class TYPE>
367  inline std::string toString ( const TYPE& obj )
368  {
369  std::ostringstream s;
370  std::ios::fmtflags orig_flags = s.flags();
371  s.setf(std::ios::showpoint); // to display correctly floats
372  toStream ( obj , s);
373  s.flags(orig_flags);
374  return s.str();
375  }
376  // ========================================================================
377  } // end of namespace Gaudi::Utils
378  // ==========================================================================
379 } // end of namespace Gaudi
380 // ============================================================================
381 // The END
382 // ============================================================================
383 #endif
384 // ============================================================================
385 
A bit modified version of 'Loki::AssocVector' associative vector from Loki library by Andrei Alexandr...
Definition: VectorMap.h:110
Extension of the STL map.
Definition: Map.h:82
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:367
iterator end() const
"end" iterator for sequential access (const-only version!)
Definition: VectorMap.h:200
int N
Definition: IOTest.py:90
std::ostream & toStream(ITERATOR first, ITERATOR last, std::ostream &s, const std::string &open, const std::string &close, const std::string &delim)
the helper function to print the sequence
Definition: ToStream.h:341
iterator end()
Definition: Map.h:131
iterator begin() const
"begin" iterator for sequential access (const-only version!)
Definition: VectorMap.h:198
map_type::const_iterator const_iterator
Definition: Map.h:99
iterator begin()
Definition: Map.h:130
_vector::const_iterator const_iterator
visible const_iterator (exported)
Definition: VectorMap.h:151
Common class providing an architecture-independent hash map.
Definition: HashMap.h:108
string s
Definition: gaudirun.py:210
This is a number of static methods for bootstrapping the Gaudi framework.
Definition: Bootstrap.h:14