From 42037af8fab5788fc02bbcf69b4e42189b69b98e Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Apr 2017 20:28:37 -0400 Subject: [PATCH 1/2] Add Queue as input for nand constructor --- src/gate.h | 1 + src/nandGate.cpp | 14 ++++++++------ src/nandGate.h | 4 ++-- src/notGate.h | 3 +++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/gate.h b/src/gate.h index 1c40065..e48e16f 100644 --- a/src/gate.h +++ b/src/gate.h @@ -11,6 +11,7 @@ class gate { wire *in1, *in2, *out; priority_queue *e; int delay; + priority_queue *e; }; #endif // !GATE diff --git a/src/nandGate.cpp b/src/nandGate.cpp index d99ab8a..4f535ef 100644 --- a/src/nandGate.cpp +++ b/src/nandGate.cpp @@ -1,21 +1,23 @@ #include "nandGate.h" -nandGate::nandGate(int d, wire * wire1, wire * wire2, wire * wire3) +nandGate::nandGate(priority_queue *eQueue, int d, wire * wire1, wire * wire2, wire * wire3) { in1 = wire1; in2 = wire2; out = wire3; delay = d; + e = eQueue; } -int nandGate::evaluate(int time) +void nandGate::evaluate(int time) { if (in1->getValue(time) == 0 || in2->getValue(time) == 0) { - out->setValue(1, time + delay); - return 1; + if (out->getValue(time + delay) != 1) { + + out->setValue(1, time + delay); + } } - else if{ + else { out->setValue(0, time + delay); - return 0; } } \ No newline at end of file diff --git a/src/nandGate.h b/src/nandGate.h index 1144f4c..bb0c001 100644 --- a/src/nandGate.h +++ b/src/nandGate.h @@ -8,8 +8,8 @@ using namespace std; class nandGate : public gate { public: - nandGate(int d, wire* wire1 = nullptr, wire* wire2 = nullptr, wire* wire3 = nullptr); - int evaluate(int time); + nandGate(priority_queue *eQueue, int d, wire* wire1, wire* wire2, wire* wire3); + void evaluate(int time); }; #endif // !NAND diff --git a/src/notGate.h b/src/notGate.h index 3ebd4c9..b60333c 100644 --- a/src/notGate.h +++ b/src/notGate.h @@ -1,5 +1,8 @@ #ifndef NOT #define NOT +#include "gate.h" +#include "wire.h" +#include "event.h" class not : public gate { notGate(priority_queue *eQueue, int d, wire* wire1, wire* wire2); From 8aacd56b65f9ca7fd04e53c427f7430ecd38ae9c Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Apr 2017 20:44:48 -0400 Subject: [PATCH 2/2] Add the event generation to the nand Gate --- src/event.cpp | 6 ++---- src/event.h | 7 +++++-- src/nandGate.cpp | 3 ++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/event.cpp b/src/event.cpp index 8838972..bff04e1 100644 --- a/src/event.cpp +++ b/src/event.cpp @@ -1,9 +1,7 @@ #include "event.h" -using namespace std; - -event::event(int num, int value, int setTime, int wire) : evNum(num), evValue(value), - evTime(setTime), wireNum(wire) {} +event::event(int num, int value, int setTime, int wire, wire *output) : evNum(num), evValue(value), + evTime(setTime), out(output) {} bool event::operator<(const event &e1) { if(evTime == e1.evTime) { diff --git a/src/event.h b/src/event.h index 27206fd..2a6833c 100644 --- a/src/event.h +++ b/src/event.h @@ -1,13 +1,16 @@ #ifndef EVENT #define EVENT +using namespace std; +#include "wire.h" class event { public: - event(int num, int value, int setTime, int wire); + event(int num, int value, int setTime, wire * output); bool operator<(const event &e1); private: - int evNum, evValue, evTime, wireNum; + int evNum, evValue, evTime; + wire *out; }; #endif // !EVENT diff --git a/src/nandGate.cpp b/src/nandGate.cpp index 4f535ef..d25be20 100644 --- a/src/nandGate.cpp +++ b/src/nandGate.cpp @@ -13,11 +13,12 @@ void nandGate::evaluate(int time) { if (in1->getValue(time) == 0 || in2->getValue(time) == 0) { if (out->getValue(time + delay) != 1) { - + e->push(event(e->size, 1, time + delay, out)); out->setValue(1, time + delay); } } else { + e->push(event(e->size, 0, time + delay, out)); out->setValue(0, time + delay); } } \ No newline at end of file