// -*- C++ -*-

namespace OpenChams {
/*! \class Operator::Constraint
 * 
 *  This class describes a constraint.
 *  A constraint is used to set that a parameter's value is defined relative to another parameter value or to an equation:
 *  deviceA.paramI = deviceB.paramJ * factor
 *  deviceA.paramI = equation * factor
 */

/*! \fn Operator::Constraint::Constraint(Name ref, Name refParam, double factor)
 *   \brief creates a new constraint.
 *
 *   \param ref      the reference object (device, instace or circuit).
 *   \param refParam the reference parameter.
 *   \param factor   the factor of the constraint.
 */

/*! \fn inline Name Operator::Constraint::getRef()
 *   \brief returns the name of the object referenced by the constraint.
 */

/*! \fn inline Name Operator::Constraint::getRefParam()
 *   \brief returns the name of the parameter referenced by the constraint.
 */

/*! \fn inline double Operator::Constraint::getFactor()
 *   \brief returns the factor of the constraint.
 */

/*! \class Operator
 *
 *  This class describes an operator of a sizing procedure.
 */

/*! \fn Operator::Operator(Name name, Name simulModel, unsigned callOrder)
 *   \brief creates a new operator.
 *
 *   \param name       the name of the operator.
 *   \param simulModel the simulation model of the operator.
 *   \param callOrder  the call order of the operator in the sizing procedure.
 */

/*! \fn void Operator::addConstraint(Name paramName, Name ref, Name refParam)
 *   \brief adds a Constraint to the operator.
 *
 *   Constraint formula is : paramName = ref.refParam.
 *   Since the operator is associated to an instance, it is not necessaray to precise the name of this instance.
 *
 *   \param paramName the name of the parameter to set.
 *   \param ref       the name of the referenced object.
 *   \param refParam  the name of the referenced parameter.
 */

/*! \fn void Operator::addConstraint(Name paramName, Name ref, Name refParam, double factor)
 *   \brief adds a Constraint to the operator.
 *
 *   Constraint formula is : paramName = ref.refParam * factor.
 *   Since the operator is associated to an instance, it is not necessaray to precise the name of this instance.
 *
 *   \param paramName the name of the parameter to set.
 *   \param ref       the name of the referenced object.
 *   \param refParam  the name of the referenced parameter.
 *   \param factor    the multiplicty factor.
 */

/*! \fn void Operator::addConstraint(Name paramName, Name refEquation)
 *   \brief adds an equation Constraint to the operator.
 *
 *   Constraint formula is : paramName = equation.
 *   Since the operator is associated to an instance, it is not necessaray to precise the name of this instance.
 *
 *   \param paramName   the name of the parameter to set.
 *   \param refEquation the referenced equation.
 */

/*! \fn void Operator::addConstraint(Name paramName, Name refEquation, double factor)
 *   \brief adds an equation Constraint to the operator.
 *
 *   Constraint formula is : paramName = equation * factor.
 *   Since the operator is associated to an instance, it is not necessaray to precise the name of this instance.
 *
 *   \param paramName   the name of the parameter to set.
 *   \param refEquation the referenced equation.
 *   \param factor      the multiplicty factor.
 */

/*! \fn inline Name Operator::getName()
 *   \brief returns the name of the operator.
 */

/*! \fn inline Name Operator::getSimulModel()
 *   \brief returns the SimulModel of the operator.
 */

/*! \fn inline unsigned Operator::getCallOrder()
 *   \brief returns the call order of the operator in the sizing procedure.
 */

/*! \fn inline bool Operator::hasNoConstraints()
 *   \brief returns true if operator has no Constraint.
 */

/*! \fn inline const std::map<Name, Constraint*>& Operator::getConstraints()
 *   \brief returns the map of operator's constraints.
 */

}
