#![stable]
#[unstable = "this is just a documentation module and should not be part \
of the public api"]
use clone::Clone;
use cmp::*;
use cmp::Ordering::*;
use default::Default;
use option::Option;
use option::Option::Some;
macro_rules! e {
($e:expr) => { $e }
}
macro_rules! tuple_impls {
($(
$Tuple:ident {
$(($valN:ident, $refN:ident, $mutN:ident, $idx:tt) -> $T:ident)+
}
)+) => {
$(
#[allow(missing_docs)]
#[deprecated]
pub trait $Tuple<$($T),+> {
$(
#[deprecated = "use tuple indexing: `tuple.N`"]
fn $valN(self) -> $T;
#[deprecated = "use tuple indexing: `&tuple.N`"]
fn $refN<'a>(&'a self) -> &'a $T;
#[deprecated = "use tuple indexing: `&mut tuple.N`"]
fn $mutN<'a>(&'a mut self) -> &'a mut $T;
)+
}
impl<$($T),+> $Tuple<$($T),+> for ($($T,)+) {
$(
#[inline]
#[allow(unused_variables)]
#[deprecated = "use tuple indexing: `tuple.N`"]
fn $valN(self) -> $T {
e!(self.$idx)
}
#[inline]
#[allow(unused_variables)]
#[deprecated = "use tuple indexing: `&tuple.N`"]
fn $refN<'a>(&'a self) -> &'a $T {
e!(&self.$idx)
}
#[inline]
#[allow(unused_variables)]
#[deprecated = "use tuple indexing: &mut tuple.N"]
fn $mutN<'a>(&'a mut self) -> &'a mut $T {
e!(&mut self.$idx)
}
)+
}
#[stable]
impl<$($T:Clone),+> Clone for ($($T,)+) {
fn clone(&self) -> ($($T,)+) {
($(e!(self.$idx.clone()),)+)
}
}
#[stable]
impl<$($T:PartialEq),+> PartialEq for ($($T,)+) {
#[inline]
fn eq(&self, other: &($($T,)+)) -> bool {
e!($(self.$idx == other.$idx)&&+)
}
#[inline]
fn ne(&self, other: &($($T,)+)) -> bool {
e!($(self.$idx != other.$idx)||+)
}
}
#[stable]
impl<$($T:Eq),+> Eq for ($($T,)+) {}
#[stable]
impl<$($T:PartialOrd + PartialEq),+> PartialOrd for ($($T,)+) {
#[inline]
fn partial_cmp(&self, other: &($($T,)+)) -> Option<Ordering> {
lexical_partial_cmp!($(self.$idx, other.$idx),+)
}
#[inline]
fn lt(&self, other: &($($T,)+)) -> bool {
lexical_ord!(lt, $(self.$idx, other.$idx),+)
}
#[inline]
fn le(&self, other: &($($T,)+)) -> bool {
lexical_ord!(le, $(self.$idx, other.$idx),+)
}
#[inline]
fn ge(&self, other: &($($T,)+)) -> bool {
lexical_ord!(ge, $(self.$idx, other.$idx),+)
}
#[inline]
fn gt(&self, other: &($($T,)+)) -> bool {
lexical_ord!(gt, $(self.$idx, other.$idx),+)
}
}
#[stable]
impl<$($T:Ord),+> Ord for ($($T,)+) {
#[inline]
fn cmp(&self, other: &($($T,)+)) -> Ordering {
lexical_cmp!($(self.$idx, other.$idx),+)
}
}
#[stable]
impl<$($T:Default),+> Default for ($($T,)+) {
#[stable]
#[inline]
fn default() -> ($($T,)+) {
($({ let x: $T = Default::default(); x},)+)
}
}
)+
}
}
macro_rules! lexical_ord {
($rel: ident, $a:expr, $b:expr, $($rest_a:expr, $rest_b:expr),+) => {
if $a != $b { lexical_ord!($rel, $a, $b) }
else { lexical_ord!($rel, $($rest_a, $rest_b),+) }
};
($rel: ident, $a:expr, $b:expr) => { ($a) . $rel (& $b) };
}
macro_rules! lexical_partial_cmp {
($a:expr, $b:expr, $($rest_a:expr, $rest_b:expr),+) => {
match ($a).partial_cmp(&$b) {
Some(Equal) => lexical_partial_cmp!($($rest_a, $rest_b),+),
ordering => ordering
}
};
($a:expr, $b:expr) => { ($a).partial_cmp(&$b) };
}
macro_rules! lexical_cmp {
($a:expr, $b:expr, $($rest_a:expr, $rest_b:expr),+) => {
match ($a).cmp(&$b) {
Equal => lexical_cmp!($($rest_a, $rest_b),+),
ordering => ordering
}
};
($a:expr, $b:expr) => { ($a).cmp(&$b) };
}
tuple_impls! {
Tuple1 {
(val0, ref0, mut0, 0) -> A
}
Tuple2 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
}
Tuple3 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
}
Tuple4 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
}
Tuple5 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
}
Tuple6 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
}
Tuple7 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
(val6, ref6, mut6, 6) -> G
}
Tuple8 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
(val6, ref6, mut6, 6) -> G
(val7, ref7, mut7, 7) -> H
}
Tuple9 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
(val6, ref6, mut6, 6) -> G
(val7, ref7, mut7, 7) -> H
(val8, ref8, mut8, 8) -> I
}
Tuple10 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
(val6, ref6, mut6, 6) -> G
(val7, ref7, mut7, 7) -> H
(val8, ref8, mut8, 8) -> I
(val9, ref9, mut9, 9) -> J
}
Tuple11 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
(val6, ref6, mut6, 6) -> G
(val7, ref7, mut7, 7) -> H
(val8, ref8, mut8, 8) -> I
(val9, ref9, mut9, 9) -> J
(val10, ref10, mut10, 10) -> K
}
Tuple12 {
(val0, ref0, mut0, 0) -> A
(val1, ref1, mut1, 1) -> B
(val2, ref2, mut2, 2) -> C
(val3, ref3, mut3, 3) -> D
(val4, ref4, mut4, 4) -> E
(val5, ref5, mut5, 5) -> F
(val6, ref6, mut6, 6) -> G
(val7, ref7, mut7, 7) -> H
(val8, ref8, mut8, 8) -> I
(val9, ref9, mut9, 9) -> J
(val10, ref10, mut10, 10) -> K
(val11, ref11, mut11, 11) -> L
}
}