// -*- C++ -*-

namespace OpenChams {
/*! \class Netlist
 *
 *  This class describes a netlist.
 *
 *  A netlist contains the list of all circuit's instances and nets.
 *
 *   \note A Circuit must have one and only netlist. If no netlist is defined the Circuit cannot be driven to file.
 */

/*! \fn Netlist::Netlist(Circuit* circuit)
 *   \brief creates a new netlist.
 *
 *   \param circuit the circuit to which the netlist belongs.
 */

/*! \fn Instance* Netlist::addInstance(Name name, Name model)
 *   \brief adds an Instance (subcircuit) to the netlist.
 *  
 *   \param name  the name of the instance.
 *   \param model the model of the instance.
 *
 *   \return the newly created Instance.
 */

/*! \fn Device* Netlist::addDevice(Name name, Name model, Name mosType, bool connected)
 *   \brief adds a Device to the netlist.
 *
 *   \param name      the name of the device.
 *   \param model     the model of the device.
 *   \param mosType   the mos type of the device (NMOS or PMOS).
 *   \param connected if true, then device's bulk is source connected.
 *
 *   \return the newly created Device.
 */

/*! \fn Net* Netlist::addNet(Name name, Name type, bool external)
 *   \brief adds a Net to the netlist.
 *
 *   \param name     the name of the net.
 *   \param type     the type of the net (LOGICAL, POWER, GROUND, ...).
 *   \param external if true, then the net is set as external.
 *
 *   \return the newly created Net.
 */

/*! \fn Instance* Netlist::getInstance(Name name)
 *   \brief returns the Instance named \c name or NULL it does not exist.
 *
 *   \param name the name of the instance to get.
 */

/*! \fn Net* Netlist::getNet(Name name)
 *   \brief returns the Net named \c name or NULL it does not exist.
 *
 *   \param name the name of the net to get.
 */

/*! \fn inline bool Netlist::hasNoInstances()
 *   \brief returns true if netlist has no instances.
 */

/*! \fn inline bool Netlist::hasNoNets()
 *   \brief returns true if netlist has no nets.
 */

/*! \fn inline const std::vector<Instance*>& Netlist::getInstances()
 *   \brief returns the list of netlist's instances.
 */

/*! \fn inline const std::vector<Net*>& Netlist::getNets()
 *   \brief returns the list of netlist's nets.
 */

/*! \fn inline Circuit* Netlist::getCircuit()
 *   \brief returns the Circuit the netlist is associated to.
 */
}