Clean up the enum matching for Reals
This commit is contained in:
		
							parent
							
								
									6ca01cbb5a
								
							
						
					
					
						commit
						e503e6da7c
					
				
					 2 changed files with 8 additions and 39 deletions
				
			
		|  | @ -7,17 +7,8 @@ impl Add for Real { | |||
|     type Output = Real; | ||||
| 
 | ||||
|     fn add(self, other: Real) -> Real { | ||||
|         match other { | ||||
|             Real::Integer(v) => self.add_integer(v), | ||||
|             _ => Real::Integer(0) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Real { | ||||
|     fn add_integer(self, v_other: Int) -> Real { | ||||
|         match self { | ||||
|             Real::Integer(v) => Real::Integer(v + v_other), | ||||
|         match (self, other) { | ||||
|             (Real::Integer(v), Real::Integer(ov)) => Real::Integer(v + ov), | ||||
|             _ => Real::Integer(0) | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -3,11 +3,10 @@ | |||
|  */ | ||||
| 
 | ||||
| use std::any::Any; | ||||
| use std::ops::{Add, Sub, Mul, Div}; | ||||
| use super::*; | ||||
| use value::*; | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| #[derive(Clone, Copy, Debug)] | ||||
| pub enum Real { | ||||
|     Integer(Int), | ||||
|     Rational(Int, Int), | ||||
|  | @ -16,32 +15,11 @@ pub enum Real { | |||
| 
 | ||||
| impl PartialEq for Real { | ||||
|     fn eq(&self, other: &Real) -> bool { | ||||
|         match *other { | ||||
|             Real::Integer(v) => self.eq_integer(v), | ||||
|             Real::Rational(p, q) => self.eq_rational(p, q), | ||||
|             Real::Irrational(v) => self.eq_irrational(v) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Real { | ||||
|     fn eq_integer(&self, v_other: Int) -> bool { | ||||
|         match *self { | ||||
|             Real::Integer(v) => v == v_other, | ||||
|             _ => false | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn eq_rational(&self, p_other: Int, q_other: Int) -> bool { | ||||
|         match *self { | ||||
|             Real::Rational(p, q) => p == p_other && q == q_other, | ||||
|             _ => false | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn eq_irrational(&self, v_other: Flt) -> bool { | ||||
|         match *self { | ||||
|             Real::Irrational(v) => v == v_other, | ||||
|         // TODO: Make comparing different variants possible.
 | ||||
|         match (self, other) { | ||||
|             (&Real::Integer(v), &Real::Integer(ov)) => v == ov, | ||||
|             (&Real::Rational(p, q), &Real::Rational(op, oq)) => p == op && q == oq, | ||||
|             (&Real::Irrational(v), &Real::Irrational(ov)) => v == ov, | ||||
|             _ => false | ||||
|         } | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue