mech_compare/
gt.rs

1use crate::*;
2use mech_core::*;
3#[cfg(feature = "matrix")]
4use mech_core::matrix::Matrix;
5
6// Greater Than ---------------------------------------------------------------
7
8macro_rules! gt_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! gt_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! gt_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! gt_op {
30  ($lhs:expr, $rhs:expr, $out:expr) => {
31    unsafe {
32      (*$out) = (*$lhs) > (*$rhs);
33    }};}
34
35macro_rules! gt_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! gt_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! gt_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! gt_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
91
92impl_compare_fxns!(GT);
93
94fn impl_gt_fxn(lhs_value: Value, rhs_value: Value) -> MResult<Box<dyn MechFunction>> {
95  impl_binop_match_arms!(
96    GT,
97    register_fxn_descriptor_inner,
98    (lhs_value, rhs_value),
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    R64, bool, "rational";
112    C64, bool, "complex";
113  )
114}
115
116impl_mech_binop_fxn!(CompareGreaterThan,impl_gt_fxn,"compare/gt");