#[macro_escape]; // Create the traits needed to do fancy operator oveloading. // This is a meta version of // http://smallcultfollowing.com/babysteps/blog/2012/10/04/refining-traits-slash-impls/ // // Hopefully future version of the language will make this useless. macro_rules! double_dispatch_binop_decl_trait( ($t: ident, $trhs: ident) => ( pub trait $trhs { fn $trhs(&self, other: &$t) -> Res; } ) ) // Macro driving the `Mul` trait to use the related trait for double redispatch. macro_rules! mul_redispatch_impl( ($t: ident, $trhs: ident) => ( impl, Res> Mul for $t { #[inline(always)] fn mul(&self, other: &Rhs) -> Res { other.$trhs(self) } } ) ) // Macro driving the `Div` trait to use the related trait for double redispatch. macro_rules! div_redispatch_impl( ($t: ident, $trhs: ident) => ( impl, Res> Div for $t { #[inline(always)] fn div(&self, other: &Rhs) -> Res { other.$trhs(self) } } ) ) // Macro driving the `Div` trait to use the related trait for double redispatch. macro_rules! add_redispatch_impl( ($t: ident, $trhs: ident) => ( impl, Res> Add for $t { #[inline(always)] fn add(&self, other: &Rhs) -> Res { other.$trhs(self) } } ) ) // Macro driving the `Div` trait to use the related trait for double redispatch. macro_rules! sub_redispatch_impl( ($t: ident, $trhs: ident) => ( impl, Res> Sub for $t { #[inline(always)] fn sub(&self, other: &Rhs) -> Res { other.$trhs(self) } } ) )