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}