12 #ifndef GAUDIKERNEL_SERIALIZESTL_H_ 13 #define GAUDIKERNEL_SERIALIZESTL_H_ 32 return os << std::forward<T>( t );
36 template <
typename Stream,
typename Iterator,
typename Separator,
typename OutputElement = IdentityOutputter>
38 OutputElement
output = OutputElement{} ) {
39 if ( first != last ) {
43 for ( ; first != last; ++first ) {
output( os << sep, *first ); }
47 template <
typename Stream,
typename Container,
typename Separator,
typename OutputElement = IdentityOutputter>
48 Stream&
ostream_joiner( Stream& os,
const Container&
c, Separator sep, OutputElement
output = OutputElement{} ) {
54 template <
class T,
class ALLOC>
55 inline std::ostream& operator<<( std::ostream& s, const std::vector<T, ALLOC>& v ) {
60 template <
class T, std::
size_t N>
61 inline std::ostream& operator<<( std::ostream& s, const std::array<T, N>& v ) {
66 template <
class T,
class ALLOC>
67 inline std::ostream& operator<<( std::ostream& s, const std::list<T, ALLOC>&
l ) {
72 template <
class T1,
class T2>
73 inline std::ostream& operator<<( std::ostream& s, const std::pair<T1, T2>& p ) {
74 return s <<
'(' << p.first <<
", " << p.second <<
')';
78 template <
class T1,
class T2,
class COMP,
class ALLOC>
79 inline std::ostream& operator<<( std::ostream& s, const std::map<T1, T2, COMP, ALLOC>&
m ) {
82 return os << p.first <<
": " << p.second;
88 template <
class K,
class T,
class M>
89 inline std::ostream& operator<<( std::ostream& s, const GaudiUtils::Map<K, T, M>&
m ) {
91 return s << static_cast<const M&>(
m );
97 template <
class K,
class T,
class H,
class M>
98 inline std::ostream& operator<<( std::ostream& s, const GaudiUtils::HashMap<K, T, H, M>&
m ) {
100 return s << GaudiUtils::Map<K, T>(
m.begin(),
m.end() );
Stream & ostream_joiner(Stream &os, Iterator first, Iterator last, Separator sep, OutputElement output=OutputElement{})
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Forward declarations for the functions in SerializeSTL.h.
std::ostream & operator()(std::ostream &os, T &&t) const