1use super::ConstArray;
4use crate::jeff_capnp;
5use crate::types::FloatPrecision;
6
7#[derive(Clone, Copy, Debug)]
9#[non_exhaustive]
10pub enum FloatOp {
11 Const32(f32),
13 Const64(f64),
15 Add,
17 Sub,
19 Mul,
21 Div,
23 Pow,
25 Eq,
27 Lt,
29 Lte,
31 Sqrt,
33 Abs,
35 Ceil,
37 Floor,
39 IsNan,
41 IsInf,
43 Exp,
45 Log,
47 Sin,
49 Cos,
51 Tan,
53 Asin,
55 Acos,
57 Atan,
59 Atan2,
61 Sinh,
63 Cosh,
65 Tanh,
67 Asinh,
69 Acosh,
71 Atanh,
73 Max,
75 Min,
77 Select,
79 Ext,
81 Trunc,
83 ToSInt,
85 ToUInt,
87}
88
89#[derive(Clone, Copy, Debug)]
91#[non_exhaustive]
92pub enum FloatArrayOp<'a> {
93 Const32(ConstArray<'a, f32>),
95 Const64(ConstArray<'a, f64>),
97 Zero {
99 precision: FloatPrecision,
101 },
102 GetIndex,
104 SetIndex,
106 Length,
108 Create,
110}
111
112impl FloatOp {
113 pub(crate) fn read_capnp(float_op: jeff_capnp::float_op::Reader<'_>) -> Self {
115 match float_op.which().expect("Float operation should be present") {
116 jeff_capnp::float_op::Which::Const32(val) => Self::Const32(val),
117 jeff_capnp::float_op::Which::Const64(val) => Self::Const64(val),
118 jeff_capnp::float_op::Which::Add(()) => Self::Add,
119 jeff_capnp::float_op::Which::Sub(()) => Self::Sub,
120 jeff_capnp::float_op::Which::Mul(()) => Self::Mul,
121 jeff_capnp::float_op::Which::Div(()) => Self::Div,
122 jeff_capnp::float_op::Which::Pow(()) => Self::Pow,
123 jeff_capnp::float_op::Which::Eq(()) => Self::Eq,
124 jeff_capnp::float_op::Which::Lt(()) => Self::Lt,
125 jeff_capnp::float_op::Which::Lte(()) => Self::Lte,
126 jeff_capnp::float_op::Which::Sqrt(()) => Self::Sqrt,
127 jeff_capnp::float_op::Which::Abs(()) => Self::Abs,
128 jeff_capnp::float_op::Which::Ceil(()) => Self::Ceil,
129 jeff_capnp::float_op::Which::Floor(()) => Self::Floor,
130 jeff_capnp::float_op::Which::IsNan(()) => Self::IsNan,
131 jeff_capnp::float_op::Which::IsInf(()) => Self::IsInf,
132 jeff_capnp::float_op::Which::Exp(()) => Self::Exp,
133 jeff_capnp::float_op::Which::Log(()) => Self::Log,
134 jeff_capnp::float_op::Which::Sin(()) => Self::Sin,
135 jeff_capnp::float_op::Which::Cos(()) => Self::Cos,
136 jeff_capnp::float_op::Which::Tan(()) => Self::Tan,
137 jeff_capnp::float_op::Which::Asin(()) => Self::Asin,
138 jeff_capnp::float_op::Which::Acos(()) => Self::Acos,
139 jeff_capnp::float_op::Which::Atan(()) => Self::Atan,
140 jeff_capnp::float_op::Which::Atan2(()) => Self::Atan2,
141 jeff_capnp::float_op::Which::Sinh(()) => Self::Sinh,
142 jeff_capnp::float_op::Which::Cosh(()) => Self::Cosh,
143 jeff_capnp::float_op::Which::Tanh(()) => Self::Tanh,
144 jeff_capnp::float_op::Which::Asinh(()) => Self::Asinh,
145 jeff_capnp::float_op::Which::Acosh(()) => Self::Acosh,
146 jeff_capnp::float_op::Which::Atanh(()) => Self::Atanh,
147 jeff_capnp::float_op::Which::Max(()) => Self::Max,
148 jeff_capnp::float_op::Which::Min(()) => Self::Min,
149 jeff_capnp::float_op::Which::Select(()) => Self::Select,
150 jeff_capnp::float_op::Which::Ext(()) => Self::Ext,
151 jeff_capnp::float_op::Which::Trunc(()) => Self::Trunc,
152 jeff_capnp::float_op::Which::ToSInt(()) => Self::ToSInt,
153 jeff_capnp::float_op::Which::ToUInt(()) => Self::ToUInt,
154 }
155 }
156}
157
158impl<'a> FloatArrayOp<'a> {
159 pub(crate) fn read_capnp(float_array_op: jeff_capnp::float_array_op::Reader<'a>) -> Self {
161 match float_array_op
162 .which()
163 .expect("Float array operation should be present")
164 {
165 jeff_capnp::float_array_op::Which::Const32(val) => Self::Const32(
166 ConstArray::read_capnp(val.expect("Const32 should be present")),
167 ),
168 jeff_capnp::float_array_op::Which::Const64(val) => Self::Const64(
169 ConstArray::read_capnp(val.expect("Const64 should be present")),
170 ),
171 jeff_capnp::float_array_op::Which::Zero(precision) => Self::Zero {
172 precision: FloatPrecision::from_capnp(
173 precision.expect("Precision should be present"),
174 ),
175 },
176 jeff_capnp::float_array_op::Which::GetIndex(()) => Self::GetIndex,
177 jeff_capnp::float_array_op::Which::SetIndex(()) => Self::SetIndex,
178 jeff_capnp::float_array_op::Which::Length(()) => Self::Length,
179 jeff_capnp::float_array_op::Which::Create(()) => Self::Create,
180 }
181 }
182}