diff options
Diffstat (limited to 'src/lex')
-rw-r--r-- | src/lex/mod.rs | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/lex/mod.rs b/src/lex/mod.rs index 51f124c..bd69885 100644 --- a/src/lex/mod.rs +++ b/src/lex/mod.rs | |||
@@ -4,6 +4,8 @@ | |||
4 | 4 | ||
5 | use std::collections::HashMap; | 5 | use std::collections::HashMap; |
6 | 6 | ||
7 | use crate::CONFIGURATION; | ||
8 | |||
7 | use crate::error::{ | 9 | use crate::error::{ |
8 | CalcError, | 10 | CalcError, |
9 | Math | 11 | Math |
@@ -77,12 +79,12 @@ pub enum Token { | |||
77 | 79 | ||
78 | fn get_functions() -> HashMap<&'static str, Token> { | 80 | fn get_functions() -> HashMap<&'static str, Token> { |
79 | return [ | 81 | return [ |
80 | ("sin", Function::token_from_fn("sin".into(), |x| x.to_radians().sin())), | 82 | ("sin", Function::token_from_fn("sin".into(), |x| is_radian_mode(x, CONFIGURATION.radian_mode).sin())), |
81 | ("cos", Function::token_from_fn("cos".into(), |x| x.to_radians().cos())), | 83 | ("cos", Function::token_from_fn("cos".into(), |x| is_radian_mode(x, CONFIGURATION.radian_mode).cos())), |
82 | ("tan", Function::token_from_fn("tan".into(), |x| x.to_radians().tan())), | 84 | ("tan", Function::token_from_fn("tan".into(), |x| is_radian_mode(x, CONFIGURATION.radian_mode).tan())), |
83 | ("csc", Function::token_from_fn("csc".into(), |x| x.to_radians().sin().recip())), | 85 | ("csc", Function::token_from_fn("csc".into(), |x| is_radian_mode(x, CONFIGURATION.radian_mode).sin().recip())), |
84 | ("sec", Function::token_from_fn("sec".into(), |x| x.to_radians().cos().recip())), | 86 | ("sec", Function::token_from_fn("sec".into(), |x| is_radian_mode(x, CONFIGURATION.radian_mode).cos().recip())), |
85 | ("cot", Function::token_from_fn("cot".into(), |x| x.to_radians().tan().recip())), | 87 | ("cot", Function::token_from_fn("cot".into(), |x| is_radian_mode(x, CONFIGURATION.radian_mode).tan().recip())), |
86 | ("sinh", Function::token_from_fn("sinh".into(), |x| x.sinh())), | 88 | ("sinh", Function::token_from_fn("sinh".into(), |x| x.sinh())), |
87 | ("cosh", Function::token_from_fn("cosh".into(), |x| x.cosh())), | 89 | ("cosh", Function::token_from_fn("cosh".into(), |x| x.cosh())), |
88 | ("tanh", Function::token_from_fn("tanh".into(), |x| x.tanh())), | 90 | ("tanh", Function::token_from_fn("tanh".into(), |x| x.tanh())), |
@@ -220,3 +222,11 @@ fn drain_num_stack(num_vec: &mut String, result: &mut Vec<Token>) { | |||
220 | num_vec.clear(); | 222 | num_vec.clear(); |
221 | } | 223 | } |
222 | } | 224 | } |
225 | |||
226 | fn is_radian_mode(x: f64, is_radian: bool) -> f64 { | ||
227 | if is_radian { | ||
228 | return x | ||
229 | } else { | ||
230 | x.to_radians() | ||
231 | } | ||
232 | } | ||