15 #elif defined HAVE_TR1_TUPLE
64 #elif defined HAVE_TR1_TUPLE
65 using std::tr1::tuple;
75 inline const Nil nullType()
86 template<
typename T1,
typename TT>
118 template<
typename T2,
typename T3,
typename T4,
typename T5,
119 typename T6,
typename T7,
typename T8,
typename T9>
121 T6& t6, T7& t7, T8& t8, T9& t9);
137 template<
typename U1,
typename U2>
144 template<
typename U1,
typename U2>
187 template<
typename T1>
221 template<
typename T2>
227 template<
typename T2>
257 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
258 typename T6,
typename T7,
typename T8,
typename T9>
267 template<
typename T1>
290 template<
typename T1 =
Nil,
typename T2 =
Nil,
typename T3 =
Nil,
291 typename T4 =
Nil,
typename T5 =
Nil,
typename T6 =
Nil,
292 typename T7 =
Nil,
typename T8 =
Nil,
typename T9 =
Nil>
303 :
FirstPair(t1, nullType(), nullType(), nullType(),
304 nullType(), nullType(), nullType(), nullType(),
310 :
FirstPair(t1, t2, nullType(), nullType(),
311 nullType(), nullType(), nullType(), nullType(),
319 nullType(), nullType(), nullType(), nullType(),
328 nullType(), nullType(), nullType(), nullType(),
338 t5, nullType(), nullType(), nullType(),
349 t5, t6, nullType(), nullType(),
361 t5, t6, t7, nullType(),
387 :
FirstPair(t1, t2, t3, t4, t5, t6, t7, t8, t9)
390 template<
class U1,
class U2>
401 using std::tuple_element;
402 #elif defined HAVE_TR1_TUPLE
403 using std::tr1::tuple_element;
408 template<
int N,
class Tuple>
418 template<
int N,
typename T1,
typename T2>
431 template<
typename T1,
typename T2>
443 #if defined HAVE_TUPLE || defined HAVE_TR1_TUPLE
446 #elif defined HAVE_TR1_TUPLE
464 template<
typename T1,
typename T2>
478 template<
typename T1,
typename T2>
499 template<
typename T1,
typename T2>
510 template<
typename T1,
typename T2>
517 template<
int i,
typename T1,
typename T2,
typename T3,
typename T4,
518 typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
519 typename TupleAccessTraits<typename tuple_element<i, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> >::type>
526 template<
int i,
typename T1,
typename T2,
typename T3,
typename T4,
527 typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
528 typename TupleAccessTraits<typename tuple_element<i, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> >::type>
538 using std::tuple_size;
539 #elif defined HAVE_TR1_TUPLE
540 using std::tr1::tuple_size;
557 template<
typename T1,
typename T2>
564 template<
typename T1>
581 #elif defined HAVE_TR1_TUPLE
591 static std::ostream&
put(std::ostream& os,
const T&
t,
const char* delim=
", ")
597 static std::istream &
get ( std::istream &is, T &
t,
const char *delim =
"," )
600 for(
const char *it = delim; is && (*it != 0); ++it )
605 is.setstate( std::ios::failbit );
615 static std::ostream&
put(std::ostream& os,
const T&
t,
const char* delim=
", ")
618 return os<<Dune::get<0>(
t);
622 static std::istream &
get ( std::istream &is, T &
t,
const char *delim =
", " )
624 return is >> Dune::get< 0 >(
t );
632 static std::ostream&
put(std::ostream& os,
const T&
t,
const char* delim=
", ")
638 static std::istream &
get ( std::istream &is, T &
t,
const char *delim =
", " )
644 #if defined HAVE_TUPLE || defined HAVE_TR1_TUPLE
648 template<
typename T1>
649 inline std::ostream& operator<<( std::ostream& os, const tuple<T1> &
t)
651 typedef tuple<T1> TupleT;
652 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
655 template<
typename T1,
typename T2>
656 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2> &
t)
658 typedef tuple<T1,T2> TupleT;
659 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
662 template<
typename T1,
typename T2,
typename T3>
663 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3> &
t)
665 typedef tuple<T1,T2,T3> TupleT;
666 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
669 template<
typename T1,
typename T2,
typename T3,
typename T4>
670 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4> &
t)
672 typedef tuple<T1,T2,T3,T4> TupleT;
673 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
676 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
677 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5> &
t)
679 typedef tuple<T1,T2,T3,T4,T5> TupleT;
680 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
683 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
684 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6> &
t)
686 typedef tuple<T1,T2,T3,T4,T5,T6> TupleT;
687 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
690 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
691 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7> &
t)
693 typedef tuple<T1,T2,T3,T4,T5,T6,T7> TupleT;
694 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
697 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
699 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7,T8> &
t)
701 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8> TupleT;
702 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
705 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
706 typename T8,
typename T9>
707 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> &
t)
709 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> TupleT;
710 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
713 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
714 typename T8,
typename T9,
typename T10>
715 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> &
t)
717 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> TupleT;
718 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
724 template<
typename T1>
725 inline std::istream&
operator>>( std::istream& is, tuple<T1> &
t)
727 typedef tuple<T1> TupleT;
728 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
731 template<
typename T1,
typename T2>
732 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2> &
t)
734 typedef tuple<T1,T2> TupleT;
735 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
738 template<
typename T1,
typename T2,
typename T3>
739 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3> &
t)
741 typedef tuple<T1,T2,T3> TupleT;
742 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
745 template<
typename T1,
typename T2,
typename T3,
typename T4>
746 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4> &
t)
748 typedef tuple<T1,T2,T3,T4> TupleT;
749 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
752 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
753 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5> &
t)
755 typedef tuple<T1,T2,T3,T4,T5> TupleT;
756 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
759 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
760 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6> &
t)
762 typedef tuple<T1,T2,T3,T4,T5,T6> TupleT;
763 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
766 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
767 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7> &
t)
769 typedef tuple<T1,T2,T3,T4,T5,T6,T7> TupleT;
770 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
773 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
775 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8> &
t)
777 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8> TupleT;
778 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
781 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
782 typename T8,
typename T9>
783 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> &
t)
785 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> TupleT;
786 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
789 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
790 typename T8,
typename T9,
typename T10>
791 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> &
t)
793 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> TupleT;
794 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
802 template<
typename T1,
typename T2,
typename U1,
typename U2>
813 template<
typename T1,
typename T2,
typename U1,
typename U2>
824 template<
typename T1,
typename T2,
typename U1,
typename U2>
825 inline bool operator<(const Pair<T1,T2>& tuple1,
const Pair<U1,U2>& tuple2)
827 return tuple1.
first() < tuple2.first()
828 || (tuple1.first() == tuple2.first() && tuple1.second() < tuple2.second());
836 template<
typename T1,
typename U1>
847 template<
typename T1,
typename U1>
851 "T1 and U1 have to be interoperable, i.e., either "
852 "conversion from one to the other must exist." );
861 template<
typename T1,
typename U1>
862 inline bool operator<(const Pair<T1,Nil>& tuple1,
const Pair<U1,Nil>& tuple2)
864 return (tuple1.first()<tuple2.first());
874 template<
typename T1,
typename U1,
typename U2>
886 template<
typename T1,
typename U1,
typename U2>
899 template<
typename T1,
typename T2,
typename U1>
911 template<
typename T1,
typename T2,
typename U1>
922 template<
typename T1,
typename T2>
931 template<
typename T1,
typename T2>
932 inline std::ostream& operator<<(std::ostream& os, const Pair<T1,T2>& pair)
934 os<<pair.
first()<<
" "<<pair.second();
938 template<
typename T1>
939 inline std::ostream& operator<<(std::ostream& os, const Pair<T1,Nil>& pair)
948 template<
typename T1,
typename T2>
954 template<
typename T1>
957 return is >> pair.
first();
965 template<
class T1,
class T2>
970 template<
class T1,
class T2,
class T3>
975 template<
class T1,
class T2,
class T3,
class T4>
980 template<
class T1,
class T2,
class T3,
class T4,
class T5>
981 inline tuple<T1&, T2&, T3&, T4&, T5&>
982 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) {
986 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
987 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&>
988 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6) {
989 return tuple<T1&, T2&, T3&, T4&, T5&, T6&> (t1, t2, t3, t4, t5, t6);
992 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
993 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&>
994 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7) {
995 return tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&> (t1, t2, t3, t4, t5, t6, t7);
998 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1000 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&>
1001 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8) {
1003 (t1, t2, t3, t4, t5, t6, t7, t8);
1006 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1008 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&, T9&>
1009 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, T9& t9) {
1011 (t1, t2, t3, t4, t5, t6, t7, t8, t9);
1019 template<
class T1,
class T2>
1024 template<
class T1,
class T2,
class T3>
1029 template<
class T1,
class T2,
class T3,
class T4>
1034 template<
class T1,
class T2,
class T3,
class T4,
class T5>
1035 inline tuple<T1, T2, T3, T4, T5>
1036 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5) {
1040 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
1041 inline tuple<T1, T2, T3, T4, T5, T6>
1042 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6) {
1043 return tuple<T1, T2, T3, T4, T5, T6> (t1, t2, t3, t4, t5, t6);
1046 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
1047 inline tuple<T1, T2, T3, T4, T5, T6, T7>
1048 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
1050 return tuple<T1, T2, T3, T4, T5, T6, T7> (t1, t2, t3, t4, t5, t6, t7);
1053 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1055 inline tuple<T1, T2, T3, T4, T5, T6, T7, T8>
1056 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
1057 const T7& t7,
const T8& t8) {
1059 (t1, t2, t3, t4, t5, t6, t7, t8);
1062 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1064 inline tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>
1065 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
1066 const T7& t7,
const T8& t8,
const T9& t9) {
1068 (t1, t2, t3, t4, t5, t6, t7, t8, t9);
1071 template<
typename T1,
typename TT>
1072 template<
typename T2,
typename T3,
typename T4,
typename T5,
1073 typename T6,
typename T7,
typename T8,
typename T9>
1075 T2& t2, T3& t3, T4& t4, T5& t5,
1076 T6& t6, T7& t7, T8& t8, T9& t9)
1077 : first_(first), second_(t2,t3,t4,t5,t6,t7,t8,t9, nullType())
1080 template <
typename T1,
typename TT>
1082 : first_(first), second_(second)
1085 template<
typename T1,
typename T2>
1087 : first_(), second_()
1090 template<
typename T1,
typename T2>
1091 template<
typename U1,
typename U2>
1093 : first_(other.first_), second_(other.second_)
1096 template<
typename T1,
typename T2>
1097 template<
typename U1,
typename U2>
1105 template<
typename T1,
typename T2>
1113 template<
typename T1,
typename T2>
1120 template<
typename T1,
typename T2>
1128 template<
typename T1,
typename T2>
1135 template<
typename T1,
typename T2>
1142 template<
typename T1>
1149 template <
typename T1>
1155 template<
typename T1>
1160 template<
typename T1>
1161 template<
typename T2>
1163 : first_(other.first_)
1166 template<
typename T1>
1167 template<
typename T2>
1175 template<
typename T1>
1182 template<
typename T1>
1189 template<
typename T1>