Moved the Bounded trait to the Weave library.

This commit is contained in:
Myrddin Dundragon 2018-03-22 01:07:06 -04:00
parent 19173c9bd4
commit 98d720816d
5 changed files with 9 additions and 108 deletions

View File

@ -9,6 +9,9 @@ documentation = ""
keywords = ["sigils"]
[dependencies.weave]
git = "ssh://git@gitlab.com/CyberMages/Core/weave"
[dependencies.binding]
git = "ssh://git@gitlab.com/CyberMages/Core/binding"

View File

@ -1,102 +0,0 @@
use std::{u8, u16, u32, u64, usize, i8, i16, i32, i64, isize, f32, f64};
/// Primitive types that have upper and lower bounds.
pub trait Bounded
{
/// The minimum value for this type.
const MIN: Self;
/// The maximum value for this type.
const MAX: Self;
}
/// A macro for making implementation of
/// the Bounded trait easier.
macro_rules! bounded_trait_impl
{
($T: ty, $minVal: expr, $maxVal: expr) =>
{
impl Bounded for $T
{
const MIN: $T = $minVal;
const MAX: $T = $maxVal;
}
}
}
// Implement the Bounded for all the primitive types.
bounded_trait_impl!(u8, 0u8, !0u8);
bounded_trait_impl!(u16, 0u16, !0u16);
bounded_trait_impl!(u32, 0u32, !0u32);
bounded_trait_impl!(u64, 0u64, !0u64);
bounded_trait_impl!(usize, 0usize, !0usize);
bounded_trait_impl!(i8, (!0i8 ^ (!0u8 >> 1u8) as i8),
!(!0i8 ^ (!0u8 >> 1u8) as i8));
bounded_trait_impl!(i16, (!0i16 ^ (!0u16 >> 1u16) as i16),
!(!0i16 ^ (!0u16 >> 1u16) as i16));
bounded_trait_impl!(i32, (!0i32 ^ (!0u32 >> 1u32) as i32),
!(!0i32 ^ (!0u32 >> 1u32) as i32));
bounded_trait_impl!(i64, (!0i64 ^ (!0u64 >> 1u64) as i64),
!(!0i64 ^ (!0u64 >> 1u64) as i64));
bounded_trait_impl!(isize, (!0isize ^ (!0usize >> 1usize) as isize),
!(!0isize ^ (!0usize >> 1usize) as isize));
bounded_trait_impl!(f32, -3.40282347e+38f32, 3.40282347e+38f32);
bounded_trait_impl!(f64, -1.7976931348623157e+308f64,
1.7976931348623157e+308f64);
#[cfg(test)]
mod tests
{
macro_rules! bounds_test
{
($T: ident, $func_name: ident, $minVal: expr, $maxVal: expr) =>
{
#[test]
fn $func_name()
{
use bounded::Bounded;
assert_eq!($T::MIN, $minVal);
assert_eq!($T::MAX, $maxVal);
}
}
}
bounds_test!(u8, min_max_u8, 0u8, !0u8);
bounds_test!(u16, min_max_u16, 0u16, !0u16);
bounds_test!(u32, min_max_u32, 0u32, !0u32);
bounds_test!(u64, min_max_u64, 0u64, !0u64);
bounds_test!(usize, min_max_usize, 0usize, !0usize);
bounds_test!(i8, min_max_i8,
-1i8 << (((::std::mem::size_of::<i8>() as i8)*8i8)-1i8),
!(-1i8 << (((::std::mem::size_of::<i8>() as i8)*8i8)-1i8)));
bounds_test!(i16, min_max_i16,
-1i16 << (((::std::mem::size_of::<i16>() as i16)*8i16)-1i16),
!(-1i16 << (((::std::mem::size_of::<i16>() as i16)*8i16)-1i16)));
bounds_test!(i32, min_max_i32,
-1i32 << (((::std::mem::size_of::<i32>() as i32)*8i32)-1i32),
!(-1i32 << (((::std::mem::size_of::<i32>() as i32)*8i32)-1i32)));
bounds_test!(i64, min_max_i64,
-1i64 << (((::std::mem::size_of::<i64>() as i64)*8i64)-1i64),
!(-1i64 << (((::std::mem::size_of::<i64>() as i64)*8i64)-1i64)));
bounds_test!(isize, min_max_isize,
-1isize << (((::std::mem::size_of::<isize>() as isize)*8isize)-1isize),
!(-1isize << (((::std::mem::size_of::<isize>() as isize)*8isize)-1isize)));
bounds_test!(f32, min_max_f32,
-3.40282347e+38f32, 3.40282347e+38f32);
bounds_test!(f64, min_max_f64,
-1.7976931348623157e+308f64,
1.7976931348623157e+308f64);
}

View File

@ -2,13 +2,12 @@
//! License: Proprietary
//!
//!
//#![feature(float_extras)]
//#![feature(associated_consts)]
#![no_std]
extern crate core as std;
extern crate binding;
extern crate pact;
extern crate weave;
@ -17,7 +16,6 @@ mod macros;
mod zero;
mod one;
mod bounded;
mod number;
mod whole;
mod integer;
@ -39,5 +37,4 @@ pub use self::whole::Whole;
pub use self::integer::Integer;
pub use self::real::Real;
pub use self::constants::Constants;
pub use self::bounded::Bounded;
pub use self::trig::{Degree, Radian, Trig};

View File

@ -11,7 +11,9 @@ use ::vector::{Vector, Vector2, Vector3, Vector4};
/// functions a [Matrix][1] must implement.
///
/// [1]: https://en.wikipedia.org/
pub trait Matrix<T, VT> : Sized where T: Number, VT: Vector<T>
pub trait Matrix<T, VT> : Sized
where T: Number,
VT: Vector<T>
{
/// Create a Matrix with the given value set
/// for all the diagonal values.

View File

@ -5,9 +5,10 @@ use std::ops::{Add, Sub, Mul, Div, Rem};
use std::ops::{AddAssign, SubAssign, MulAssign, DivAssign, RemAssign};
use std::str::FromStr;
use weave::Bounded;
use ::zero::Zero;
use ::one::One;
use ::bounded::Bounded;
/// A trait that defines what is required to be considered