radiate_gp/ops/
bool.rs

1use super::Op;
2use crate::ops::op_names;
3
4impl Op<bool> {
5    pub fn and() -> Self {
6        Op::Fn(op_names::AND, 2.into(), |args: &[bool]| args[0] && args[1])
7    }
8
9    pub fn or() -> Self {
10        Op::Fn(op_names::OR, 2.into(), |args: &[bool]| args[0] || args[1])
11    }
12
13    pub fn not() -> Self {
14        Op::Fn(op_names::NOT, 1.into(), |args: &[bool]| !args[0])
15    }
16
17    pub fn xor() -> Self {
18        Op::Fn(op_names::XOR, 2.into(), |args: &[bool]| args[0] ^ args[1])
19    }
20
21    pub fn eq() -> Self {
22        Op::Fn(op_names::EQ, 2.into(), |args: &[bool]| args[0] == args[1])
23    }
24
25    pub fn ne() -> Self {
26        Op::Fn(op_names::NE, 2.into(), |args: &[bool]| args[0] != args[1])
27    }
28
29    pub fn gt() -> Self {
30        Op::Fn(op_names::GT, 2.into(), |args: &[bool]| args[0] & !args[1])
31    }
32
33    pub fn ge() -> Self {
34        Op::Fn(op_names::GE, 2.into(), |args: &[bool]| args[0] >= args[1])
35    }
36
37    pub fn lt() -> Self {
38        Op::Fn(op_names::LT, 2.into(), |args: &[bool]| !args[0] & args[1])
39    }
40
41    pub fn le() -> Self {
42        Op::Fn(op_names::LE, 2.into(), |args: &[bool]| args[0] <= args[1])
43    }
44
45    pub fn if_else() -> Self {
46        Op::Fn(op_names::IF_ELSE, 3.into(), |args: &[bool]| {
47            if args[0] { args[1] } else { args[2] }
48        })
49    }
50
51    pub fn and_then() -> Self {
52        Op::Fn(op_names::AND_THEN, 3.into(), |args: &[bool]| {
53            args[0] && args[1] && args[2]
54        })
55    }
56
57    pub fn or_else() -> Self {
58        Op::Fn(op_names::OR_ELSE, 2.into(), |args: &[bool]| {
59            args[0] || args[1] || args[2]
60        })
61    }
62
63    pub fn nand() -> Self {
64        Op::Fn(op_names::NAND, 2.into(), |args: &[bool]| {
65            !(args[0] && args[1])
66        })
67    }
68
69    pub fn nor() -> Self {
70        Op::Fn(op_names::NOR, 2.into(), |args: &[bool]| {
71            !(args[0] || args[1])
72        })
73    }
74
75    pub fn xnor() -> Self {
76        Op::Fn(op_names::XNOR, 2.into(), |args: &[bool]| {
77            !(args[0] ^ args[1])
78        })
79    }
80
81    pub fn implies() -> Self {
82        Op::Fn(op_names::IMPLIES, 2.into(), |args: &[bool]| {
83            !args[0] || args[1]
84        })
85    }
86
87    pub fn iff() -> Self {
88        Op::Fn(op_names::IFF, 2.into(), |args: &[bool]| args[0] == args[1])
89    }
90}