Create types module with a module for numbers; move Number there

This commit is contained in:
Eryn Wells 2016-12-29 10:10:40 -05:00
parent 93bdc998bd
commit f799d7642d
5 changed files with 71 additions and 14 deletions

View file

@ -2,18 +2,7 @@
* Eryn Wells <eryn@erynwells.me>
*/
#[derive(PartialEq, Debug)]
pub struct Number { value: f64, }
impl Number {
pub fn from_int(value: i64) -> Number {
Number { value: value as f64 }
}
pub fn new(value: f64) -> Number {
Number { value: value }
}
}
use types::number::Number;
#[derive(Debug)]
pub enum Radix { Bin, Oct, Dec, Hex }
@ -80,7 +69,7 @@ impl NumberBuilder {
// TODO: Convert fields to Number type.
let value = if self.point > 0 { self.value / 10u32.pow(self.point) as f64 } else { self.value };
let value = if self.sign == Sign::Neg { value * -1.0 } else { value };
Number { value: value }
Number::from_float(value)
}
pub fn radix_value(&self) -> u32 {

View file

@ -2,7 +2,7 @@
* Eryn Wells <eryn@erynwells.me>
*/
use lexer::number::Number;
use types::number::Number;
#[derive(PartialEq, Debug)]
pub enum Token {

View file

@ -1,5 +1,6 @@
mod lexer;
mod parser;
mod types;
fn main() {
let lexer = lexer::Lexer::new("((abc def + ghi #f))");

5
src/types/mod.rs Normal file
View file

@ -0,0 +1,5 @@
/* mod.rs
* Eryn Wells <eryn@erynwells.me>
*/
pub mod number;

62
src/types/number.rs Normal file
View file

@ -0,0 +1,62 @@
/* number.rs
* Eryn Wells <eryn@erynwells.me>
*/
/// # Numbers
///
/// Scheme numbers are complex, literally.
#[derive(PartialEq, Debug)]
pub struct Number { value: f64 }
impl Number {
pub fn new() -> Number {
Number { value: 0.0 }
}
pub fn from_int(v: i64) -> Number {
Number { value: v as f64 }
}
pub fn from_float(v: f64) -> Number {
Number { value: v }
}
}
/*
pub trait Number {
fn new() -> Number;
fn from_int(v: i64);
fn from_float(v: f64);
}
pub trait Exact {
fn exact() -> bool;
}
type Integer = i64;
impl Exact for Integer {
fn exact() -> bool { true }
}
#[derive(PartialEq, Debug)]
pub struct Rational { numer: i64, denom: i64 }
impl Exact for Rational {
fn exact() -> bool { true }
}
type Real = f64;
impl Exact for Real {
fn exact() -> bool { false }
}
#[derive(PartialEq, Debug)]
pub struct Complex { real: f64, imag: f64 }
impl Exact for Complex {
fn exact() -> bool { false }
}
*/