flow_gate_core/transform/
unified.rs1use crate::traits::Transform;
2
3use super::{
4 FASinhTransform, HyperlogTransform, LinearTransform, LogarithmicTransform, LogicleTransform,
5};
6
7#[derive(Clone, Copy, Debug, PartialEq)]
8pub enum TransformKind {
9 Logicle(LogicleTransform),
10 FASinh(FASinhTransform),
11 Logarithmic(LogarithmicTransform),
12 Linear(LinearTransform),
13 Hyperlog(HyperlogTransform),
14}
15
16impl Transform for TransformKind {
17 fn apply(&self, value: f64) -> f64 {
18 match self {
19 Self::Logicle(t) => t.apply(value),
20 Self::FASinh(t) => t.apply(value),
21 Self::Logarithmic(t) => t.apply(value),
22 Self::Linear(t) => t.apply(value),
23 Self::Hyperlog(t) => t.apply(value),
24 }
25 }
26
27 fn invert(&self, scaled: f64) -> f64 {
28 match self {
29 Self::Logicle(t) => t.invert(scaled),
30 Self::FASinh(t) => t.invert(scaled),
31 Self::Logarithmic(t) => t.invert(scaled),
32 Self::Linear(t) => t.invert(scaled),
33 Self::Hyperlog(t) => t.invert(scaled),
34 }
35 }
36
37 fn apply_batch(&self, values: &[f64], out: &mut [f64]) {
38 match self {
39 Self::Logicle(t) => t.apply_batch(values, out),
40 Self::FASinh(t) => t.apply_batch(values, out),
41 Self::Logarithmic(t) => t.apply_batch(values, out),
42 Self::Linear(t) => t.apply_batch(values, out),
43 Self::Hyperlog(t) => t.apply_batch(values, out),
44 }
45 }
46
47 fn transform_id(&self) -> &str {
48 match self {
49 Self::Logicle(t) => t.transform_id(),
50 Self::FASinh(t) => t.transform_id(),
51 Self::Logarithmic(t) => t.transform_id(),
52 Self::Linear(t) => t.transform_id(),
53 Self::Hyperlog(t) => t.transform_id(),
54 }
55 }
56}