]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
MEDCoupling has now a simple global map.
authorAnthony Geay <anthony.geay@edf.fr>
Fri, 6 May 2016 08:23:10 +0000 (10:23 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Fri, 6 May 2016 08:23:10 +0000 (10:23 +0200)
src/MEDCoupling/MEDCouplingRefCountObject.cxx
src/MEDCoupling/MEDCouplingRefCountObject.hxx
src/MEDCoupling_Swig/MEDCouplingRefCountObject.i

index 5eb43b9d1ea65f9f27094b1ed5a1afc3b7722600..c75f7934ad79213aabc0eb24fe86c403f470faec 100644 (file)
 #include "MEDCouplingRefCountObject.hxx"
 #include "MEDCoupling_version.h"
 
+#include "InterpKernelException.hxx"
+
 #include <sstream>
 #include <algorithm>
 
 using namespace MEDCoupling;
 
+GlobalDict *GlobalDict::UNIQUE_INSTANCE=0;
+
 const char *MEDCoupling::MEDCouplingVersionStr()
 {
   return MEDCOUPLING_VERSION_STR;
@@ -273,3 +277,82 @@ RefCountObject::RefCountObject(const RefCountObject& other):RefCountObjectOnly(o
 RefCountObject::~RefCountObject()
 {
 }
+
+//=
+
+GlobalDict *GlobalDict::GetInstance()
+{
+  if(!UNIQUE_INSTANCE)
+    UNIQUE_INSTANCE=new GlobalDict;
+  return UNIQUE_INSTANCE;
+}
+
+bool GlobalDict::hasKey(const std::string& key) const
+{
+  std::map<std::string, std::string>::const_iterator it(_my_map.find(key));
+  return it!=_my_map.end();
+}
+
+std::string GlobalDict::value(const std::string& key) const
+{
+  std::map<std::string, std::string>::const_iterator it(_my_map.find(key));
+  if(it==_my_map.end())
+    {
+      std::ostringstream oss;
+      oss << "GlobalDict::value : key \"" << key << "\" is not in map !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
+    }
+  return (*it).second;
+}
+
+std::vector<std::string> GlobalDict::keys() const
+{
+  std::vector<std::string> ret;
+  for(std::map<std::string, std::string>::const_iterator it=_my_map.begin();it!=_my_map.end();it++)
+    ret.push_back((*it).first);
+  return ret;
+}
+
+void GlobalDict::erase(const std::string& key)
+{
+  std::map<std::string, std::string>::iterator it(_my_map.find(key));
+  if(it==_my_map.end())
+    {
+      std::ostringstream oss;
+      oss << "GlobalDict::erase : key \"" << key << "\" is not in map !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
+    }
+  _my_map.erase(it);
+}
+
+void GlobalDict::clear()
+{
+  _my_map.clear();
+}
+
+void GlobalDict::setKeyValue(const std::string& key, const std::string& value)
+{
+  std::map<std::string, std::string>::const_iterator it(_my_map.find(key));
+  if(it!=_my_map.end())
+    {
+      std::ostringstream oss;
+      oss << "GlobalDict::setKeyValue : key \"" << key << "\" already exists !";
+      throw INTERP_KERNEL::Exception(oss.str().c_str());
+    }
+  _my_map[key]=value;
+}
+
+void GlobalDict::setKeyValueForce(const std::string& key, const std::string& value)
+{
+  _my_map[key]=value;
+}
+
+std::string GlobalDict::printSelf() const
+{
+  std::ostringstream oss;
+  for(std::map<std::string, std::string>::const_iterator it=_my_map.begin();it!=_my_map.end();it++)
+    {
+      oss << "(" << (*it).first << "," << (*it).second << ")" << std::endl;
+    }
+  return oss.str();
+}
index bba58608c6ad5299f748d56a58082a2b1ea7b917..5130f1a2f00f8eb3b5c205d5eb06a186d2ba6b60 100644 (file)
@@ -24,6 +24,7 @@
 #include "MEDCoupling.hxx"
 
 #include <set>
+#include <map>
 #include <vector>
 #include <string>
 #include <cstddef>
@@ -103,6 +104,26 @@ namespace MEDCoupling
     MEDCOUPLING_EXPORT RefCountObject(const RefCountObject& other);
     MEDCOUPLING_EXPORT virtual ~RefCountObject();
   };
+
+  class GlobalDict
+  {
+  public:
+    MEDCOUPLING_EXPORT static GlobalDict *GetInstance();
+    MEDCOUPLING_EXPORT bool hasKey(const std::string& key) const;
+    MEDCOUPLING_EXPORT std::string value(const std::string& key) const;
+    MEDCOUPLING_EXPORT std::vector<std::string> keys() const;
+    MEDCOUPLING_EXPORT void erase(const std::string& key);
+    MEDCOUPLING_EXPORT void clear();
+    MEDCOUPLING_EXPORT void setKeyValue(const std::string& key, const std::string& value);
+    MEDCOUPLING_EXPORT void setKeyValueForce(const std::string& key, const std::string& value);
+    MEDCOUPLING_EXPORT std::string printSelf() const;
+  private:
+    GlobalDict() { }
+  private:
+    static GlobalDict *UNIQUE_INSTANCE;
+  private:
+    std::map<std::string, std::string> _my_map;
+  };
 }
 
 #endif
index aa8c5d9c96b66e1b7eae17b2d2c5fdcb6a4aef38..fa29e6032415beaf0db0e8e00c0dbb70bf39c175 100644 (file)
@@ -115,6 +115,29 @@ namespace MEDCoupling
   protected:
     ~RefCountObject();
   };
+
+  class GlobalDict
+  {
+  public:
+    static GlobalDict *GetInstance() throw(INTERP_KERNEL::Exception);
+    bool hasKey(const std::string& key) const throw(INTERP_KERNEL::Exception);
+    std::string value(const std::string& key) const throw(INTERP_KERNEL::Exception);
+    std::vector<std::string> keys() const throw(INTERP_KERNEL::Exception);
+    void erase(const std::string& key) throw(INTERP_KERNEL::Exception);
+    void clear() throw(INTERP_KERNEL::Exception);
+    void setKeyValue(const std::string& key, const std::string& value) throw(INTERP_KERNEL::Exception);
+    void setKeyValueForce(const std::string& key, const std::string& value) throw(INTERP_KERNEL::Exception);
+  private:
+    GlobalDict();
+  public:
+    %extend
+    {
+      std::string __str__() const
+      {
+        return self->printSelf();
+      }
+    }
+  };
 }
 
 %inline