Skip to content

Commit 010a2af

Browse files
committed
Fix d128 support, except for the Real and SubsetOf traits.
The Real trait requires some work on the `decimal` trait first. Related to #49.
1 parent fe25a8d commit 010a2af

File tree

8 files changed

+54
-40
lines changed

8 files changed

+54
-40
lines changed

alga/src/general/identity.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ use std::cmp::{Ordering, PartialOrd};
22
use std::fmt;
33
use std::marker::PhantomData;
44
use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign};
5+
#[cfg(feature = "decimal")]
6+
use decimal::d128;
57

68
use num::{Num, One, Zero};
79

@@ -32,12 +34,12 @@ pub trait Identity<O: Operator> {
3234

3335
impl_ident!(Additive; 0; u8, u16, u32, u64, usize, i8, i16, i32, i64, isize);
3436
impl_ident!(Additive; 0.; f32, f64);
35-
#[cfg(decimal)]
36-
impl_ident!(Additive; 0.; decimal::d128);
37+
#[cfg(feature = "decimal")]
38+
impl_ident!(Additive; d128!(0.); d128);
3739
impl_ident!(Multiplicative; 1; u8, u16, u32, u64, usize, i8, i16, i32, i64, isize);
3840
impl_ident!(Multiplicative; 1.; f32, f64);
39-
#[cfg(decimal)]
40-
impl_ident!(Multiplicative; 1.; decimal::d128);
41+
#[cfg(feature = "decimal")]
42+
impl_ident!(Multiplicative; d128!(1.); d128);
4143

4244
impl<N: Identity<Additive>> Identity<Additive> for Complex<N> {
4345
#[inline]

alga/src/general/lattice.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
use std::cmp::{Ordering, PartialOrd};
2+
#[cfg(feature = "decimal")]
3+
use decimal::d128;
24

35
/// A set where every two elements have an infimum (i.e. greatest lower bound).
46
pub trait MeetSemilattice: Sized {
@@ -118,5 +120,5 @@ macro_rules! impl_lattice(
118120
);
119121

120122
impl_lattice!(u8, u16, u32, u64, usize, i8, i16, i32, i64, isize, f32, f64);
121-
#[cfg(decimal)]
122-
impl_lattice!(decimal::d128);
123+
#[cfg(feature = "decimal")]
124+
impl_lattice!(d128);

alga/src/general/one_operator.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use num::Num;
22
use num_complex::Complex;
33
use std::ops::{Add, Mul};
4+
#[cfg(feature = "decimal")]
5+
use decimal::d128;
46

57
use approx::RelativeEq;
68

@@ -372,11 +374,11 @@ macro_rules! impl_magma(
372374
);
373375

374376
impl_magma!(Additive; add; u8, u16, u32, u64, usize, i8, i16, i32, i64, isize, f32, f64);
375-
#[cfg(decimal)]
376-
impl_ident!(Additive; add; decimal::d128);
377+
#[cfg(feature = "decimal")]
378+
impl_magma!(Additive; add; d128);
377379
impl_magma!(Multiplicative; mul; u8, u16, u32, u64, usize, i8, i16, i32, i64, isize, f32, f64);
378-
#[cfg(decimal)]
379-
impl_ident!(Multiplicative; mul; decimal::d128);
380+
#[cfg(feature = "decimal")]
381+
impl_magma!(Multiplicative; mul; d128);
380382

381383
impl_monoid!(<Additive> for u8; u16; u32; u64; usize);
382384
impl_monoid!(<Multiplicative> for u8; u16; u32; u64; usize);

alga/src/general/operator.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! Operators traits and structures.
22
pub use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Rem, Sub, SubAssign};
3+
#[cfg(feature = "decimal")]
4+
use decimal::d128;
35

46
use num::Num;
57
use num_complex::Complex;
@@ -74,8 +76,8 @@ macro_rules! impl_additive_inverse(
7476
);
7577

7678
impl_additive_inverse!(i8, i16, i32, i64, isize, f32, f64);
77-
#[cfg(decimal)]
78-
impl_additive_inverse!(decimal::d128);
79+
#[cfg(feature = "decimal")]
80+
impl_additive_inverse!(d128);
7981

8082
impl<N: Inverse<Additive>> Inverse<Additive> for Complex<N> {
8183
#[inline]
@@ -101,10 +103,10 @@ impl Inverse<Multiplicative> for f64 {
101103
}
102104
}
103105

104-
#[cfg(decimal)]
105-
impl Inverse<Multiplicative> for decimal::d128 {
106+
#[cfg(feature = "decimal")]
107+
impl Inverse<Multiplicative> for d128 {
106108
#[inline]
107-
fn inverse(&self) -> decimal::d128 {
109+
fn inverse(&self) -> d128 {
108110
d128!(1.0) / self
109111
}
110112
}

alga/src/general/real.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ use libm::F32Ext;
1414
use libm::F64Ext;
1515
#[cfg(not(feature = "std"))]
1616
use num;
17+
//#[cfg(feature = "decimal")]
18+
//use decimal::d128;
1719

1820
#[allow(missing_docs)]
1921

@@ -418,5 +420,5 @@ macro_rules! impl_real(
418420
impl_real!(f32,f32,F32Ext; f64,f64,F64Ext);
419421
#[cfg(feature = "std")]
420422
impl_real!(f32,f32,f32; f64,f64,f64);
421-
#[cfg(decimal)]
422-
impl_real!(decimal::d128, decimal::d128);
423+
//#[cfg(feature = "decimal")]
424+
//impl_real!(d128, d128, d128);

alga/src/general/subset.rs

+22-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use num::Zero;
22
use num_complex::Complex;
3+
#[cfg(feature = "decimal")]
4+
use decimal::d128;
35

46
/// Nested sets and conversions between them (using an injective mapping). Useful to work with
57
/// substructures. In generic code, it is preferable to use `SupersetOf` as trait bound whenever
@@ -143,24 +145,24 @@ impl_subset!(
143145
f32 as f32, f64;
144146
f64 as f32, f64;
145147
);
146-
#[cfg(decimal)]
147-
impl_subset!(
148-
u8 as decimal::d128;
149-
u16 as decimal::d128;
150-
u32 as decimal::d128;
151-
u64 as decimal::d128;
152-
usize as decimal::d128;
153-
154-
i8 as decimal::d128;
155-
i16 as decimal::d128;
156-
i32 as decimal::d128;
157-
i64 as decimal::d128;
158-
isize as decimal::d128;
159-
160-
f32 as decimal::d128;
161-
f64 as decimal::d128;
162-
decimal::d128 as decimal::d128;
163-
);
148+
//#[cfg(feature = "decimal")]
149+
//impl_subset!(
150+
// u8 as d128;
151+
// u16 as d128;
152+
// u32 as d128;
153+
// u64 as d128;
154+
// usize as d128;
155+
//
156+
// i8 as d128;
157+
// i16 as d128;
158+
// i32 as d128;
159+
// i64 as d128;
160+
// isize as d128;
161+
//
162+
// f32 as d128;
163+
// f64 as d128;
164+
// d128 as d128;
165+
//);
164166

165167
impl<N1, N2: SupersetOf<N1>> SubsetOf<Complex<N2>> for Complex<N1> {
166168
#[inline]
@@ -210,5 +212,5 @@ macro_rules! impl_scalar_subset_of_complex(
210212
);
211213

212214
impl_scalar_subset_of_complex!(u8, u16, u32, u64, usize, i8, i16, i32, i64, isize, f32, f64);
213-
#[cfg(decimal)]
214-
impl_scalar_subset_of_complex!(decimal::d128);
215+
#[cfg(feature = "decimal")]
216+
impl_scalar_subset_of_complex!(d128);

alga/src/general/two_operators.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use approx::RelativeEq;
22
use num::Num;
33
use num_complex::Complex;
4+
#[cfg(feature = "decimal")]
5+
use decimal::d128;
46

57
use general::wrapper::Wrapper as W;
68
use general::{
@@ -258,8 +260,8 @@ macro_rules! impl_field(
258260
*/
259261
impl_ring_commutative!(<Additive, Multiplicative> for i8; i16; i32; i64; isize);
260262
impl_field!(<Additive, Multiplicative> for f32; f64);
261-
#[cfg(decimal)]
262-
impl_field!(<Additive, Multiplicative> for decimal::d128);
263+
#[cfg(feature = "decimal")]
264+
impl_field!(<Additive, Multiplicative> for d128);
263265

264266
impl<N: Num + Clone + ClosedNeg + AbstractRing> AbstractRing for Complex<N> {}
265267
impl<N: Num + Clone + ClosedNeg + AbstractRingCommutative> AbstractRingCommutative for Complex<N> {}

alga/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
#[macro_use]
2525
extern crate approx;
26-
#[cfg(decimal)]
26+
#[cfg(feature = "decimal")]
2727
extern crate decimal;
2828
#[cfg(not(feature = "std"))]
2929
extern crate libm;

0 commit comments

Comments
 (0)