Create types module with a module for numbers; move Number there
This commit is contained in:
parent
93bdc998bd
commit
f799d7642d
5 changed files with 71 additions and 14 deletions
|
@ -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 {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Eryn Wells <eryn@erynwells.me>
|
||||
*/
|
||||
|
||||
use lexer::number::Number;
|
||||
use types::number::Number;
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum Token {
|
||||
|
|
|
@ -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
5
src/types/mod.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* mod.rs
|
||||
* Eryn Wells <eryn@erynwells.me>
|
||||
*/
|
||||
|
||||
pub mod number;
|
62
src/types/number.rs
Normal file
62
src/types/number.rs
Normal 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 }
|
||||
}
|
||||
*/
|
Loading…
Add table
Add a link
Reference in a new issue