alga 0.1.0

Abstract algebra for Rust
Documentation
// Copyright 2014 The Algebra Developers. For a full listing of the authors,
// refer to the AUTHORS file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

macro_rules! impl_marker {
    ($M:ty; $($T:ty),* $(,)*) => {
        $(impl $M for $T { })+
    }
}

macro_rules! impl_ident {
    ($M:ty; $V:expr; $($T:ty),* $(,)*) => {
        $(impl Identity<$M> for $T { #[inline] fn id() -> $T {$V} })+
    }
}

macro_rules! impl_approx_eq {
    ($V:expr; $($T:ty),* $(,)*) => {
        $(impl ApproxEq for $T {
            type Eps = $T;
            #[inline]
            fn default_epsilon() -> Self::Eps { $V }
            #[inline]
            fn approx_eq_eps(&self, b: &$T, epsilon: &$T) -> bool {
                if self < b {
                    *b - *self <= *epsilon
                } else {
                    *self - *b <= *epsilon
                }
            }
        })+
    }
}