osiris_process/
compare.rs1use osiris_data::data::atomic::Word;
2
3#[derive(Copy, Clone, Eq, PartialEq)]
4pub enum Compare {
5 LT,
6 LE,
7 NE,
8 EQ,
9 GE,
10 GT,
11}
12
13impl Compare {
14
15 pub fn from(target_arg: u16) -> Option<Self> {
19 match target_arg {
20 0 => Some(Compare::LT),
21 1 => Some(Compare::LE),
22 2 => Some(Compare::NE),
23 3 => Some(Compare::EQ),
24 4 => Some(Compare::GE),
25 5 => Some(Compare::GT),
26 _ => None
27 }
28 }
29
30 pub fn to_u16(&self) -> u16 {
31 match self {
32 Compare::LT => 0,
33 Compare::LE => 1,
34 Compare::NE => 2,
35 Compare::EQ => 3,
36 Compare::GE => 4,
37 Compare::GT => 5,
38 }
39 }
40
41 pub fn cmp(a: Word, b: Word) -> i64 {
42 match a {
43 a if a > b => 1,
44 a if a < b => -1,
45 _ => 0
46 }
47 }
48
49 pub fn is(&self, cmp: i64) -> bool {
50 match self {
51 Compare::EQ => matches!(cmp, 0),
52 Compare::LT => matches!(cmp, -1),
53 Compare::GT => matches!(cmp, 1),
54 Compare::LE => matches!(cmp, -1 | 0),
55 Compare::NE => matches!(cmp, -1 | 1),
56 Compare::GE => matches!(cmp, 0 | 1),
57 }
58 }
59
60 pub fn check(&self, a: Word, b: Word) -> bool { self.is(Self::cmp(a, b)) }
61}