-
Notifications
You must be signed in to change notification settings - Fork 0
/
electrical_value.cpp
52 lines (50 loc) · 1.43 KB
/
electrical_value.cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "common.h"
#include "electrical_value.h"
ElectricalValue combine_electrical_values(ElectricalValue v1, ElectricalValue v2) {
switch (v1) {
case EmptyElectricalValue:
return v2;
case HiElectricalValue:
if (v2 == LoElectricalValue) {
throw ElectricalValueException();
}
return HiElectricalValue;
case LoElectricalValue:
if (v2 == HiElectricalValue) {
throw ElectricalValueException();
}
return LoElectricalValue;
case PullLoElectricalValue:
if (v2 == HiElectricalValue) {
return HiElectricalValue;
} else if (v2 == PullHiElectricalValue) {
throw ElectricalValueException();
} else {
return PullLoElectricalValue;
}
case PullHiElectricalValue:
if (v2 == LoElectricalValue) {
return LoElectricalValue;
} else if (v2 == PullLoElectricalValue) {
throw ElectricalValueException();
} else {
return PullHiElectricalValue;
}
}
ASSERT(false);
}
std::string electrical_value_to_str(ElectricalValue v) {
switch (v) {
case EmptyElectricalValue:
return "Empty";
case HiElectricalValue:
return "Hi";
case LoElectricalValue:
return "Lo";
case PullHiElectricalValue:
return "PullHi";
case PullLoElectricalValue:
return "PullLo";
}
ASSERT(false);
}