diff --git a/src/andGate.cpp b/src/andGate.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/andGate.h b/src/andGate.h new file mode 100644 index 0000000..f2ab0fd --- /dev/null +++ b/src/andGate.h @@ -0,0 +1,10 @@ +#ifndef AND +#define AND + +class andGate : public gate { + public: + andGate(wire* wire1 = nullptr, wire* wire2 = nullptr, wire* wire3 = nullptr); + int evaluate(); +}; + +#endif // !AND diff --git a/src/gate.h b/src/gate.h index aa293e2..f63152a 100644 --- a/src/gate.h +++ b/src/gate.h @@ -1,16 +1,15 @@ #ifndef GATE #define GATE +class wire; class gate { public: - gate(wire* wire1 = nullptr, wire* wire2 = nullptr, wire* wire3 = nullptr); - virtual int getOutput() = 0; + gate(); + virtual int evaluate() = 0; + protected: wire* in1, in2, out; - /* TODO - * delay - * type - */ + int delay; }; #endif // !GATE diff --git a/src/notGate.cpp b/src/notGate.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/notGate.h b/src/notGate.h new file mode 100644 index 0000000..210ea80 --- /dev/null +++ b/src/notGate.h @@ -0,0 +1,9 @@ +#ifndef NOT +#define NOT + +class not : public gate { + notGate(wire* wire1 = nullptr, wire* wire2 = nullptr); + int evaluate(); +}; + +#endif // !NOT diff --git a/src/orGate.cpp b/src/orGate.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/orGate.h b/src/orGate.h new file mode 100644 index 0000000..178e872 --- /dev/null +++ b/src/orGate.h @@ -0,0 +1,9 @@ +#ifndef OR +#define OR + +class orGate : public gate { + orGate(wire* wire1 = nullptr, wire* wire2 = nullptr, wire* wire3 = nullptr); + int evaluate(); +}; + +#endif // !OR diff --git a/src/pQueue.h b/src/pQueue.h new file mode 100644 index 0000000..a5c8b34 --- /dev/null +++ b/src/pQueue.h @@ -0,0 +1,8 @@ +#ifndef pQUEUE +#define pQUEUE + +class pQueue { + //TODO +}; + +#endif // !pQUEUE diff --git a/src/radec.cpp b/src/radec.cpp new file mode 100644 index 0000000..08fad7c --- /dev/null +++ b/src/radec.cpp @@ -0,0 +1,33 @@ +#include "wire.h" +#include "pQueue.h" +#include "orGate.h" +#include "andGate.h" +#include "notGate.h" + +int main() { + // 1. Parse circuit file to create in-memory data structure of Gates and Wires + // to simulate + vector gates; + vector wires; + string fileName; + getline(cin, fileName); + bool parseSuccess = parseCircuit(gates, wires, fileName); + + if(parseSuccess) { + // 2. Parse the vector file to initialize the simulation Queue with initial + // Wire state (i.e., value) changes + queue e; + parseSuccess = e.parseVector(fileName); + + // 3. Simulate the circuit using Event-driven control + // first, remove the top Event e in the Queue + // second, determine if e causes a future Wire state change + // third, create and queue any future Wire state changes as new Events + // fourth, apply e's effects + + // 4. Print the results of the simulation +} + +bool parseCircuit(gates, wires) { + //TODO +} diff --git a/src/wire.h b/src/wire.h index cd4c638..0bc88d4 100644 --- a/src/wire.h +++ b/src/wire.h @@ -1,15 +1,26 @@ #ifndef WIRE #define WIRE +#include +#include +#include + +class gate; + class wire { - /* TODO: - * data members: - * state - * gate connections - * wire number - * name - * is input/output - */ + public: + wire(int number, string name = ""); + + int getState() const; + void setState(bool newValue, int setTime); + + void addGate(gate* newGate); + + private: + int wireNumber, value; + string name; + bool isInput; + vector gates; }; #endif // !WIRE