bpp-core3  3.0.0
AutoParameter.cpp
Go to the documentation of this file.
1 //
2 // File: AutoParameter.cpp
3 // Authors:
4 // Julien Dutheil
5 // Created: 2003-11-11 22:15:16
6 //
7 
8 /*
9  * Copyright or © or Copr. CNRS, (November 17, 2004)
10  *
11  * This software is a computer program whose purpose is to provide classes
12  * for numerical calculus.
13  *
14  * This software is governed by the CeCILL license under French law and
15  * abiding by the rules of distribution of free software. You can use,
16  * modify and/ or redistribute the software under the terms of the CeCILL
17  * license as circulated by CEA, CNRS and INRIA at the following URL
18  * "http://www.cecill.info".
19  *
20  * As a counterpart to the access to the source code and rights to copy,
21  * modify and redistribute granted by the license, users are provided only
22  * with a limited warranty and the software's author, the holder of the
23  * economic rights, and the successive licensors have only limited
24  * liability.
25  *
26  * In this respect, the user's attention is drawn to the risks associated
27  * with loading, using, modifying and/or developing or reproducing the
28  * software by the user in light of its specific status of free software,
29  * that may mean that it is complicated to manipulate, and that also
30  * therefore means that it is reserved for developers and experienced
31  * professionals having in-depth computer knowledge. Users are therefore
32  * encouraged to load and test the software's suitability as regards their
33  * requirements in conditions enabling the security of their systems and/or
34  * data to be ensured and, more generally, to use and operate it in the
35  * same conditions as regards security.
36  *
37  * The fact that you are presently reading this means that you have had
38  * knowledge of the CeCILL license and that you accept its terms.
39 */
40 
41 #include <iostream>
42 
43 #include "AutoParameter.h"
44 #include "NumConstants.h"
45 
46 using namespace std;
47 
48 // Utils:
49 #include "../Text/TextTools.h"
50 #include "../App/ApplicationTools.h"
51 
52 using namespace bpp;
53 
54 /******************************************************************************/
55 
56 string AutoParameter::CONSTRAINTS_AUTO = "auto";
57 string AutoParameter::CONSTRAINTS_IGNORE = "ignore";
58 string AutoParameter::CONSTRAINTS_KEEP = "keep";
59 
62 AutoParameter::AutoParameter(const std::string& name, double value, std::shared_ptr<Constraint> constraint) :
63  Parameter(name, value, constraint), messageHandler_(ApplicationTools::message.get()) {}
64 
65 AutoParameter::AutoParameter(const Parameter& p) : Parameter(p), messageHandler_(ApplicationTools::message.get()) {}
66 
67 AutoParameter::AutoParameter(const AutoParameter& p) : Parameter(p), messageHandler_(p.messageHandler_) {}
68 
70 {
73  return *this;
74 }
75 
76 /******************************************************************************/
77 
78 void AutoParameter::setValue(double value)
79 {
80  try
81  {
82  // First we try to assign this value:
83  Parameter::setValue(value);
84  }
85  catch (ConstraintException& ce)
86  {
87  // Aie, there's a pb here...
88  if (messageHandler_)
89  {
90  (*messageHandler_) << "Constraint match at parameter ";
91  (*messageHandler_) << name_;
92  (*messageHandler_) << ", badValue = ";
93  (*messageHandler_) << ce.getBadValue();
94  (*messageHandler_) << " ";
95  (*messageHandler_ << constraint_->getDescription()).endLine();
96  }
97  double limit = constraint_->getAcceptedLimit(value);
98  try
99  { // We try to assign the limit then.
100  Parameter::setValue(limit);
101  }
102  catch (ConstraintException& ce2)
103  {
104  // Aie, the limit is not reachable, so we perform a smaller step...
105  // Parameter::setValue((getValue() + limit) / 2);
106  try
107  {
108  // Try on the right:
110  }
111  catch (ConstraintException& ce3)
112  {
113  // Try on the left:
115  }
116  }
117  }
118 }
119 
120 /******************************************************************************/
This class provides some common tools for developping applications.
The AutoParameter class.
Definition: AutoParameter.h:61
AutoParameter(const std::string &name="", double value=0, std::shared_ptr< Constraint > constraint=0)
Build a new AutoParameter.
virtual void setValue(double value)
Set the value of this parameter.
AutoParameter & operator=(const AutoParameter &param)
Assignment operator.
OutputStream * messageHandler_
Definition: AutoParameter.h:63
Exception thrown when a value do not match a given constraint.
virtual double getBadValue() const
Get the value that doesn't match the constraint.
static double TINY()
Definition: NumConstants.h:82
This class is designed to facilitate the manipulation of parameters.
Definition: Parameter.h:135
virtual void setValue(double value)
Set the value of this parameter.
Definition: Parameter.cpp:110
std::shared_ptr< Constraint > constraint_
Definition: Parameter.h:140
std::string name_
Definition: Parameter.h:137
Parameter & operator=(const Parameter &param)
Assignment operator.
Definition: Parameter.cpp:81