mech_interpreter/stdlib/compare/
lte.rs1#[macro_use]
2use crate::stdlib::*;
3
4macro_rules! lte_scalar_lhs_op {
7 ($lhs:expr, $rhs:expr, $out:expr) => {
8 unsafe {
9 for i in 0..(*$lhs).len() {
10 (*$out)[i] = (*$lhs)[i] <= (*$rhs);
11 }}};}
12
13macro_rules! lte_scalar_rhs_op {
14 ($lhs:expr, $rhs:expr, $out:expr) => {
15 unsafe {
16 for i in 0..(*$rhs).len() {
17 (*$out)[i] = (*$lhs) <= (*$rhs)[i];
18 }}};}
19
20macro_rules! lte_vec_op {
21 ($lhs:expr, $rhs:expr, $out:expr) => {
22 unsafe {
23 for i in 0..(*$lhs).len() {
24 (*$out)[i] = (*$lhs)[i] <= (*$rhs)[i];
25 }}};}
26
27macro_rules! lte_op {
28 ($lhs:expr, $rhs:expr, $out:expr) => {
29 unsafe {
30 (*$out) = (*$lhs) <= (*$rhs);
31 }};}
32
33macro_rules! lte_mat_vec_op {
34 ($lhs:expr, $rhs:expr, $out:expr) => {
35 unsafe {
36 let mut out_deref = &mut (*$out);
37 let lhs_deref = &(*$lhs);
38 let rhs_deref = &(*$rhs);
39 for (mut col, lhs_col) in out_deref.column_iter_mut().zip(lhs_deref.column_iter()) {
40 for i in 0..col.len() {
41 col[i] = lhs_col[i] <= rhs_deref[i];
42 }
43 }
44 }
45 };}
46
47macro_rules! lte_vec_mat_op {
48 ($lhs:expr, $rhs:expr, $out:expr) => {
49 unsafe {
50 let mut out_deref = &mut (*$out);
51 let lhs_deref = &(*$lhs);
52 let rhs_deref = &(*$rhs);
53 for (mut col, rhs_col) in out_deref.column_iter_mut().zip(rhs_deref.column_iter()) {
54 for i in 0..col.len() {
55 col[i] = lhs_deref[i] <= rhs_col[i];
56 }
57 }
58 }
59 };}
60
61macro_rules! lte_mat_row_op {
62 ($lhs:expr, $rhs:expr, $out:expr) => {
63 unsafe {
64 let mut out_deref = &mut (*$out);
65 let lhs_deref = &(*$lhs);
66 let rhs_deref = &(*$rhs);
67 for (mut row, lhs_row) in out_deref.row_iter_mut().zip(lhs_deref.row_iter()) {
68 for i in 0..row.len() {
69 row[i] = lhs_row[i] <= rhs_deref[i];
70 }
71 }
72 }
73 };}
74
75macro_rules! lte_row_mat_op {
76 ($lhs:expr, $rhs:expr, $out:expr) => {
77 unsafe {
78 let mut out_deref = &mut (*$out);
79 let lhs_deref = &(*$lhs);
80 let rhs_deref = &(*$rhs);
81 for (mut row, rhs_row) in out_deref.row_iter_mut().zip(rhs_deref.row_iter()) {
82 for i in 0..row.len() {
83 row[i] = lhs_deref[i] <= rhs_row[i];
84 }
85 }
86 }
87 };}
88
89
90impl_compare_fxns!(LTE);
91
92fn impl_lte_fxn(lhs_value: Value, rhs_value: Value) -> Result<Box<dyn MechFunction>, MechError> {
93 impl_binop_match_arms!(
94 LTE,
95 (lhs_value, rhs_value),
96 I8, I8 => MatrixI8, i8, false, "I8";
97 I16, I16 => MatrixI16, i16, false, "I16";
98 I32, I32 => MatrixI32, i32, false, "I32";
99 I64, I64 => MatrixI64, i64, false, "I64";
100 I128, I128 => MatrixI128, i128, false, "I128";
101 U8, U8 => MatrixU8, u8, false, "U8";
102 U16, U16 => MatrixU16, u16, false, "U16";
103 U32, U32 => MatrixU32, u32, false, "U32";
104 U64, U64 => MatrixU64, u64, false, "U64";
105 U128, U128 => MatrixU128, u128, false, "U128";
106 F32, F32 => MatrixF32, F32, false, "F32";
107 F64, F64 => MatrixF64, F64, false, "F64";
108 )
109}
110
111impl_mech_binop_fxn!(CompareLessThanEqual,impl_lte_fxn);
112