vanadin_tasks/modules/
math.rs1use 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}