// -*- C++ -*-

namespace DTR {
/*! \class Techno
 *
 *  This class contains generic informations such as the name of the technology and the unit used, and the list of all technologic rules.
 */

/*! \fn Techno::Techno(Name name, Name unit)
 *   \brief creates a new technology
 *
 *   \param  name the name of the technology.
 *   \param  unit the unit used for all values.
 */

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

/*! \fn inline Name Techno::getUnit()
 *   \brief returns the unit.
 */

/*! \fn inline std::vector<Rule*>& Techno::getRules()
 *   \brief returns a reference on the std::vector containing all technology's rules.
 *
 *   \note this method is not yet available in python
 */

/*! \fn Rule* Techno::addRule(Name name, double value, Name ref, Name layer1, Name layer2)
 *   \brief creates a new Rule and adds it the to Techno object.
 *
 *   \param name   the name of the rule.
 *   \param value  the value of the rule.
 *   \param ref    the reference of the rule (helpful to find the rule in design kit).
 *   \param layer1 the first layer. This is an optionnal argument, default value is Name("").
 *   \param layer2 the second layer. This is an optionnal argument, default value is Name("").
 *   
 *   \return the newly created Rule object.
 */

/*! \fn Arule* Techno::addARule(Name name, double value, Name ref, Name layer1, Name layer2)
 *   \brief creates a new ARule and adds it to the Techno object.
 *
 *   \param name   the name of the rule.
 *   \param value  the value of the rule.
 *   \param ref    the reference of the rule (helpful to find the rule in design kit).
 *   \param layer1 the first layer.
 *   \param layer2 the second layer.
 *
 *   \return the newly created ARule object.
 */

/*! \fn Rule* Techno::getRule(Name name, Name layer1, Name layer2)
 *   \brief returns the rule uniquely identified by its name and layers.
 *
 *   \param name   the name of the rule.
 *   \param layer1 the first layer. This is an optionnal argument, default value is Name("").
 *   \param layer2 the second layer. This is an optionnal argument, default value is Name("").
 *
 *   \return the rule.
 */

/*! \fn double Techno::getValue(Name name, Name layer1, Name layer2)
 *   \brief returns the value of a rule uniquely identified by its name and layers.
 *
 *   \param name   the name of the rule.
 *   \param layer1 the first layer. This is an optionnal argument, default value is Name("").
 *   \param layer2 the second layer. This is an optionnal argument, default value is Name("").
 *
 *   \return the value of the rule.
 */

/*! \fn std::string Techno::getValueAsString(Name name, Name layer1, Name layer2)
 *   \brief returns a string corresponding to the value of a rule uniquely identified by its name and layers.
 * 
 *   \param name   the name of the rule.
 *   \param layer1 the first layer. This is an optionnal argument, default value is Name("").
 *   \param layer2 the second layer. This is an optionnal argument, default value is Name("").
 *
 *   \return the string corresponding to the value of the rule.
 *
 *   \note this method is important for python module since to avoid rounding problems it is necessary to use Decimal object which is build based on a string.
 */

/*! \fn bool Techno::writeToFile(std::string filename)
 *   \brief writes the database to file.
 *
 *   \param filename the destination file name.
 */

/*! \fn static Techno* Techno::readFromFile(const std::string filename)
 *   \brief creates and returns a Techno object based on a database source file.
 *
 *   \param filename the source file name.
 *
 *   \return the newly created Techno.
 */
 
}
