From fb0c023cf4bf5feb92b64f438c4f212ffc128f91 Mon Sep 17 00:00:00 2001 From: Joel Beckmeyer Date: Tue, 25 Apr 2017 10:10:07 -0400 Subject: [PATCH] add undefined logic to all gates --- src/AndGate.cpp | 5 ++++- src/NandGate.cpp | 5 ++++- src/NorGate.cpp | 3 +++ src/NotGate.cpp | 8 +++++--- src/OrGate.cpp | 3 +++ src/XnorGate.cpp | 3 +++ src/XorGate.cpp | 3 +++ 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/AndGate.cpp b/src/AndGate.cpp index e257945..7c0fcc2 100644 --- a/src/AndGate.cpp +++ b/src/AndGate.cpp @@ -11,11 +11,14 @@ AndGate::AndGate(int d, Wire* wire1, Wire* wire2, Wire* wire3) { Event AndGate::evaluate(int evTime) { if (in1->getValue(evTime) == 0 || in2->getValue(evTime) == 0) { return Event(-1, 0, evTime + delay, out); - + } else if(in1->getValue(evTime) == 1 && in2->getValue(evTime) == 1){ return Event(-1, 1, evTime + delay, out); } + else{ + return Event(-1, -1, evTime + delay, out); + } } int AndGate::getDelay() diff --git a/src/NandGate.cpp b/src/NandGate.cpp index bc403ae..16738ae 100644 --- a/src/NandGate.cpp +++ b/src/NandGate.cpp @@ -13,9 +13,12 @@ Event NandGate::evaluate(int evTime) if (in1->getValue(evTime) == 0 || in2->getValue(evTime) == 0) { return Event(-1, 1, evTime + delay, out); } - else { + else if (in1->getValue(evTime) == 1 && in2->getValue(evTime) == 1) { return Event(-1, 0, evTime + delay, out); } + else{ + return Event(-1, -1, evTime + delay, out); + } } int NandGate::getDelay() diff --git a/src/NorGate.cpp b/src/NorGate.cpp index 45c5001..bacc720 100644 --- a/src/NorGate.cpp +++ b/src/NorGate.cpp @@ -16,6 +16,9 @@ Event NorGate::evaluate(int evTime) { else if (in1->getValue(evTime) == 0 && in2->getValue(evTime) == 0) { return Event(-1, 1, evTime + delay, out); } + else{ + return Event(-1, -1, evTime + delay, out); + } } int NorGate::getDelay() diff --git a/src/NotGate.cpp b/src/NotGate.cpp index 90e5684..0a9daad 100644 --- a/src/NotGate.cpp +++ b/src/NotGate.cpp @@ -9,12 +9,14 @@ NotGate::NotGate(int d, Wire* wire1, Wire* wire2) { } Event NotGate::evaluate(int evTime) { - if (in1->getValue(evTime) == 0) { + if (in1->getValue(evTime) == 1) { return Event(-1, 0, evTime + delay, out); - } - else{ + }else if (in1->getValue(evTime) == 0) { return Event(-1, 1, evTime + delay, out); } + else { + return Event(-1, -1, evTime + delay, out); + } } int NotGate::getDelay() diff --git a/src/OrGate.cpp b/src/OrGate.cpp index 7015261..d87beac 100644 --- a/src/OrGate.cpp +++ b/src/OrGate.cpp @@ -16,6 +16,9 @@ Event OrGate::evaluate(int evTime) { else if (in1->getValue(evTime) == 0 && in2->getValue(evTime) == 0) { return Event(-1, 0, evTime + delay, out); } + else{ + return Event(-1, -1, evTime + delay, out); + } } int OrGate::getDelay() diff --git a/src/XnorGate.cpp b/src/XnorGate.cpp index 3e6d33f..07c4201 100644 --- a/src/XnorGate.cpp +++ b/src/XnorGate.cpp @@ -18,6 +18,9 @@ Event XnorGate::evaluate(int evTime) { return Event(-1, 0, evTime + delay, out); } } + else { + return Event(-1, -1, evTime + delay, out); + } } int XnorGate::getDelay() diff --git a/src/XorGate.cpp b/src/XorGate.cpp index f19f86b..8728199 100644 --- a/src/XorGate.cpp +++ b/src/XorGate.cpp @@ -18,6 +18,9 @@ Event XorGate::evaluate(int evTime) { return Event(-1, 0, evTime + delay, out); } } + else { + return Event(-1, -1, evTime + delay, out); + } } int XorGate::getDelay()