text: #ifndef NETLIST_FWD_H
  #define NETLIST_FWD_H
  #include "vtr_strong_id.h"
  
  /*
   * Ids
   * ---
   * The Netlist uses unique IDs passed in by derived classes to identify any component of the netlist.
   * To avoid type-conversion errors (e.g. passing a PinId where a NetId was expected),
   * we use vtr::StrongId's to disallow such conversions. See vtr_strong_id.h for details.
   */
  template<typename BlockId, typename PortId, typename PinId, typename NetId>
  class Netlist;
  
  //A signal index in a port
  typedef unsigned BitIndex;
  
  //The type of a port in the Netlist
  enum class PortType : char {
      INPUT,  //The port is a data-input
      OUTPUT, //The port is an output (usually data, but potentially a clock)
      CLOCK   //The port is an input clock
  };
  
  enum class PinType : char {
      DRIVER, //The pin drives a net
      SINK,   //The pin is a net sink
      OPEN    //The pin is an open connection (undecided)
  };
  
  #endif