Advanced Programming I Code Review for Programming Assignment 5

Advanced Programming I Lecture Notes

12 April 2007 • Assignment 5 Code Review


Outline

The Problem

  1. Read in a circuit description.

  2. Read in a sequence of circuit inputs.

  3. For each circuit input read, analyze the circuit and

    1. Print the maximum delay through the circuit.

    2. Print the circuit outputs.

A Solution

main()
  const circuit c = 
    input_circuit(std::cin)

  circuit_inputs ci;
  while (input_inputs(std::cin, ci))
    output_results(
      std::cout, analyze(c, ci, emsg))

Wish List

What's Next?

PERT Charts

Maximum Delay

Output Values

A Small Trick

Data Structures

Circuit Interface

// Add the given edge to the this graph. void add-edge(from, to, err) // Create a new, empty circuit. circuit(); // Return this circuit's maximum delay. unsigned maximum-delay() const // Trace the inputs through this circuit, // return the outputs. circuit-inputs trace(inputs) const;

Circuit Private Data

graph g;

graph::vertex-label-set 
  input-ports, output-ports;

mutable int max-delay;
mutable sequence<graph::vertex-label-type>
  schedule;

static const graph::vertex-label-type
  source-node, sink-node;

Graph Interface

typedef std::string vertex_label_type; typedef set<vertex_label_type> vertex_label_set void add_edge(from, to, err) vertex_label_set incoming_nodes(label) const vertex_label_set outgoing_nodes(label) const const vertex_label_set & vertices() const

Graph Private Data

table<vertex-label-type, 
      sequence<vertex-label-type>
  incoming, outgoing

vertex-label-set nodes


vertex-label-set
graph::incoming_nodes(
  const vertex-label-type & label)
  return incoming.get(label)

Testing

Results

Know Your Tools.

int checkForBlankLine(string inputLine)

 int spaces = 0

 while (spaces < inputLine.length()) and
       isspace(inputLine[spaces])
   spaces++

  if spaces == inputLine.length()
    return -1

  return spaces++

Know Your Tools..

int checkForBlankLine(string inputLine)

 const unsigned n = 
   inputLine.find_first_not_of(" \n\t");

 return n == string::npos ? -1 : n;

Avoid Public ADT Data

struct Circuit_or_Port Circuit_or_Port(const Circuit_or_Port &) ~Circuit_or_Port() void operator =(const Circuit_or_Port &) void addAjacentLabel(adjacentLabel * &) void addComponent(Circuit_or_Port * &) string circuitOrPortType int propagationTime bool visited int receivedInputs int valueOfInputs int valueOfOutputs int noOfInputWires int noOfOutputWires int currentInputWireArraySize int currentOutputWireArraySize int* inputWires string* receivedFrom adjacentLabel * adjacentVertex Circuit_or_Port * nextVertex

Expose ADT Methods

struct graph public: graph() graph(const graph& agraph) ~graph() void operator = (const graph & agraph) gate* addgate(string, string) gate* addgate(string, string, gate *) gate* getgate(int index) int getsize() int getisize() int getosize() gate* gatesearch(string aname) void addin(gate*) void addout(gate*) void init(int thesize) bool eval(bool ins[], bool outs[], int& del) void reset() void pprint()

Keep ADT Data Hidden


This page last modified on 31 March 2006.

This work is covered by a
Creative Commons License.