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