14 #elif defined HAVE_TR1_TUPLE
63 #elif defined HAVE_TR1_TUPLE
64 using std::tr1::tuple;
74 inline const Nil nullType()
85 template<
typename T1,
typename TT>
117 template<
typename T2,
typename T3,
typename T4,
typename T5,
118 typename T6,
typename T7,
typename T8,
typename T9>
120 T6& t6, T7& t7, T8& t8, T9& t9);
136 template<
typename U1,
typename U2>
143 template<
typename U1,
typename U2>
186 template<
typename T1>
220 template<
typename T2>
226 template<
typename T2>
256 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
257 typename T6,
typename T7,
typename T8,
typename T9>
266 template<
typename T1>
289 template<
typename T1 =
Nil,
typename T2 =
Nil,
typename T3 =
Nil,
290 typename T4 =
Nil,
typename T5 =
Nil,
typename T6 =
Nil,
291 typename T7 =
Nil,
typename T8 =
Nil,
typename T9 =
Nil>
302 :
FirstPair(t1, nullType(), nullType(), nullType(),
303 nullType(), nullType(), nullType(), nullType(),
309 :
FirstPair(t1, t2, nullType(), nullType(),
310 nullType(), nullType(), nullType(), nullType(),
318 nullType(), nullType(), nullType(), nullType(),
327 nullType(), nullType(), nullType(), nullType(),
337 t5, nullType(), nullType(), nullType(),
348 t5, t6, nullType(), nullType(),
360 t5, t6, t7, nullType(),
386 :
FirstPair(t1, t2, t3, t4, t5, t6, t7, t8, t9)
389 template<
class U1,
class U2>
400 using std::tuple_element;
401 #elif defined HAVE_TR1_TUPLE
402 using std::tr1::tuple_element;
407 template<
int N,
class Tuple>
417 template<
int N,
typename T1,
typename T2>
430 template<
typename T1,
typename T2>
442 #if defined HAVE_TUPLE || defined HAVE_TR1_TUPLE
445 #elif defined HAVE_TR1_TUPLE
463 template<
typename T1,
typename T2>
477 template<
typename T1,
typename T2>
498 template<
typename T1,
typename T2>
509 template<
typename T1,
typename T2>
516 template<
int i,
typename T1,
typename T2,
typename T3,
typename T4,
517 typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
518 typename TupleAccessTraits<typename tuple_element<i, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> >::type>
525 template<
int i,
typename T1,
typename T2,
typename T3,
typename T4,
526 typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
527 typename TupleAccessTraits<typename tuple_element<i, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> >::type>
537 using std::tuple_size;
538 #elif defined HAVE_TR1_TUPLE
539 using std::tr1::tuple_size;
556 template<
typename T1,
typename T2>
563 template<
typename T1>
580 #elif defined HAVE_TR1_TUPLE
590 static std::ostream&
put(std::ostream& os,
const T&
t,
const char* delim=
", ")
596 static std::istream &
get ( std::istream &is, T &
t,
const char *delim =
"," )
599 for(
const char *it = delim; is && (*it != 0); ++it )
604 is.setstate( std::ios::failbit );
614 static std::ostream&
put(std::ostream& os,
const T&
t,
const char* delim=
", ")
616 return os<<Dune::get<0>(
t);
620 static std::istream &
get ( std::istream &is, T &
t,
const char *delim =
", " )
622 return is >> Dune::get< 0 >(
t );
630 static std::ostream&
put(std::ostream& os,
const T&
t,
const char* delim=
", ")
636 static std::istream &
get ( std::istream &is, T &
t,
const char *delim =
", " )
642 #if defined HAVE_TUPLE || defined HAVE_TR1_TUPLE
646 template<
typename T1>
647 inline std::ostream& operator<<( std::ostream& os, const tuple<T1> &
t)
649 typedef tuple<T1> TupleT;
650 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
653 template<
typename T1,
typename T2>
654 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2> &
t)
656 typedef tuple<T1,T2> TupleT;
657 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
660 template<
typename T1,
typename T2,
typename T3>
661 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3> &
t)
663 typedef tuple<T1,T2,T3> TupleT;
664 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
667 template<
typename T1,
typename T2,
typename T3,
typename T4>
668 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4> &
t)
670 typedef tuple<T1,T2,T3,T4> TupleT;
671 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
674 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
675 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5> &
t)
677 typedef tuple<T1,T2,T3,T4,T5> TupleT;
678 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
681 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
682 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6> &
t)
684 typedef tuple<T1,T2,T3,T4,T5,T6> TupleT;
685 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
688 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
689 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7> &
t)
691 typedef tuple<T1,T2,T3,T4,T5,T6,T7> TupleT;
692 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
695 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
697 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7,T8> &
t)
699 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8> TupleT;
700 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
703 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
704 typename T8,
typename T9>
705 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> &
t)
707 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> TupleT;
708 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
711 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
712 typename T8,
typename T9,
typename T10>
713 inline std::ostream& operator<<( std::ostream& os, const tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> &
t)
715 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> TupleT;
716 return tuple_writer<tuple_size<TupleT>::value>
::put(os,
t);
722 template<
typename T1>
723 inline std::istream&
operator>>( std::istream& is, tuple<T1> &
t)
725 typedef tuple<T1> TupleT;
726 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
729 template<
typename T1,
typename T2>
730 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2> &
t)
732 typedef tuple<T1,T2> TupleT;
733 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
736 template<
typename T1,
typename T2,
typename T3>
737 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3> &
t)
739 typedef tuple<T1,T2,T3> TupleT;
740 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
743 template<
typename T1,
typename T2,
typename T3,
typename T4>
744 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4> &
t)
746 typedef tuple<T1,T2,T3,T4> TupleT;
747 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
750 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
751 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5> &
t)
753 typedef tuple<T1,T2,T3,T4,T5> TupleT;
754 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
757 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
758 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6> &
t)
760 typedef tuple<T1,T2,T3,T4,T5,T6> TupleT;
761 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
764 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
765 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7> &
t)
767 typedef tuple<T1,T2,T3,T4,T5,T6,T7> TupleT;
768 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
771 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
773 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8> &
t)
775 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8> TupleT;
776 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
779 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
780 typename T8,
typename T9>
781 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> &
t)
783 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9> TupleT;
784 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
787 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
788 typename T8,
typename T9,
typename T10>
789 inline std::istream&
operator>>( std::istream& is, tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> &
t)
791 typedef tuple<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> TupleT;
792 return tuple_writer<tuple_size<TupleT>::value>
::get(is, t);
800 template<
typename T1,
typename T2,
typename U1,
typename U2>
811 template<
typename T1,
typename T2,
typename U1,
typename U2>
822 template<
typename T1,
typename T2,
typename U1,
typename U2>
823 inline bool operator<(const Pair<T1,T2>& tuple1,
const Pair<U1,U2>& tuple2)
825 return tuple1.
first() < tuple2.first()
826 || (tuple1.first() == tuple2.first() && tuple1.second() < tuple2.second());
834 template<
typename T1,
typename U1>
845 template<
typename T1,
typename U1>
849 "T1 and U1 have to be interoperable, i.e., either "
850 "conversion from one to the other must exist." );
859 template<
typename T1,
typename U1>
860 inline bool operator<(const Pair<T1,Nil>& tuple1,
const Pair<U1,Nil>& tuple2)
862 return (tuple1.first()<tuple2.first());
872 template<
typename T1,
typename U1,
typename U2>
884 template<
typename T1,
typename U1,
typename U2>
897 template<
typename T1,
typename T2,
typename U1>
909 template<
typename T1,
typename T2,
typename U1>
920 template<
typename T1,
typename T2>
929 template<
typename T1,
typename T2>
930 inline std::ostream& operator<<(std::ostream& os, const Pair<T1,T2>& pair)
932 os<<pair.
first()<<
" "<<pair.second();
936 template<
typename T1>
937 inline std::ostream& operator<<(std::ostream& os, const Pair<T1,Nil>& pair)
946 template<
typename T1,
typename T2>
952 template<
typename T1>
955 return is >> pair.
first();
963 template<
class T1,
class T2>
968 template<
class T1,
class T2,
class T3>
973 template<
class T1,
class T2,
class T3,
class T4>
978 template<
class T1,
class T2,
class T3,
class T4,
class T5>
979 inline tuple<T1&, T2&, T3&, T4&, T5&>
980 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) {
984 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
985 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&>
986 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6) {
987 return tuple<T1&, T2&, T3&, T4&, T5&, T6&> (t1, t2, t3, t4, t5, t6);
990 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
991 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&>
992 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7) {
993 return tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&> (t1, t2, t3, t4, t5, t6, t7);
996 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
998 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&>
999 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8) {
1001 (t1, t2, t3, t4, t5, t6, t7, t8);
1004 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1006 inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&, T9&>
1007 tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, T9& t9) {
1009 (t1, t2, t3, t4, t5, t6, t7, t8, t9);
1017 template<
class T1,
class T2>
1022 template<
class T1,
class T2,
class T3>
1027 template<
class T1,
class T2,
class T3,
class T4>
1032 template<
class T1,
class T2,
class T3,
class T4,
class T5>
1033 inline tuple<T1, T2, T3, T4, T5>
1034 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5) {
1038 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
1039 inline tuple<T1, T2, T3, T4, T5, T6>
1040 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6) {
1041 return tuple<T1, T2, T3, T4, T5, T6> (t1, t2, t3, t4, t5, t6);
1044 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
1045 inline tuple<T1, T2, T3, T4, T5, T6, T7>
1046 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
1048 return tuple<T1, T2, T3, T4, T5, T6, T7> (t1, t2, t3, t4, t5, t6, t7);
1051 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1053 inline tuple<T1, T2, T3, T4, T5, T6, T7, T8>
1054 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
1055 const T7& t7,
const T8& t8) {
1057 (t1, t2, t3, t4, t5, t6, t7, t8);
1060 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
1062 inline tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>
1063 make_tuple(
const T1& t1,
const T2& t2,
const T3& t3,
const T4& t4,
const T5& t5,
const T6& t6,
1064 const T7& t7,
const T8& t8,
const T9& t9) {
1066 (t1, t2, t3, t4, t5, t6, t7, t8, t9);
1069 template<
typename T1,
typename TT>
1070 template<
typename T2,
typename T3,
typename T4,
typename T5,
1071 typename T6,
typename T7,
typename T8,
typename T9>
1073 T2& t2, T3& t3, T4& t4, T5& t5,
1074 T6& t6, T7& t7, T8& t8, T9& t9)
1075 : first_(first), second_(t2,t3,t4,t5,t6,t7,t8,t9, nullType())
1078 template <
typename T1,
typename TT>
1080 : first_(first), second_(second)
1083 template<
typename T1,
typename T2>
1085 : first_(), second_()
1088 template<
typename T1,
typename T2>
1089 template<
typename U1,
typename U2>
1091 : first_(other.first_), second_(other.second_)
1094 template<
typename T1,
typename T2>
1095 template<
typename U1,
typename U2>
1103 template<
typename T1,
typename T2>
1111 template<
typename T1,
typename T2>
1118 template<
typename T1,
typename T2>
1126 template<
typename T1,
typename T2>
1133 template<
typename T1,
typename T2>
1140 template<
typename T1>
1147 template <
typename T1>
1153 template<
typename T1>
1158 template<
typename T1>
1159 template<
typename T2>
1161 : first_(other.first_)
1164 template<
typename T1>
1165 template<
typename T2>
1173 template<
typename T1>
1180 template<
typename T1>
1187 template<
typename T1>