vanadin_tasks/modules/
math.rs

1use rquickjs::module::{Declarations, Exports, ModuleDef};
2use rquickjs::{Ctx, Function};
3
4pub struct Module;
5
6impl ModuleDef for Module {
7    #[inline(always)]
8    fn declare(declarations: &mut Declarations) -> rquickjs::Result<()> {
9        declarations.declare("PI")?;
10        declarations.declare("E")?;
11
12        declarations.declare("sqrt")?;
13        declarations.declare("pow")?;
14        declarations.declare("sin")?;
15        declarations.declare("cos")?;
16        declarations.declare("tan")?;
17        declarations.declare("asin")?;
18        declarations.declare("acos")?;
19        declarations.declare("atan")?;
20        declarations.declare("sinh")?;
21        declarations.declare("cosh")?;
22        declarations.declare("tanh")?;
23        declarations.declare("asinh")?;
24        declarations.declare("acosh")?;
25        declarations.declare("atanh")?;
26        declarations.declare("exp")?;
27        declarations.declare("log")?;
28        declarations.declare("log2")?;
29        declarations.declare("log10")?;
30        declarations.declare("floor")?;
31        declarations.declare("ceil")?;
32        declarations.declare("round")?;
33
34        Ok(())
35    }
36
37    #[inline(always)]
38    fn evaluate<'js>(ctx: &Ctx<'js>, exports: &mut Exports<'js>) -> rquickjs::Result<()> {
39        exports.export("PI", std::f64::consts::PI)?;
40        exports.export("E", std::f64::consts::E)?;
41
42        exports.export("pow", Function::new(ctx.clone(), Self::pow))?;
43        exports.export("sqrt", Function::new(ctx.clone(), Self::sqrt))?;
44        exports.export("sin", Function::new(ctx.clone(), Self::sin))?;
45        exports.export("cos", Function::new(ctx.clone(), Self::cos))?;
46        exports.export("tan", Function::new(ctx.clone(), Self::tan))?;
47        exports.export("asin", Function::new(ctx.clone(), Self::asin))?;
48        exports.export("acos", Function::new(ctx.clone(), Self::acos))?;
49        exports.export("atan", Function::new(ctx.clone(), Self::atan))?;
50        exports.export("sinh", Function::new(ctx.clone(), Self::sinh))?;
51        exports.export("cosh", Function::new(ctx.clone(), Self::cosh))?;
52        exports.export("tanh", Function::new(ctx.clone(), Self::tanh))?;
53        exports.export("asinh", Function::new(ctx.clone(), Self::asinh))?;
54        exports.export("acosh", Function::new(ctx.clone(), Self::acosh))?;
55        exports.export("atanh", Function::new(ctx.clone(), Self::atanh))?;
56        exports.export("exp", Function::new(ctx.clone(), Self::exp))?;
57        exports.export("log", Function::new(ctx.clone(), Self::log))?;
58        exports.export("log2", Function::new(ctx.clone(), Self::log2))?;
59        exports.export("log10", Function::new(ctx.clone(), Self::log10))?;
60        exports.export("floor", Function::new(ctx.clone(), Self::floor))?;
61        exports.export("ceil", Function::new(ctx.clone(), Self::ceil))?;
62        exports.export("round", Function::new(ctx.clone(), Self::round))?;
63
64        Ok(())
65    }
66}
67
68impl Module {
69    #[inline(always)]
70    fn pow(base: f64, exp: f64) -> f64 {
71        base.powf(exp)
72    }
73
74    #[inline(always)]
75    fn sqrt(x: f64) -> f64 {
76        x.sqrt()
77    }
78
79    #[inline(always)]
80    fn sin(x: f64) -> f64 {
81        x.sin()
82    }
83
84    #[inline(always)]
85    fn cos(x: f64) -> f64 {
86        x.cos()
87    }
88
89    #[inline(always)]
90    fn tan(x: f64) -> f64 {
91        x.tan()
92    }
93
94    #[inline(always)]
95    fn asin(x: f64) -> f64 {
96        x.asin()
97    }
98
99    #[inline(always)]
100    fn acos(x: f64) -> f64 {
101        x.acos()
102    }
103
104    #[inline(always)]
105    fn atan(x: f64) -> f64 {
106        x.atan()
107    }
108
109    #[inline(always)]
110    fn sinh(x: f64) -> f64 {
111        x.sinh()
112    }
113
114    #[inline(always)]
115    fn cosh(x: f64) -> f64 {
116        x.cosh()
117    }
118
119    #[inline(always)]
120    fn tanh(x: f64) -> f64 {
121        x.tanh()
122    }
123
124    #[inline(always)]
125    fn asinh(x: f64) -> f64 {
126        x.asinh()
127    }
128
129    #[inline(always)]
130    fn acosh(x: f64) -> f64 {
131        x.acosh()
132    }
133
134    #[inline(always)]
135    fn atanh(x: f64) -> f64 {
136        x.atanh()
137    }
138
139    #[inline(always)]
140    fn exp(x: f64) -> f64 {
141        x.exp()
142    }
143
144    #[inline(always)]
145    fn log(x: f64, base: f64) -> f64 {
146        x.log(base)
147    }
148
149    #[inline(always)]
150    fn log2(x: f64) -> f64 {
151        x.log2()
152    }
153
154    #[inline(always)]
155    fn log10(x: f64) -> f64 {
156        x.log10()
157    }
158
159    #[inline(always)]
160    fn floor(x: f64) -> f64 {
161        x.floor()
162    }
163
164    #[inline(always)]
165    fn ceil(x: f64) -> f64 {
166        x.ceil()
167    }
168
169    #[inline(always)]
170    fn round(x: f64) -> f64 {
171        x.round()
172    }
173}