diff --git a/src/AndGate.cpp b/src/AndGate.cpp index 59ca186..5c13abf 100644 --- a/src/AndGate.cpp +++ b/src/AndGate.cpp @@ -8,17 +8,15 @@ AndGate::AndGate(int d, Wire* wire1, Wire* wire2, Wire* wire3) { in2 = wire2; out = wire3; } -int AndGate::evaluate(int evTime) { +Event AndGate::evaluate(int evTime) { if (in1->getValue(evTime) == 0 || in2->getValue(evTime) == 0) { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } else if(in1->getValue(evTime) == 1 && in2->getValue(evTime) == 1){ if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } } diff --git a/src/NandGate.cpp b/src/NandGate.cpp index f38c46a..1e64989 100644 --- a/src/NandGate.cpp +++ b/src/NandGate.cpp @@ -8,18 +8,16 @@ NandGate::NandGate(int d, Wire * wire1, Wire * wire2, Wire * wire3) out = wire3; } -void NandGate::evaluate(int evTime) +Event NandGate::evaluate(int evTime) { if (in1->getValue(evTime) == 0 || in2->getValue(evTime) == 0) { if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } else { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } } diff --git a/src/NorGate.cpp b/src/NorGate.cpp index 175aeaa..cf8906c 100644 --- a/src/NorGate.cpp +++ b/src/NorGate.cpp @@ -9,17 +9,15 @@ NorGate::NorGate(int d, Wire* wire1, Wire* wire2, Wire* wire3) { out = wire3; } -void NorGate::evaluate(int evTime) { +Event NorGate::evaluate(int evTime) { if (in1->getValue(evTime) == 1 || in2->getValue(evTime) == 1) { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } else if (in1->getValue(evTime) == 0 && in2->getValue(evTime) == 0) { if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } } diff --git a/src/NotGate.cpp b/src/NotGate.cpp index 62c372b..05eca8f 100644 --- a/src/NotGate.cpp +++ b/src/NotGate.cpp @@ -8,17 +8,15 @@ NotGate::NotGate(int d, Wire* wire1, Wire* wire2) { out = wire2; } -void NotGate::evaluate(int evTime) { +Event NotGate::evaluate(int evTime) { if (in1->getValue(evTime) == 0) { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } else{ if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } } diff --git a/src/OrGate.cpp b/src/OrGate.cpp index 92be0e8..0decdeb 100644 --- a/src/OrGate.cpp +++ b/src/OrGate.cpp @@ -9,17 +9,15 @@ OrGate::OrGate(int d, Wire* wire1, Wire* wire2, Wire* wire3) { out = wire3; } -void OrGate::evaluate(int evTime) { +Event OrGate::evaluate(int evTime) { if (in1->getValue(evTime) == 1 || in2->getValue(evTime) == 1) { if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } else if (in1->getValue(evTime) == 0 && in2->getValue(evTime) == 0) { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } } diff --git a/src/XnorGate.cpp b/src/XnorGate.cpp index 3155f6b..8642e5c 100644 --- a/src/XnorGate.cpp +++ b/src/XnorGate.cpp @@ -9,18 +9,16 @@ XnorGate::XnorGate(int d, Wire* wire1, Wire* wire2, Wire* wire3) { out = wire3; } -void XnorGate::evaluate(int evTime) { +Event XnorGate::evaluate(int evTime) { if (in1->getValue(evTime) != -1 && in2->getValue(evTime) != -1) { if (in1->getValue(evTime) == in2->getValue(evTime)) { if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } else { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } } diff --git a/src/XorGate.cpp b/src/XorGate.cpp index 9169df4..14b6f23 100644 --- a/src/XorGate.cpp +++ b/src/XorGate.cpp @@ -9,18 +9,16 @@ XorGate::XorGate(int d, Wire* wire1, Wire* wire2, Wire* wire3) { out = wire3; } -void XorGate::evaluate(int evTime) { +Event XorGate::evaluate(int evTime) { if (in1->getValue(evTime) != -1 && in2->getValue(evTime) != -1) { if (in1->getValue(evTime) != in2->getValue(evTime)) { if (out->getValue(evTime + delay) != 1) { - e->push(Event(e->size, 1, evTime + delay, out)); - out->setValue(1, evTime + delay); + return Event(-1, 1, evTime + delay, out); } } else { if (out->getValue(evTime + delay) != 0) { - e->push(Event(e->size, 0, evTime + delay, out)); - out->setValue(0, evTime + delay); + return Event(-1, 0, evTime + delay, out); } } }