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 Pow,
23 Eq,
25 Lt,
27 Lte,
29 Sqrt,
31 Abs,
33 Ceil,
35 Floor,
37 IsNan,
39 IsInf,
41 Exp,
43 Log,
45 Sin,
47 Cos,
49 Tan,
51 Asin,
53 Acos,
55 Atan,
57 Atan2,
59 Sinh,
61 Cosh,
63 Tanh,
65 Asinh,
67 Acosh,
69 Atanh,
71 Max,
73 Min,
75}
76
77#[derive(Clone, Copy, Debug)]
79#[non_exhaustive]
80pub enum FloatArrayOp<'a> {
81 Const32(ConstArray<'a, f32>),
83 Const64(ConstArray<'a, f64>),
85 Zero {
87 precision: FloatPrecision,
89 },
90 GetIndex,
92 SetIndex,
94 Length,
96 Create,
98}
99
100impl FloatOp {
101 pub(crate) fn read_capnp(float_op: jeff_capnp::float_op::Reader<'_>) -> Self {
103 match float_op.which().expect("Float operation should be present") {
104 jeff_capnp::float_op::Which::Const32(val) => Self::Const32(val),
105 jeff_capnp::float_op::Which::Const64(val) => Self::Const64(val),
106 jeff_capnp::float_op::Which::Add(()) => Self::Add,
107 jeff_capnp::float_op::Which::Sub(()) => Self::Sub,
108 jeff_capnp::float_op::Which::Mul(()) => Self::Mul,
109 jeff_capnp::float_op::Which::Pow(()) => Self::Pow,
110 jeff_capnp::float_op::Which::Eq(()) => Self::Eq,
111 jeff_capnp::float_op::Which::Lt(()) => Self::Lt,
112 jeff_capnp::float_op::Which::Lte(()) => Self::Lte,
113 jeff_capnp::float_op::Which::Sqrt(()) => Self::Sqrt,
114 jeff_capnp::float_op::Which::Abs(()) => Self::Abs,
115 jeff_capnp::float_op::Which::Ceil(()) => Self::Ceil,
116 jeff_capnp::float_op::Which::Floor(()) => Self::Floor,
117 jeff_capnp::float_op::Which::IsNan(()) => Self::IsNan,
118 jeff_capnp::float_op::Which::IsInf(()) => Self::IsInf,
119 jeff_capnp::float_op::Which::Exp(()) => Self::Exp,
120 jeff_capnp::float_op::Which::Log(()) => Self::Log,
121 jeff_capnp::float_op::Which::Sin(()) => Self::Sin,
122 jeff_capnp::float_op::Which::Cos(()) => Self::Cos,
123 jeff_capnp::float_op::Which::Tan(()) => Self::Tan,
124 jeff_capnp::float_op::Which::Asin(()) => Self::Asin,
125 jeff_capnp::float_op::Which::Acos(()) => Self::Acos,
126 jeff_capnp::float_op::Which::Atan(()) => Self::Atan,
127 jeff_capnp::float_op::Which::Atan2(()) => Self::Atan2,
128 jeff_capnp::float_op::Which::Sinh(()) => Self::Sinh,
129 jeff_capnp::float_op::Which::Cosh(()) => Self::Cosh,
130 jeff_capnp::float_op::Which::Tanh(()) => Self::Tanh,
131 jeff_capnp::float_op::Which::Asinh(()) => Self::Asinh,
132 jeff_capnp::float_op::Which::Acosh(()) => Self::Acosh,
133 jeff_capnp::float_op::Which::Atanh(()) => Self::Atanh,
134 jeff_capnp::float_op::Which::Max(()) => Self::Max,
135 jeff_capnp::float_op::Which::Min(()) => Self::Min,
136 }
137 }
138}
139
140impl<'a> FloatArrayOp<'a> {
141 pub(crate) fn read_capnp(float_array_op: jeff_capnp::float_array_op::Reader<'a>) -> Self {
143 match float_array_op
144 .which()
145 .expect("Float array operation should be present")
146 {
147 jeff_capnp::float_array_op::Which::Const32(val) => Self::Const32(
148 ConstArray::read_capnp(val.expect("Const32 should be present")),
149 ),
150 jeff_capnp::float_array_op::Which::Const64(val) => Self::Const64(
151 ConstArray::read_capnp(val.expect("Const64 should be present")),
152 ),
153 jeff_capnp::float_array_op::Which::Zero(precision) => Self::Zero {
154 precision: FloatPrecision::from_capnp(
155 precision.expect("Precision should be present"),
156 ),
157 },
158 jeff_capnp::float_array_op::Which::GetIndex(()) => Self::GetIndex,
159 jeff_capnp::float_array_op::Which::SetIndex(()) => Self::SetIndex,
160 jeff_capnp::float_array_op::Which::Length(()) => Self::Length,
161 jeff_capnp::float_array_op::Which::Create(()) => Self::Create,
162 }
163 }
164}