From 917c21942ae1318522511cc5b8fb2b53790acc90 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Mon, 28 Nov 2011 12:24:15 +0000 Subject: [PATCH] remove default values + roadmap for next steps --- Common/onelab.h | 79 ++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/Common/onelab.h b/Common/onelab.h index 4befed87e0..400db13087 100644 --- a/Common/onelab.h +++ b/Common/onelab.h @@ -43,8 +43,9 @@ namespace onelab{ // numbers to force their relative ordering (such numbers could be // automatically hidden in a GUI). std::string _name; - // optional help strings (the short help can serve as a better way - // to display the parameter in a GUI) + // help strings (the short help can serve as a better way to + // display the parameter in a GUI). Should allow richer encoding + // (UTF? HTML?) std::string _shortHelp, _help; // client code(s) that use this parameter std::set<std::string> _clients; @@ -52,6 +53,9 @@ namespace onelab{ bool _changed; // should the parameter be visible in the interface bool _visible; + protected: + // optional additional attributes + std::map<std::string, std::string> _attributes; public: parameter(const std::string &name="", const std::string &shortHelp="", const std::string &help="") @@ -129,23 +133,20 @@ namespace onelab{ // to make the interface nicer. class number : public parameter{ private: - double _value, _defaultValue, _min, _max, _step; + double _value, _min, _max, _step; std::vector<double> _choices; public: - number(const std::string &name="", double defaultValue=0., + number(const std::string &name="", double value=0., const std::string &shortHelp="", const std::string &help="") - : parameter(name, shortHelp, help), _value(defaultValue), - _defaultValue(defaultValue), _min(-maxNumber()), _max(maxNumber()), - _step(0.) {} + : parameter(name, shortHelp, help), _value(value), + _min(-maxNumber()), _max(maxNumber()), _step(0.) {} void setValue(double value){ _value = value; } - void setDefaultValue(double value){ _defaultValue = value; } void setMin(double min){ _min = min; } void setMax(double max){ _max = max; } void setStep(double step){ _step = step; } void setChoices(std::vector<double> &choices){ _choices = choices; } std::string getType() const { return "number"; } double getValue() const { return _value; } - double getDefaultValue() const { return _defaultValue; } double getMin() const { return _min; } double getMax() const { return _max; } double getStep() const { return _step; } @@ -156,8 +157,6 @@ namespace onelab{ setValue(p.getValue()); setChanged(true); } - if(p.getDefaultValue() && p.getDefaultValue() != getDefaultValue()) - setDefaultValue(p.getDefaultValue()); if(p.getMin() != -maxNumber()) setMin(p.getMin()); if(p.getMax() != maxNumber()) @@ -169,8 +168,8 @@ namespace onelab{ { std::ostringstream sstream; sstream << parameter::toChar() << charSep() << _value << charSep() - << _defaultValue << charSep() << _min << charSep() << _max - << charSep() << _step << charSep() << _choices.size() << charSep(); + << _min << charSep() << _max << charSep() << _step << charSep() + << _choices.size() << charSep(); for(unsigned int i = 0; i < _choices.size(); i++) sstream << _choices[i] << charSep(); sstream << getClients().size() << charSep(); @@ -188,7 +187,6 @@ namespace onelab{ setHelp(getNextToken(msg, pos)); setVisible(atoi(getNextToken(msg, pos).c_str())); setValue(atof(getNextToken(msg, pos).c_str())); - setDefaultValue(atof(getNextToken(msg, pos).c_str())); setMin(atof(getNextToken(msg, pos).c_str())); setMax(atof(getNextToken(msg, pos).c_str())); setStep(atof(getNextToken(msg, pos).c_str())); @@ -198,23 +196,26 @@ namespace onelab{ } }; - // The string class. + // The string class. A string has a mutable "type": we do not derive + // specialized classes, because the type should be changeable at + // runtime (e.g. from client-dependent function to onelab-function + // to table of values) class string : public parameter{ private: std::string _value; - std::string _defaultValue; std::vector<std::string> _choices; + // FIXME add a "type" to interpret the string: file name, + // comma-separated values for a list, hostname, table of numbers, + // client-dependent mathematical expression ("3 sin(X[])"), + // onlab-expression (through mathex?), ... public: - string(const std::string &name="", const std::string &defaultValue="", + string(const std::string &name="", const std::string &value="", const std::string &shortHelp="", const std::string &help="") - : parameter(name, shortHelp, help), _value(defaultValue), - _defaultValue(defaultValue) {} + : parameter(name, shortHelp, help), _value(value) {} void setValue(const std::string &value){ _value = value; } - void setDefaultValue(const std::string &value){ _defaultValue = value; } void setChoices(const std::vector<std::string> &choices){ _choices = choices; } std::string getType() const { return "string"; } const std::string &getValue() const { return _value; } - const std::string &getDefaultValue() const { return _defaultValue; } const std::vector<std::string> &getChoices() const { return _choices; } void update(const string &p) { @@ -222,8 +223,6 @@ namespace onelab{ setValue(p.getValue()); setChanged(true); } - if(p.getDefaultValue().size() && p.getDefaultValue() != getDefaultValue()) - setDefaultValue(p.getDefaultValue()); if(p.getChoices().size()) setChoices(p.getChoices()); } @@ -231,7 +230,7 @@ namespace onelab{ { std::ostringstream sstream; sstream << parameter::toChar() << charSep() << sanitize(_value) << charSep() - << sanitize(_defaultValue) << charSep() << _choices.size() << charSep(); + << _choices.size() << charSep(); for(unsigned int i = 0; i < _choices.size(); i++) sstream << sanitize(_choices[i]) << charSep(); sstream << getClients().size() << charSep(); @@ -249,27 +248,26 @@ namespace onelab{ setHelp(getNextToken(msg, pos)); setVisible(atoi(getNextToken(msg, pos).c_str())); setValue(getNextToken(msg, pos)); - setDefaultValue(getNextToken(msg, pos)); _choices.resize(atoi(getNextToken(msg, pos).c_str())); for(unsigned int i = 0; i < _choices.size(); i++) _choices[i] = getNextToken(msg, pos); } }; - // The region class. A region can be any kind of geometrical entity. + // The region class. A region can be any kind of geometrical entity, + // represented as identifiers of physical regions. Operations on + // regions will include union, intersection, etc. class region : public parameter{ private: - std::string _value, _defaultValue; + std::string _value; // FIXME: change this into std::set<std::string> std::vector<std::string> _choices; public: - region(const std::string &name="", const std::string &defaultValue="", + region(const std::string &name="", const std::string &value="", const std::string &shortHelp="", const std::string &help="") - : parameter(name, shortHelp, help), _value(defaultValue), - _defaultValue(defaultValue) {} + : parameter(name, shortHelp, help), _value(value) {} void setValue(const std::string &value){ _value = value; } std::string getType() const { return "region"; } const std::string &getValue() const { return _value; } - const std::string &getDefaultValue() const { return _defaultValue; } void update(const region &p) { if(p.getValue() != getValue()){ @@ -281,7 +279,7 @@ namespace onelab{ { std::ostringstream sstream; sstream << parameter::toChar() << charSep() << _value << charSep() - << _defaultValue << charSep() << _choices.size() << charSep(); + << _choices.size() << charSep(); for(unsigned int i = 0; i < _choices.size(); i++) sstream << _choices[i] << charSep(); sstream << getClients().size() << charSep(); @@ -293,19 +291,20 @@ namespace onelab{ }; // The (possibly piece-wise defined on regions) function - // class. Currently functions are entirely client-dependent: they - // are just represented internally as strings. Again, we might want - // to specialize in the future to make the interface more refined. + // class. Functions are entirely client-dependent: they are just + // represented internally as onelab strings, defined on onelab + // regions. class function : public parameter{ private: - std::string _value, _defaultValue; + // Change this to onelab::string + std::string _value; + // Change this into std::map<onelab::region, onelab::string> std::map<std::string, std::string> _pieceWiseValues; std::vector<std::string> _choices; public: - function(const std::string &name="", const std::string &defaultValue="", + function(const std::string &name="", const std::string &value="", const std::string &shortHelp="", const std::string &help="") - : parameter(name, shortHelp, help), _value(defaultValue), - _defaultValue(defaultValue) {} + : parameter(name, shortHelp, help), _value(value) {} void setValue(const std::string &value, const std::string ®ion="") { if(region.empty()) @@ -328,7 +327,6 @@ namespace onelab{ { return _pieceWiseValues; } - const std::string &getDefaultValue() const { return _defaultValue; } void update(const function &p) { if(p.getValue() != getValue()){ @@ -340,7 +338,6 @@ namespace onelab{ { std::ostringstream sstream; sstream << parameter::toChar() << charSep() << sanitize(_value) << charSep() - << sanitize(_defaultValue) << charSep() << _pieceWiseValues.size() << charSep(); for(std::map<std::string, std::string>::const_iterator it = _pieceWiseValues.begin(); it != _pieceWiseValues.end(); it++) -- GitLab