Skip to content
Snippets Groups Projects
Commit a5e088e9 authored by Martin Nolte's avatar Martin Nolte
Browse files

input for tuples

[[Imported from SVN: r6297]]
parent f7423c7c
No related branches found
No related tags found
No related merge requests found
......@@ -4,7 +4,8 @@
#ifndef DUNE_TUPLES_HH
#define DUNE_TUPLES_HH
#include <ostream>
#include <iostream>
#include "typetraits.hh"
#include "static_assert.hh"
......@@ -614,7 +615,21 @@ namespace Dune {
template<class T>
static std::ostream& put(std::ostream& os, const T& t, const char* delim=", ")
{
return tuple_writer<i-1>::put(os,t,delim)<<delim<<get<i-1>(t);
return tuple_writer<i-1>::put(os,t,delim)<<delim<<Dune::get<i-1>(t);
}
template< class T >
static std::istream &get ( std::istream &is, T &t, const char *delim = "," )
{
tuple_writer< i-1 >::get( is, t, delim );
for( const char *it = delim; is && (*it != 0); ++it )
{
char c = 0;
is >> c;
if( c != *it )
is.setstate( std::ios::failbit );
}
return is >> Dune::get< i-1 >( t );
}
};
......@@ -624,7 +639,13 @@ namespace Dune {
template<class T>
static std::ostream& put(std::ostream& os, const T& t, const char* delim=", ")
{
return os<<get<0>(t);
return os<<Dune::get<0>(t);
}
template< class T >
static std::istream &get ( std::istream &is, T &t, const char *delim = ", " )
{
return is >> Dune::get< 0 >( t );
}
};
......@@ -636,6 +657,12 @@ namespace Dune {
{
return os;
}
template< class T >
static std::istream &get ( std::istream &is, T &t, const char *delim = ", " )
{
return is;
}
};
#if defined HAVE_TUPLE || defined HAVE_TR1_TUPLE
......@@ -715,6 +742,81 @@ namespace Dune {
return tuple_writer<tuple_size<TupleT>::value>::put(os, t);
}
/**
* \brief Read a tuple.
*/
template<typename T1>
inline std::istream& operator>>( std::istream& is, tuple<T1> & t)
{
typedef tuple<T1> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2> & t)
{
typedef tuple<T1,T2> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3> & t)
{
typedef tuple<T1,T2,T3> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4> & t)
{
typedef tuple<T1,T2,T3,T4> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4, typename T5>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5> & t)
{
typedef tuple<T1,T2,T3,T4,T5> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6> & t)
{
typedef tuple<T1,T2,T3,T4,T5,T6> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7> & t)
{
typedef tuple<T1,T2,T3,T4,T5,T6,T7> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7,
typename T8>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8> & t)
{
typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7,
typename T8, typename T9>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> & t)
{
typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7,
typename T8, typename T9, typename T10>
inline std::istream& operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> & t)
{
typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> TupleT;
return tuple_writer<tuple_size<TupleT>::value>::get(is, t);
}
#else
/**
* @brief Equality comparison operator for tuples.
......@@ -848,7 +950,7 @@ namespace Dune {
}
/**
* @brief Print aa pair or tuple.
* @brief Print a pair or tuple.
*/
template<typename T1, typename T2>
inline std::ostream& operator<<(std::ostream& os, const Pair<T1,T2>& pair)
......@@ -864,6 +966,21 @@ namespace Dune {
return os;
}
/**
* @brief Read a pair or tuple.
*/
template<typename T1, typename T2>
inline std::istream& operator>>(std::istream& is, Pair<T1,T2>& pair)
{
return is >> pair.first() >> pair.second();
}
template<typename T1>
inline std::istream& operator>>(std::istream& is, Pair<T1,Nil>& pair)
{
return is >> pair.first();
}
template<class T1>
inline tuple<T1&> tie(T1& t1) {
return tuple<T1&> (t1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment