use num_complex::Complex;
#[cfg(feature = "spirix")]
use spirix::{
CircleF3E3,
CircleF3E4,
CircleF3E5,
CircleF3E6,
CircleF3E7,
CircleF4E3,
CircleF4E4,
CircleF4E5,
CircleF4E6,
CircleF4E7,
CircleF5E3,
CircleF5E4,
CircleF5E5,
CircleF5E6,
CircleF5E7,
CircleF6E3,
CircleF6E4,
CircleF6E5,
CircleF6E6,
CircleF6E7,
CircleF7E3,
CircleF7E4,
CircleF7E5,
CircleF7E6,
CircleF7E7,
ScalarF3E3,
ScalarF3E4,
ScalarF3E5,
ScalarF3E6,
ScalarF3E7,
ScalarF4E3,
ScalarF4E4,
ScalarF4E5,
ScalarF4E6,
ScalarF4E7,
ScalarF5E3,
ScalarF5E4,
ScalarF5E5,
ScalarF5E6,
ScalarF5E7,
ScalarF6E3,
ScalarF6E4,
ScalarF6E5,
ScalarF6E6,
ScalarF6E7,
ScalarF7E3,
ScalarF7E4,
ScalarF7E5,
ScalarF7E6,
ScalarF7E7,
};
use super::eagle_time::EtType;
use super::tensor::{BitPackedTensor, StridedTensor, Tensor, Vector};
use super::world_coord::WorldCoord;
#[cfg(feature = "spirix")]
use super::toka_tree::{
ButtonVariant, Fill, GradientStop, GradientVariant, PathCommand, SplineType, Stroke, StrokeCap,
StrokeJoin, TextStyle, Transform,
};
#[derive(Debug, Clone, PartialEq)]
#[allow(non_camel_case_types)]
pub enum VsfType {
d(String), o(usize), b(usize, bool), L(usize, bool), n(usize), z(usize), y(usize), m(usize),
hp(Vec<u8>), hb(Vec<u8>), hs(Vec<u8>), hm(Vec<u8>), hg(Vec<u8>), hc(Vec<u8>), hk(Vec<u8>),
hP(Vec<u8>), hR(Vec<u8>),
ge(Vec<u8>), gp(Vec<u8>), gd(Vec<u8>), gs(Vec<u8>), gf(Vec<u8>), #[deprecated(
since = "0.1.7",
note = "RSA is legacy - prefer Ed25519 for new applications"
)]
gr(Vec<u8>),
ke(Vec<u8>), kx(Vec<u8>), kp(Vec<u8>), kk(Vec<u8>), kc(Vec<u8>), ka(Vec<u8>), km(Vec<u8>), kf(Vec<u8>), kl(Vec<u8>), kn(Vec<u8>), kh(Vec<u8>), kd(Vec<u8>), kb(Vec<u8>),
ksx(Vec<u8>), ksp(Vec<u8>), ksk(Vec<u8>), ksf(Vec<u8>), ksn(Vec<u8>), ksl(Vec<u8>), ksh(Vec<u8>), ksm(Vec<u8>),
ah(Vec<u8>), ap(Vec<u8>), ab(Vec<u8>), ac(Vec<u8>),
u0(bool), u(usize, bool), u3(u8), u4(u16), u5(u32), u6(u64), u7(u128),
i(isize), i3(i8), i4(i16), i5(i32), i6(i64), i7(i128),
f5(f32), f6(f64),
j5(Complex<f32>), j6(Complex<f64>),
x(String), l(String), e(EtType), w(WorldCoord),
v_u0(Vector<bool>), v_u3(Vector<u8>),
v_u4(Vector<u16>),
v_u5(Vector<u32>),
v_u6(Vector<u64>),
v_u7(Vector<u128>),
v_i3(Vector<i8>),
v_i4(Vector<i16>),
v_i5(Vector<i32>),
v_i6(Vector<i64>),
v_i7(Vector<i128>),
v_f5(Vector<f32>),
v_f6(Vector<f64>),
v_j5(Vector<Complex<f32>>),
v_j6(Vector<Complex<f64>>),
v(u8, Vec<u8>),
r(u8, u8, Vec<u8>),
rcb, rcc, rcg, rcj, rck, rcl, rcn, rco, rcq, rcr, rcv, rcw, rcy,
re(u8), rx(u16), rz(f32), ri(u8), rp(u16), ru([u8; 3]), rs([u16; 3]), rf([f32; 3]), ra([u8; 4]), rt([u16; 4]), rh([f32; 4]),
#[cfg(feature = "spirix")]
rd(ScalarF4E4), #[cfg(feature = "spirix")]
rb([ScalarF4E4; 3]), #[cfg(feature = "spirix")]
rw([ScalarF4E4; 4]),
#[cfg(feature = "spirix")]
rq(u8, u8, u8, Vec<u8>),
rm(usize, usize, Vec<f32>, f32),
#[cfg(feature = "spirix")]
rob(CircleF4E4, CircleF4E4, Fill, Option<Stroke>, Vec<VsfType>), #[cfg(feature = "spirix")]
roc(CircleF4E4, ScalarF4E4, Fill, Option<Stroke>), #[cfg(feature = "spirix")]
roe(CircleF4E4, CircleF4E4, Fill, Option<Stroke>), #[cfg(feature = "spirix")]
rol(CircleF4E4, CircleF4E4, ScalarF4E4, Box<VsfType>), #[cfg(feature = "spirix")]
rop(Vec<PathCommand>, Fill, Option<Stroke>), #[cfg(feature = "spirix")]
roo(Vec<CircleF4E4>, ScalarF4E4, Box<VsfType>, bool), #[cfg(feature = "spirix")]
ror(Vec<CircleF4E4>, Vec<ScalarF4E4>, u8, Fill, Option<Stroke>), #[cfg(feature = "spirix")]
rox(Vec<CircleF4E4>, SplineType, Fill, Option<Stroke>),
#[cfg(feature = "spirix")]
rot(
CircleF4E4,
Box<VsfType>,
ScalarF4E4,
Box<VsfType>,
Option<TextStyle>,
), #[cfg(feature = "spirix")]
rou(CircleF4E4, CircleF4E4, String, ButtonVariant, Box<VsfType>), #[cfg(feature = "spirix")]
roi(CircleF4E4, CircleF4E4, u64, Box<VsfType>), #[cfg(feature = "spirix")]
rof(CircleF4E4, CircleF4E4, u64),
#[cfg(feature = "spirix")]
ron(CircleF4E4, CircleF4E4, Vec<VsfType>), #[cfg(feature = "spirix")]
rom(Box<VsfType>, Vec<VsfType>), #[cfg(feature = "spirix")]
row(Transform, Vec<VsfType>),
#[cfg(feature = "spirix")]
rog(GradientVariant, Vec<GradientStop>), #[cfg(feature = "spirix")]
rok(ScalarF4E4, Box<VsfType>, StrokeJoin, StrokeCap),
#[cfg(feature = "spirix")]
s33(ScalarF3E3),
#[cfg(feature = "spirix")]
s34(ScalarF3E4),
#[cfg(feature = "spirix")]
s35(ScalarF3E5),
#[cfg(feature = "spirix")]
s36(ScalarF3E6),
#[cfg(feature = "spirix")]
s37(ScalarF3E7),
#[cfg(feature = "spirix")]
s43(ScalarF4E3),
#[cfg(feature = "spirix")]
s44(ScalarF4E4),
#[cfg(feature = "spirix")]
s45(ScalarF4E5),
#[cfg(feature = "spirix")]
s46(ScalarF4E6),
#[cfg(feature = "spirix")]
s47(ScalarF4E7),
#[cfg(feature = "spirix")]
s53(ScalarF5E3),
#[cfg(feature = "spirix")]
s54(ScalarF5E4),
#[cfg(feature = "spirix")]
s55(ScalarF5E5),
#[cfg(feature = "spirix")]
s56(ScalarF5E6),
#[cfg(feature = "spirix")]
s57(ScalarF5E7),
#[cfg(feature = "spirix")]
s63(ScalarF6E3),
#[cfg(feature = "spirix")]
s64(ScalarF6E4),
#[cfg(feature = "spirix")]
s65(ScalarF6E5),
#[cfg(feature = "spirix")]
s66(ScalarF6E6),
#[cfg(feature = "spirix")]
s67(ScalarF6E7),
#[cfg(feature = "spirix")]
s73(ScalarF7E3),
#[cfg(feature = "spirix")]
s74(ScalarF7E4),
#[cfg(feature = "spirix")]
s75(ScalarF7E5),
#[cfg(feature = "spirix")]
s76(ScalarF7E6),
#[cfg(feature = "spirix")]
s77(ScalarF7E7),
#[cfg(feature = "spirix")]
c33(CircleF3E3),
#[cfg(feature = "spirix")]
c34(CircleF3E4),
#[cfg(feature = "spirix")]
c35(CircleF3E5),
#[cfg(feature = "spirix")]
c36(CircleF3E6),
#[cfg(feature = "spirix")]
c37(CircleF3E7),
#[cfg(feature = "spirix")]
c43(CircleF4E3),
#[cfg(feature = "spirix")]
c44(CircleF4E4),
#[cfg(feature = "spirix")]
c45(CircleF4E5),
#[cfg(feature = "spirix")]
c46(CircleF4E6),
#[cfg(feature = "spirix")]
c47(CircleF4E7),
#[cfg(feature = "spirix")]
c53(CircleF5E3),
#[cfg(feature = "spirix")]
c54(CircleF5E4),
#[cfg(feature = "spirix")]
c55(CircleF5E5),
#[cfg(feature = "spirix")]
c56(CircleF5E6),
#[cfg(feature = "spirix")]
c57(CircleF5E7),
#[cfg(feature = "spirix")]
c63(CircleF6E3),
#[cfg(feature = "spirix")]
c64(CircleF6E4),
#[cfg(feature = "spirix")]
c65(CircleF6E5),
#[cfg(feature = "spirix")]
c66(CircleF6E6),
#[cfg(feature = "spirix")]
c67(CircleF6E7),
#[cfg(feature = "spirix")]
c73(CircleF7E3),
#[cfg(feature = "spirix")]
c74(CircleF7E4),
#[cfg(feature = "spirix")]
c75(CircleF7E5),
#[cfg(feature = "spirix")]
c76(CircleF7E6),
#[cfg(feature = "spirix")]
c77(CircleF7E7),
t_u0(Tensor<bool>),
t_u3(Tensor<u8>),
t_u4(Tensor<u16>),
t_u5(Tensor<u32>),
t_u6(Tensor<u64>),
t_u7(Tensor<u128>),
t_i3(Tensor<i8>),
t_i4(Tensor<i16>),
t_i5(Tensor<i32>),
t_i6(Tensor<i64>),
t_i7(Tensor<i128>),
t_f5(Tensor<f32>),
t_f6(Tensor<f64>),
t_j5(Tensor<Complex<f32>>),
t_j6(Tensor<Complex<f64>>),
#[cfg(feature = "spirix")]
t_s33(Tensor<ScalarF3E3>),
#[cfg(feature = "spirix")]
t_s34(Tensor<ScalarF3E4>),
#[cfg(feature = "spirix")]
t_s35(Tensor<ScalarF3E5>),
#[cfg(feature = "spirix")]
t_s36(Tensor<ScalarF3E6>),
#[cfg(feature = "spirix")]
t_s37(Tensor<ScalarF3E7>),
#[cfg(feature = "spirix")]
t_s43(Tensor<ScalarF4E3>),
#[cfg(feature = "spirix")]
t_s44(Tensor<ScalarF4E4>),
#[cfg(feature = "spirix")]
t_s45(Tensor<ScalarF4E5>),
#[cfg(feature = "spirix")]
t_s46(Tensor<ScalarF4E6>),
#[cfg(feature = "spirix")]
t_s47(Tensor<ScalarF4E7>),
#[cfg(feature = "spirix")]
t_s53(Tensor<ScalarF5E3>),
#[cfg(feature = "spirix")]
t_s54(Tensor<ScalarF5E4>),
#[cfg(feature = "spirix")]
t_s55(Tensor<ScalarF5E5>),
#[cfg(feature = "spirix")]
t_s56(Tensor<ScalarF5E6>),
#[cfg(feature = "spirix")]
t_s57(Tensor<ScalarF5E7>),
#[cfg(feature = "spirix")]
t_s63(Tensor<ScalarF6E3>),
#[cfg(feature = "spirix")]
t_s64(Tensor<ScalarF6E4>),
#[cfg(feature = "spirix")]
t_s65(Tensor<ScalarF6E5>),
#[cfg(feature = "spirix")]
t_s66(Tensor<ScalarF6E6>),
#[cfg(feature = "spirix")]
t_s67(Tensor<ScalarF6E7>),
#[cfg(feature = "spirix")]
t_s73(Tensor<ScalarF7E3>),
#[cfg(feature = "spirix")]
t_s74(Tensor<ScalarF7E4>),
#[cfg(feature = "spirix")]
t_s75(Tensor<ScalarF7E5>),
#[cfg(feature = "spirix")]
t_s76(Tensor<ScalarF7E6>),
#[cfg(feature = "spirix")]
t_s77(Tensor<ScalarF7E7>),
#[cfg(feature = "spirix")]
t_c33(Tensor<CircleF3E3>),
#[cfg(feature = "spirix")]
t_c34(Tensor<CircleF3E4>),
#[cfg(feature = "spirix")]
t_c35(Tensor<CircleF3E5>),
#[cfg(feature = "spirix")]
t_c36(Tensor<CircleF3E6>),
#[cfg(feature = "spirix")]
t_c37(Tensor<CircleF3E7>),
#[cfg(feature = "spirix")]
t_c43(Tensor<CircleF4E3>),
#[cfg(feature = "spirix")]
t_c44(Tensor<CircleF4E4>),
#[cfg(feature = "spirix")]
t_c45(Tensor<CircleF4E5>),
#[cfg(feature = "spirix")]
t_c46(Tensor<CircleF4E6>),
#[cfg(feature = "spirix")]
t_c47(Tensor<CircleF4E7>),
#[cfg(feature = "spirix")]
t_c53(Tensor<CircleF5E3>),
#[cfg(feature = "spirix")]
t_c54(Tensor<CircleF5E4>),
#[cfg(feature = "spirix")]
t_c55(Tensor<CircleF5E5>),
#[cfg(feature = "spirix")]
t_c56(Tensor<CircleF5E6>),
#[cfg(feature = "spirix")]
t_c57(Tensor<CircleF5E7>),
#[cfg(feature = "spirix")]
t_c63(Tensor<CircleF6E3>),
#[cfg(feature = "spirix")]
t_c64(Tensor<CircleF6E4>),
#[cfg(feature = "spirix")]
t_c65(Tensor<CircleF6E5>),
#[cfg(feature = "spirix")]
t_c66(Tensor<CircleF6E6>),
#[cfg(feature = "spirix")]
t_c67(Tensor<CircleF6E7>),
#[cfg(feature = "spirix")]
t_c73(Tensor<CircleF7E3>),
#[cfg(feature = "spirix")]
t_c74(Tensor<CircleF7E4>),
#[cfg(feature = "spirix")]
t_c75(Tensor<CircleF7E5>),
#[cfg(feature = "spirix")]
t_c76(Tensor<CircleF7E6>),
#[cfg(feature = "spirix")]
t_c77(Tensor<CircleF7E7>),
q_u0(StridedTensor<bool>),
q_u3(StridedTensor<u8>),
q_u4(StridedTensor<u16>),
q_u5(StridedTensor<u32>),
q_u6(StridedTensor<u64>),
q_u7(StridedTensor<u128>),
q_i3(StridedTensor<i8>),
q_i4(StridedTensor<i16>),
q_i5(StridedTensor<i32>),
q_i6(StridedTensor<i64>),
q_i7(StridedTensor<i128>),
q_f5(StridedTensor<f32>),
q_f6(StridedTensor<f64>),
q_j5(StridedTensor<Complex<f32>>),
q_j6(StridedTensor<Complex<f64>>),
#[cfg(feature = "spirix")]
q_s33(StridedTensor<ScalarF3E3>),
#[cfg(feature = "spirix")]
q_s34(StridedTensor<ScalarF3E4>),
#[cfg(feature = "spirix")]
q_s35(StridedTensor<ScalarF3E5>),
#[cfg(feature = "spirix")]
q_s36(StridedTensor<ScalarF3E6>),
#[cfg(feature = "spirix")]
q_s37(StridedTensor<ScalarF3E7>),
#[cfg(feature = "spirix")]
q_s43(StridedTensor<ScalarF4E3>),
#[cfg(feature = "spirix")]
q_s44(StridedTensor<ScalarF4E4>),
#[cfg(feature = "spirix")]
q_s45(StridedTensor<ScalarF4E5>),
#[cfg(feature = "spirix")]
q_s46(StridedTensor<ScalarF4E6>),
#[cfg(feature = "spirix")]
q_s47(StridedTensor<ScalarF4E7>),
#[cfg(feature = "spirix")]
q_s53(StridedTensor<ScalarF5E3>),
#[cfg(feature = "spirix")]
q_s54(StridedTensor<ScalarF5E4>),
#[cfg(feature = "spirix")]
q_s55(StridedTensor<ScalarF5E5>),
#[cfg(feature = "spirix")]
q_s56(StridedTensor<ScalarF5E6>),
#[cfg(feature = "spirix")]
q_s57(StridedTensor<ScalarF5E7>),
#[cfg(feature = "spirix")]
q_s63(StridedTensor<ScalarF6E3>),
#[cfg(feature = "spirix")]
q_s64(StridedTensor<ScalarF6E4>),
#[cfg(feature = "spirix")]
q_s65(StridedTensor<ScalarF6E5>),
#[cfg(feature = "spirix")]
q_s66(StridedTensor<ScalarF6E6>),
#[cfg(feature = "spirix")]
q_s67(StridedTensor<ScalarF6E7>),
#[cfg(feature = "spirix")]
q_s73(StridedTensor<ScalarF7E3>),
#[cfg(feature = "spirix")]
q_s74(StridedTensor<ScalarF7E4>),
#[cfg(feature = "spirix")]
q_s75(StridedTensor<ScalarF7E5>),
#[cfg(feature = "spirix")]
q_s76(StridedTensor<ScalarF7E6>),
#[cfg(feature = "spirix")]
q_s77(StridedTensor<ScalarF7E7>),
#[cfg(feature = "spirix")]
q_c33(StridedTensor<CircleF3E3>),
#[cfg(feature = "spirix")]
q_c34(StridedTensor<CircleF3E4>),
#[cfg(feature = "spirix")]
q_c35(StridedTensor<CircleF3E5>),
#[cfg(feature = "spirix")]
q_c36(StridedTensor<CircleF3E6>),
#[cfg(feature = "spirix")]
q_c37(StridedTensor<CircleF3E7>),
#[cfg(feature = "spirix")]
q_c43(StridedTensor<CircleF4E3>),
#[cfg(feature = "spirix")]
q_c44(StridedTensor<CircleF4E4>),
#[cfg(feature = "spirix")]
q_c45(StridedTensor<CircleF4E5>),
#[cfg(feature = "spirix")]
q_c46(StridedTensor<CircleF4E6>),
#[cfg(feature = "spirix")]
q_c47(StridedTensor<CircleF4E7>),
#[cfg(feature = "spirix")]
q_c53(StridedTensor<CircleF5E3>),
#[cfg(feature = "spirix")]
q_c54(StridedTensor<CircleF5E4>),
#[cfg(feature = "spirix")]
q_c55(StridedTensor<CircleF5E5>),
#[cfg(feature = "spirix")]
q_c56(StridedTensor<CircleF5E6>),
#[cfg(feature = "spirix")]
q_c57(StridedTensor<CircleF5E7>),
#[cfg(feature = "spirix")]
q_c63(StridedTensor<CircleF6E3>),
#[cfg(feature = "spirix")]
q_c64(StridedTensor<CircleF6E4>),
#[cfg(feature = "spirix")]
q_c65(StridedTensor<CircleF6E5>),
#[cfg(feature = "spirix")]
q_c66(StridedTensor<CircleF6E6>),
#[cfg(feature = "spirix")]
q_c67(StridedTensor<CircleF6E7>),
#[cfg(feature = "spirix")]
q_c73(StridedTensor<CircleF7E3>),
#[cfg(feature = "spirix")]
q_c74(StridedTensor<CircleF7E4>),
#[cfg(feature = "spirix")]
q_c75(StridedTensor<CircleF7E5>),
#[cfg(feature = "spirix")]
q_c76(StridedTensor<CircleF7E6>),
#[cfg(feature = "spirix")]
q_c77(StridedTensor<CircleF7E7>),
p(BitPackedTensor),
op(u8, u8), }
impl std::fmt::Display for VsfType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
VsfType::op(a, b) => {
let opcode = ((*a as u16) << 8) | (*b as u16);
write!(f, "{}", opcode_name(opcode))
}
#[cfg(feature = "spirix")]
VsfType::s33(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s34(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s35(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s36(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s37(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s43(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s44(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s45(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s46(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s47(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s53(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s54(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s55(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s56(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s57(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s63(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s64(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s65(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s66(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s67(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s73(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s74(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s75(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s76(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::s77(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c33(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c34(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c35(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c36(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c37(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c43(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c44(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c45(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c46(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c47(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c53(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c54(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c55(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c56(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c57(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c63(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c64(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c65(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c66(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c67(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c73(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c74(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c75(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c76(v) => v.fmt(f),
#[cfg(feature = "spirix")]
VsfType::c77(v) => v.fmt(f),
VsfType::u0(b) => write!(f, "⦉{}⦊", b),
VsfType::u(v, _) => write!(f, "⦉{}⦊", v),
VsfType::u3(v) => write!(f, "⦉{}⦊", v),
VsfType::u4(v) => write!(f, "⦉{}⦊", v),
VsfType::u5(v) => write!(f, "⦉{}⦊", v),
VsfType::u6(v) => write!(f, "⦉{}⦊", v),
VsfType::u7(v) => write!(f, "⦉{}⦊", v),
VsfType::i(v) => write!(f, "⦉{}⦊", v),
VsfType::i3(v) => write!(f, "⦉{}⦊", v),
VsfType::i4(v) => write!(f, "⦉{}⦊", v),
VsfType::i5(v) => write!(f, "⦉{}⦊", v),
VsfType::i6(v) => write!(f, "⦉{}⦊", v),
VsfType::i7(v) => write!(f, "⦉{}⦊", v),
VsfType::d(s) => write!(f, "⦉{}⦊", s),
VsfType::l(s) => write!(f, "⦉{}⦊", s),
VsfType::x(s) => write!(f, "⦉{}⦊", s.escape_default()),
_ => write!(f, "{:?}", self),
}
}
}
impl VsfType {
pub fn as_usize(&self) -> Option<usize> {
match self {
VsfType::u0(b) => Some(*b as usize),
VsfType::u3(n) => Some(*n as usize),
VsfType::u4(n) => Some(*n as usize),
VsfType::u5(n) => Some(*n as usize),
VsfType::u6(n) => {
if *n <= usize::MAX as u64 {
Some(*n as usize)
} else {
None
}
}
VsfType::u7(n) => {
if *n <= usize::MAX as u128 {
Some(*n as usize)
} else {
None
}
}
VsfType::u(n, _) | VsfType::o(n) | VsfType::n(n) => Some(*n),
_ => None,
}
}
pub fn as_u64(&self) -> Option<u64> {
match self {
VsfType::u0(b) => Some(*b as u64),
VsfType::u3(n) => Some(*n as u64),
VsfType::u4(n) => Some(*n as u64),
VsfType::u5(n) => Some(*n as u64),
VsfType::u6(n) => Some(*n),
VsfType::u(n, _) | VsfType::o(n) | VsfType::n(n) => {
if *n <= u64::MAX as usize {
Some(*n as u64)
} else {
None
}
}
_ => None,
}
}
pub fn as_u8(&self) -> Option<u8> {
match self {
VsfType::u0(b) => Some(*b as u8),
VsfType::u3(n) => Some(*n),
VsfType::u4(n) => {
if *n <= u8::MAX as u16 {
Some(*n as u8)
} else {
None
}
}
_ => None,
}
}
pub fn as_string(&self) -> Option<&str> {
match self {
VsfType::x(s) | VsfType::l(s) | VsfType::d(s) => Some(s),
_ => None,
}
}
pub fn as_bytes(&self) -> Option<&[u8]> {
match self {
VsfType::v(_, bytes) => Some(bytes),
VsfType::v_u3(vector) => Some(&vector.data),
VsfType::t_u3(tensor) => Some(&tensor.data),
VsfType::hp(bytes)
| VsfType::hb(bytes)
| VsfType::hs(bytes)
| VsfType::hm(bytes)
| VsfType::hg(bytes)
| VsfType::hc(bytes)
| VsfType::hk(bytes) => Some(bytes),
_ => None,
}
}
pub fn is_truthy(&self) -> Result<bool, String> {
match self {
#[cfg(feature = "spirix")]
VsfType::s44(v) => Ok(!v.is_zero()),
#[cfg(feature = "spirix")]
VsfType::c44(v) => Ok(!v.is_zero()),
VsfType::u0(v) => Ok(*v),
VsfType::u(v, _) => Ok(*v != 0),
VsfType::u3(v) => Ok(*v != 0),
VsfType::u4(v) => Ok(*v != 0),
VsfType::u5(v) => Ok(*v != 0),
VsfType::u6(v) => Ok(*v != 0),
VsfType::u7(v) => Ok(*v != 0),
VsfType::i(v) => Ok(*v != 0),
VsfType::i3(v) => Ok(*v != 0),
VsfType::i4(v) => Ok(*v != 0),
VsfType::i5(v) => Ok(*v != 0),
VsfType::i6(v) => Ok(*v != 0),
VsfType::i7(v) => Ok(*v != 0),
_ => Err(format!(
"Cannot check truthiness of non-numeric type: {:?}",
self
)),
}
}
pub fn is_numeric(&self) -> bool {
match self {
#[cfg(feature = "spirix")]
VsfType::s44(_) | VsfType::c44(_) => true,
VsfType::u0(_)
| VsfType::u(_, _)
| VsfType::u3(_)
| VsfType::u4(_)
| VsfType::u5(_)
| VsfType::u6(_)
| VsfType::u7(_) => true,
VsfType::i(_)
| VsfType::i3(_)
| VsfType::i4(_)
| VsfType::i5(_)
| VsfType::i6(_)
| VsfType::i7(_) => true,
_ => false,
}
}
}
fn opcode_name(opcode: u16) -> &'static str {
match opcode {
0x7073 => "push",
0x7070 => "pop",
0x6470 => "dup",
0x646e => "dup_n",
0x7377 => "swap",
0x7274 => "rotate",
0x6c61 => "local_alloc",
0x6c67 => "local_get",
0x6c73 => "local_set",
0x6c74 => "local_tee",
0x6164 => "add",
0x7362 => "sub",
0x6d6c => "mul",
0x6476 => "div",
0x7263 => "recip",
0x6d64 => "mod",
0x6e67 => "neg",
0x6162 => "abs",
0x7371 => "sqrt",
0x7077 => "pow",
0x6d6e => "min",
0x6d78 => "max",
0x636d => "clamp",
0x666c => "floor",
0x636c => "ceil",
0x726e => "round",
0x6661 => "frac",
0x6c70 => "lerp",
0x736e => "sin",
0x6373 => "cos",
0x746e => "tan",
0x6973 => "asin",
0x6963 => "acos",
0x6961 => "atan",
0x6132 => "atan2",
0x6571 => "eq",
0x6e65 => "ne",
0x6c6f => "lt",
0x6c65 => "le",
0x6774 => "gt",
0x6765 => "ge",
0x616e => "and",
0x6f72 => "or",
0x6e74 => "not",
0x7479 => "typeof",
0x7473 => "to_s44",
0x7475 => "to_u32",
0x7478 => "to_string",
0x6177 => "array_new",
0x616c => "array_len",
0x6167 => "array_get",
0x6165 => "array_set",
0x6170 => "array_push",
0x616f => "array_pop",
0x7363 => "string_concat",
0x736c => "string_len",
0x7373 => "string_slice",
0x6872 => "handle_read",
0x6877 => "handle_write",
0x6863 => "handle_call",
0x6871 => "handle_query",
0x6372 => "clear",
0x6672 => "fill_rect",
0x7372 => "stroke_rect",
0x6663 => "fill_circle",
0x736f => "stroke_circle",
0x646c => "draw_line",
0x6474 => "draw_text",
0x7366 => "set_font",
0x6361 => "rgba",
0x6362 => "rgb",
0x6369 => "colour_lerp",
0x6368 => "hsla",
0x636e => "call",
0x6364 => "call_indirect",
0x7265 => "return",
0x7276 => "return_value",
0x6a6d => "jump",
0x6a69 => "jump_if",
0x6a7a => "jump_zero",
0x7264 => "random",
0x7267 => "random_gauss",
0x7272 => "random_range",
0x6268 => "blake3",
0x746d => "timestamp",
0x6172 => "assert",
0x686c => "halt",
0x6462 => "debug_print",
0x6473 => "debug_stack",
0x6e70 => "nop",
_ => "unknown_opcode",
}
}