-
Notifications
You must be signed in to change notification settings - Fork 0
/
Literal.cs
31 lines (26 loc) · 1009 Bytes
/
Literal.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Text;
namespace SAT_Solver {
public struct Literal {
public readonly int index;
public readonly bool value;
public readonly int raw;
public Literal Reverse => new Literal(index, !value);
public Literal(int literal) {
raw = literal;
index = Math.Abs(literal) - 1;
value = literal > 0;
}
public Literal(int index, bool value) {
this.index = index;
this.value = value;
raw = value ? index + 1 : -(index + 1);
}
public static bool operator ==(Literal a, Literal b) => a.index == b.index;
public static bool operator !=(Literal a, Literal b) => !(a == b);
public override bool Equals(object obj) => obj is Literal literal && literal == this;
public override int GetHashCode() => HashCode.Combine(index);
public override string ToString() => raw.ToString();
}
}