mech_interpreter/stdlib/compare/
lt.rs1#[macro_use]
2use crate::stdlib::*;
3
4macro_rules! lt_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! lt_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! lt_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! lt_op {
28 ($lhs:expr, $rhs:expr, $out:expr) => {
29 unsafe {
30 (*$out) = (*$lhs) < (*$rhs);
31 }};}
32
33macro_rules! lt_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! lt_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! lt_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! lt_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
89impl_compare_fxns!(LT);
90
91fn impl_lt_fxn(lhs_value: Value, rhs_value: Value) -> Result<Box<dyn MechFunction>, MechError> {
92 impl_binop_match_arms!(
93 LT,
94 (lhs_value, rhs_value),
95 I8, I8 => MatrixI8, i8, false, "I8";
96 I16, I16 => MatrixI16, i16, false, "I16";
97 I32, I32 => MatrixI32, i32, false, "I32";
98 I64, I64 => MatrixI64, i64, false, "I64";
99 I128, I128 => MatrixI128, i128, false, "I128";
100 U8, U8 => MatrixU8, u8, false, "U8";
101 U16, U16 => MatrixU16, u16, false, "U16";
102 U32, U32 => MatrixU32, u32, false, "U32";
103 U64, U64 => MatrixU64, u64, false, "U64";
104 U128, U128 => MatrixU128, u128, false, "U128";
105 F32, F32 => MatrixF32, F32, false, "F32";
106 F64, F64 => MatrixF64, F64, false, "F64";
107 )
108}
109
110impl_mech_binop_fxn!(CompareLessThan,impl_lt_fxn);
111