diff --git a/Common/onelab.h b/Common/onelab.h index 1aa1b245568f77c731d55732e662a39660c24c5f..c655fcc419af3dede1b6dc53b256c49aad3495dd 100644 --- a/Common/onelab.h +++ b/Common/onelab.h @@ -324,17 +324,17 @@ namespace onelab{ std::set<region*, parameterLessThan> _regions; std::set<function*, parameterLessThan> _functions; // set a parameter in the parameter space; if it already exists, - // add new clients if necessary. This needs to be locked to avoid - // race conditions when several clients try to set a parameter at - // the same time + // add new clients if necessary, and (optinally) update its value. + // This needs to be locked to avoid race conditions when several + // clients try to set a parameter at the same time template <class T> bool _set(T &p, std::set<T*, parameterLessThan> &ps, - bool value=true) + bool update=true) { typename std::set<T*, parameterLessThan>::iterator it = ps.find(&p); if(it != ps.end()){ std::set<std::string> clients = p.getClients(); (*it)->addClients(clients); - if(value && p.getValue() != (*it)->getValue()){ + if(update && p.getValue() != (*it)->getValue()){ (*it)->setValue(p.getValue()); (*it)->setChanged(true); } @@ -390,10 +390,10 @@ namespace onelab{ _regions.clear(); _functions.clear(); } - bool set(number &p, bool value=true){ return _set(p, _numbers, value); } - bool set(string &p, bool value=true){ return _set(p, _strings, value); } - bool set(region &p, bool value=true){ return _set(p, _regions, value); } - bool set(function &p, bool value=true){ return _set(p, _functions, value); } + bool set(number &p, bool update=true){ return _set(p, _numbers, update); } + bool set(string &p, bool update=true){ return _set(p, _strings, update); } + bool set(region &p, bool update=true){ return _set(p, _regions, update); } + bool set(function &p, bool update=true){ return _set(p, _functions, update); } bool get(std::vector<number> &ps, const std::string &name="", const std::string &client=""){ return _get(ps, name, client, _numbers); } bool get(std::vector<string> &ps, const std::string &name="", @@ -402,6 +402,7 @@ namespace onelab{ const std::string &client=""){ return _get(ps, name, client, _regions); } bool get(std::vector<function> &ps, const std::string &name="", const std::string &client=""){ return _get(ps, name, client, _functions); } + // check if at least one parameter depends on the given client bool hasClient(const std::string &client) { std::set<parameter*> ps; @@ -422,7 +423,7 @@ namespace onelab{ } return false; } - // set all parameters as unchanged (optionnally only affect those + // set the changed flag for all parameters (optionnally only affect those // parameters that depend on a given client) bool setChanged(bool changed, const std::string &client="") { @@ -432,6 +433,8 @@ namespace onelab{ if(client.empty() || (*it)->hasClient(client)) (*it)->setChanged(changed); } + // print the parameter space (optinally only print those + // parameters that depend on the given client) std::string toChar(const std::string &client="") { std::string s; @@ -471,10 +474,10 @@ namespace onelab{ virtual void sendMergeFileRequest(const std::string &msg){} virtual void sendParseStringRequest(const std::string &msg){} virtual void sendVertexArray(const std::string &msg){} - virtual bool set(number &p, bool value=true) = 0; - virtual bool set(string &p, bool value=true) = 0; - virtual bool set(region &p, bool value=true) = 0; - virtual bool set(function &p, bool value=true) = 0; + virtual bool set(number &p, bool update=true) = 0; + virtual bool set(string &p, bool update=true) = 0; + virtual bool set(region &p, bool update=true) = 0; + virtual bool set(function &p, bool update=true) = 0; virtual bool get(std::vector<number> &ps, const std::string &name="") = 0; virtual bool get(std::vector<string> &ps, const std::string &name="") = 0; virtual bool get(std::vector<region> &ps, const std::string &name="") = 0; @@ -502,9 +505,9 @@ namespace onelab{ return _server; } void clear(){ _parameterSpace.clear(); } - template <class T> bool set(T &p, bool value=true) + template <class T> bool set(T &p, bool update=true) { - return _parameterSpace.set(p, value); + return _parameterSpace.set(p, update); } template <class T> bool get(std::vector<T> &ps, const std::string &name="", const std::string &client="") @@ -541,10 +544,10 @@ namespace onelab{ private: // the pointer to the server server *_server; - template <class T> bool _set(T &p, bool value=true) + template <class T> bool _set(T &p, bool update=true) { p.addClient(_name); - _server->set(p, value); + _server->set(p, update); return true; } template <class T> bool _get(std::vector<T> &ps, @@ -560,10 +563,10 @@ namespace onelab{ _server->registerClient(this); } virtual ~localClient(){} - virtual bool set(number &p, bool value=true){ return _set(p, value); } - virtual bool set(string &p, bool value=true){ return _set(p, value); } - virtual bool set(function &p, bool value=true){ return _set(p, value); } - virtual bool set(region &p, bool value=true){ return _set(p, value); } + virtual bool set(number &p, bool update=true){ return _set(p, update); } + virtual bool set(string &p, bool update=true){ return _set(p, update); } + virtual bool set(function &p, bool update=true){ return _set(p, update); } + virtual bool set(region &p, bool update=true){ return _set(p, update); } virtual bool get(std::vector<number> &ps, const std::string &name=""){ return _get(ps, name); } virtual bool get(std::vector<string> &ps, @@ -687,10 +690,10 @@ namespace onelab{ } GmshClient *getGmshClient(){ return _gmshClient; } virtual bool isNetworkClient(){ return true; } - virtual bool set(number &p, bool value=true){ return _set(p); } - virtual bool set(string &p, bool value=true){ return _set(p); } - virtual bool set(function &p, bool value=true){ return _set(p); } - virtual bool set(region &p, bool value=true){ return _set(p); } + virtual bool set(number &p, bool update=true){ return _set(p); } + virtual bool set(string &p, bool update=true){ return _set(p); } + virtual bool set(function &p, bool update=true){ return _set(p); } + virtual bool set(region &p, bool update=true){ return _set(p); } virtual bool get(std::vector<number> &ps, const std::string &name=""){ return _get(ps, name); } virtual bool get(std::vector<string> &ps,