mech_compare/
neq.rs

1use crate::*;
2use mech_core::*;
3#[cfg(feature = "matrix")]
4use mech_core::matrix::Matrix;
5
6// Not Equal ---------------------------------------------------------------
7
8macro_rules! neq_scalar_lhs_op {
9  ($lhs:expr, $rhs:expr, $out:expr) => {
10    unsafe {
11      for i in 0..(*$lhs).len() {
12        (&mut (*$out))[i] = (&(*$lhs))[i] != (*$rhs);
13      }}};}
14
15macro_rules! neq_scalar_rhs_op {
16  ($lhs:expr, $rhs:expr, $out:expr) => {
17    unsafe {
18      for i in 0..(*$rhs).len() {
19        (&mut (*$out))[i] = (*$lhs) != (&(*$rhs))[i];
20      }}};}
21
22macro_rules! neq_vec_op {
23  ($lhs:expr, $rhs:expr, $out:expr) => {
24    unsafe {
25      for i in 0..(*$lhs).len() {
26        (&mut (*$out))[i] = (&(*$lhs))[i] != (&(*$rhs))[i];
27      }}};}
28
29macro_rules! neq_op {
30  ($lhs:expr, $rhs:expr, $out:expr) => {
31    unsafe {
32      (*$out) = (*$lhs) != (*$rhs);
33    }};}
34
35macro_rules! neq_mat_vec_op {
36  ($lhs:expr, $rhs:expr, $out:expr) => {
37    unsafe {
38      let mut out_deref = &mut (*$out);
39      let lhs_deref = &(*$lhs);
40      let rhs_deref = &(*$rhs);
41      for (mut col, lhs_col) in out_deref.column_iter_mut().zip(lhs_deref.column_iter()) {
42        for i in 0..col.len() {
43          col[i] = lhs_col[i] != rhs_deref[i];
44        }
45      }
46    }
47  };}   
48      
49macro_rules! neq_vec_mat_op {
50  ($lhs:expr, $rhs:expr, $out:expr) => {
51      unsafe {
52        let mut out_deref = &mut (*$out);
53        let lhs_deref = &(*$lhs);
54        let rhs_deref = &(*$rhs);
55        for (mut col, rhs_col) in out_deref.column_iter_mut().zip(rhs_deref.column_iter()) {
56          for i in 0..col.len() {
57            col[i] = lhs_deref[i] != rhs_col[i];
58          }
59        }
60      }
61  };}
62  
63macro_rules! neq_mat_row_op {
64  ($lhs:expr, $rhs:expr, $out:expr) => {
65      unsafe {
66      let mut out_deref = &mut (*$out);
67      let lhs_deref = &(*$lhs);
68      let rhs_deref = &(*$rhs);
69      for (mut row, lhs_row) in out_deref.row_iter_mut().zip(lhs_deref.row_iter()) {
70          for i in 0..row.len() {
71          row[i] = lhs_row[i] != rhs_deref[i];
72          }
73      }
74      }
75  };}
76
77macro_rules! neq_row_mat_op {
78  ($lhs:expr, $rhs:expr, $out:expr) => {
79      unsafe {
80      let mut out_deref = &mut (*$out);
81      let lhs_deref = &(*$lhs);
82      let rhs_deref = &(*$rhs);
83      for (mut row, rhs_row) in out_deref.row_iter_mut().zip(rhs_deref.row_iter()) {
84          for i in 0..row.len() {
85          row[i] = lhs_deref[i] != rhs_row[i];
86          }
87      }
88      }
89  };}    
90
91impl_compare_fxns!(NEQ);
92
93fn impl_neq_fxn(lhs_value: Value, rhs_value: Value) -> MResult<Box<dyn MechFunction>> {
94  impl_binop_match_arms!(
95    NEQ,
96    register_fxn_descriptor_inner,
97    (lhs_value, rhs_value),
98    Bool, bool, "bool";
99    I8,   bool, "i8";
100    I16,  bool, "i16";
101    I32,  bool, "i32";
102    I64,  bool, "i64";
103    I128, bool, "i128";
104    U8,   bool, "u8";
105    U16,  bool, "u16";
106    U32,  bool, "u32";
107    U64,  bool, "u64";
108    U128, bool, "u128";
109    F32,  bool, "f32";
110    F64,  bool, "f64";
111    String, bool, "string";
112    R64, bool, "rational";
113    C64, bool, "complex";
114  )
115}
116
117impl_mech_binop_fxn!(CompareNotEqual,impl_neq_fxn,"compare/neq");