getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r5197 - /trunk/getfem/src/dal_static_stored_objects.cc


From: Yves . Renard
Subject: [Getfem-commits] r5197 - /trunk/getfem/src/dal_static_stored_objects.cc
Date: Thu, 17 Dec 2015 13:19:11 -0000

Author: renard
Date: Thu Dec 17 14:19:10 2015
New Revision: 5197

URL: http://svn.gna.org/viewcvs/getfem?rev=5197&view=rev
Log:
small fix

Modified:
    trunk/getfem/src/dal_static_stored_objects.cc

Modified: trunk/getfem/src/dal_static_stored_objects.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/dal_static_stored_objects.cc?rev=5197&r1=5196&r2=5197&view=diff
==============================================================================
--- trunk/getfem/src/dal_static_stored_objects.cc       (original)
+++ trunk/getfem/src/dal_static_stored_objects.cc       Thu Dec 17 14:19:10 2015
@@ -31,10 +31,10 @@
 
 namespace dal {
 
-  // 0 = only undestroyed, 1 = Normal, 2 very noisy, 
+  // 0 = only undestroyed, 1 =  Normal, 2 very noisy, 
 #define DAL_STORED_OBJECT_DEBUG_NOISY 2
 
-static bool dal_static_stored_tab_valid__ = true;
+static bool dal_static_stored_tab_valid__ = false;
   
 #if DAL_STORED_OBJECT_DEBUG
   static std::map <const static_stored_object *, std::string> _created_objects;
@@ -142,9 +142,9 @@
   // a specific thread
   pstatic_stored_object_key key_of_stored_object(pstatic_stored_object o, 
size_t thread) 
   {
-    GMM_ASSERT1(dal_static_stored_tab_valid__, "Too late to do that");
     stored_object_tab::stored_key_tab& stored_keys 
       = dal::singleton<stored_object_tab>::instance(thread).stored_keys_;
+    GMM_ASSERT1(dal_static_stored_tab_valid__, "Too late to do that");
     stored_object_tab::stored_key_tab::iterator it = stored_keys.find(o);
     if (it != stored_keys.end()) return it->second;
     return 0;
@@ -153,7 +153,6 @@
   // gives a key of the stored object while looking in the storage of other 
threads
   pstatic_stored_object_key 
key_of_stored_object_other_threads(pstatic_stored_object o) 
   {
-    GMM_ASSERT1(dal_static_stored_tab_valid__, "Too late to do that");
     for(size_t thread = 0; thread<getfem::num_threads();thread++)
     {
       if (thread == this_thread()) continue;
@@ -165,180 +164,40 @@
 
   pstatic_stored_object_key key_of_stored_object(pstatic_stored_object o) 
   {
-    if (dal_static_stored_tab_valid__) {
     pstatic_stored_object_key key = key_of_stored_object(o,this_thread());
     if (key) return key;
     else return (num_threads() > 1) ? key_of_stored_object_other_threads(o) : 
0;
-    }
     return 0;
   }
 
   bool exists_stored_object(pstatic_stored_object o) 
   {
-    if (dal_static_stored_tab_valid__) {
     stored_object_tab::stored_key_tab& stored_keys 
        = dal::singleton<stored_object_tab>::instance().stored_keys_;
-    return  (stored_keys.find(o) != stored_keys.end());
+    if (dal_static_stored_tab_valid__) {
+      return  (stored_keys.find(o) != stored_keys.end());
     }
     return false;
   }
 
-
-
-/**
-  STATIC_STORED_TAB -------------------------------------------------------
-*/
-  stored_object_tab::stored_object_tab() 
-    : std::map<enr_static_stored_object_key, enr_static_stored_object>(),
-    locks_(),
-    stored_keys_()
-  { }
-
-  stored_object_tab::~stored_object_tab() {
-    dal_static_stored_tab_valid__ = false;
-  }
-
-  pstatic_stored_object stored_object_tab::
-    search_stored_object(pstatic_stored_object_key k) const
-  {
-   getfem::local_guard guard = locks_.get_lock();
-   stored_object_tab::const_iterator it=find(enr_static_stored_object_key(k));
-   return (it != end()) ? it->second.p : 0;
-  }
-
-  bool stored_object_tab::add_dependency_(pstatic_stored_object o1,
-    pstatic_stored_object o2)
-  {
-    getfem::local_guard guard = locks_.get_lock();
-    stored_key_tab::const_iterator it = stored_keys_.find(o1);
-    if (it == stored_keys_.end()) return false;
-    iterator ito1 = find(it->second);
-    GMM_ASSERT1(ito1 != end(), "Object has a key, but cannot be found");
-    ito1->second.dependencies.insert(o2);
-    return true;
-  }
-
-  void stored_object_tab::add_stored_object(pstatic_stored_object_key k, 
-    pstatic_stored_object o,  permanence perm) 
-  {
-    DAL_STORED_OBJECT_DEBUG_ADDED(o.get());
-    getfem::local_guard guard = locks_.get_lock();
-    GMM_ASSERT1(stored_keys_.find(o) == stored_keys_.end(),
-      "This object has already been stored, possibly with another key");
-    stored_keys_[o] = k;
-    insert(std::make_pair(enr_static_stored_object_key(k),
-                          enr_static_stored_object(o, perm)));
-    size_t t = this_thread();
-    GMM_ASSERT2(stored_keys_.size() == size() && t != size_t(-1), 
-      "stored_keys are not consistent with stored_object tab");
-  }
-
-  bool stored_object_tab::add_dependent_(pstatic_stored_object o1,
-    pstatic_stored_object o2)
-  {
-    getfem::local_guard guard = locks_.get_lock();
-    stored_key_tab::const_iterator it = stored_keys_.find(o2);
-    if (it == stored_keys_.end()) return false;
-    iterator ito2 = find(it->second);
-    GMM_ASSERT1(ito2 != end(), "Object has a key, but cannot be found");
-    ito2->second.dependent_object.insert(o1);
-    return true;
-  }
-
-  bool stored_object_tab::del_dependency_(pstatic_stored_object o1,
-    pstatic_stored_object o2)
-  {
-    getfem::local_guard guard = locks_.get_lock();
-    stored_key_tab::const_iterator it1 = stored_keys_.find(o1);
-    if (it1 == stored_keys_.end()) return false;
-    iterator ito1 = find(it1->second);
-    GMM_ASSERT1(ito1 != end(), "Object has a key, but cannot be found");
-    ito1->second.dependencies.erase(o2);
-    return true;
-  }
-
-  stored_object_tab::iterator 
stored_object_tab::iterator_of_object_(pstatic_stored_object o)
-  {
-    stored_key_tab::const_iterator itk = stored_keys_.find(o);
-    if (itk == stored_keys_.end()) return end();
-    iterator ito = find(itk->second);
-    GMM_ASSERT1(ito != end(), "Object has a key, but is not stored");
-    return ito;
-  }
-
-  bool stored_object_tab::del_dependent_(pstatic_stored_object o1,
-    pstatic_stored_object o2)
-  {
-    getfem::local_guard guard = locks_.get_lock();
-    stored_key_tab::const_iterator it2 = stored_keys_.find(o2);
-    if (it2 == stored_keys_.end()) return false;
-    iterator ito2 = find(it2->second);
-    GMM_ASSERT1(ito2 != end(), "Object has a key, but cannot be found");
-    ito2->second.dependent_object.erase(o1);
-    return true;
-  }
-
-  bool stored_object_tab::exists_stored_object(pstatic_stored_object o) const
-  {
-    getfem::local_guard guard = locks_.get_lock();
-    return (stored_keys_.find(o) != stored_keys_.end());
-  }
-
-  bool stored_object_tab::has_dependent_objects(pstatic_stored_object o) const
-  {
-    getfem::local_guard guard = locks_.get_lock();
-     stored_key_tab::const_iterator it = stored_keys_.find(o);
-    GMM_ASSERT1(it != stored_keys_.end(), "Object is not stored");
-    const_iterator ito = find(it->second);
-    GMM_ASSERT1(ito != end(), "Object has a key, but cannot be found");
-    return ito->second.dependent_object.empty();
-  }
-
-
-
-  void stored_object_tab::basic_delete_(std::list<pstatic_stored_object> 
&to_delete)
-  {
-    getfem::local_guard guard = locks_.get_lock();
-    std::list<pstatic_stored_object>::iterator it;
-    for (it = to_delete.begin(); it != to_delete.end(); ) 
-    {
-      DAL_STORED_OBJECT_DEBUG_DELETED(it->get());
-      stored_key_tab::iterator itk = stored_keys_.find(*it);
-      stored_object_tab::iterator ito = end();
-      if (itk != stored_keys_.end())
-      {
-          ito = find(itk->second);
-          stored_keys_.erase(itk);
-      }
-      if (ito != end()) 
-      {
-        erase(ito);
-        it = to_delete.erase(it);
-      } else {
-        ++it;
-      }
-    }
-  }
-
-
   pstatic_stored_object search_stored_object(pstatic_stored_object_key k) 
   {
-    if (dal_static_stored_tab_valid__) {
     stored_object_tab& stored_objects
         = dal::singleton<stored_object_tab>::instance();
-    pstatic_stored_object p = stored_objects.search_stored_object(k);
-    if (p) return p;
+    if (dal_static_stored_tab_valid__) {
+      pstatic_stored_object p = stored_objects.search_stored_object(k);
+      if (p) return p;
     }
     return 0;
   }
 
   stored_object_tab::iterator iterator_of_object(pstatic_stored_object o)
   {
-    GMM_ASSERT1(dal_static_stored_tab_valid__, "Too late to do that");
     for(size_t thread=0; thread < num_threads(); ++thread)
     {
       stored_object_tab& stored_objects
         = dal::singleton<stored_object_tab>::instance(thread);
+      if (!dal_static_stored_tab_valid__) continue;
       stored_object_tab::iterator it = stored_objects.iterator_of_object_(o);
       if (it != stored_objects.end()) return it;
     }
@@ -348,11 +207,11 @@
 
   void test_stored_objects(void) 
   {
-    if (dal_static_stored_tab_valid__) {
     for(size_t thread = 0; thread < num_threads(); ++thread)
     {
       stored_object_tab& stored_objects 
         = dal::singleton<stored_object_tab>::instance(thread);
+      if (!dal_static_stored_tab_valid__) continue;
       stored_object_tab::stored_key_tab& stored_keys = 
stored_objects.stored_keys_;
 
       GMM_ASSERT1(stored_objects.size() == stored_keys.size(), 
@@ -369,17 +228,16 @@
         GMM_ASSERT1(iterator_of_object(it->second.p) != stored_objects.end(),
         "Object has key but cannot be found");
     }
-    }
   }
 
   void add_dependency(pstatic_stored_object o1,
     pstatic_stored_object o2) {
-    GMM_ASSERT1(dal_static_stored_tab_valid__, "Too late to add a dependency");
     bool dep_added = false;
     for(size_t thread=0; thread < num_threads(); ++thread)
     {
       stored_object_tab& stored_objects
           = dal::singleton<stored_object_tab>::instance(thread);
+      if (!dal_static_stored_tab_valid__) return;
       if ((dep_added = stored_objects.add_dependency_(o1,o2))) break;
     }
     GMM_ASSERT1(dep_added, "Failed to add dependency between " << o1
@@ -405,12 +263,12 @@
   bool del_dependency(pstatic_stored_object o1,
     pstatic_stored_object o2) 
   {
-    if (dal_static_stored_tab_valid__) {
     bool dep_deleted = false;
     for(size_t thread=0; thread < num_threads(); ++thread)
     {
       stored_object_tab& stored_objects
           = dal::singleton<stored_object_tab>::instance(thread);
+      if (!dal_static_stored_tab_valid__) return false;
       if ((dep_deleted = stored_objects.del_dependency_(o1,o2))) break;
     }
     GMM_ASSERT1(dep_deleted, "Failed to delete dependency between " << o1 << " 
of type "
@@ -433,21 +291,24 @@
     << typeid(*o1).name() << " and " << o2 << " of type "  << 
typeid(*o2).name() << ". ");
 
     return dependent_empty;
-    }
-    return false;
   }
 
 
   void add_stored_object(pstatic_stored_object_key k, pstatic_stored_object o,
                         permanence perm) {
     GMM_ASSERT1(dal_static_stored_tab_valid__, "Too late to add an object");
-    dal::singleton<stored_object_tab>::instance().add_stored_object(k,o,perm);
+    stored_object_tab& stored_objects
+      = dal::singleton<stored_object_tab>::instance();
+    if (dal_static_stored_tab_valid__)
+      stored_objects.add_stored_object(k,o,perm);
   }
 
   void basic_delete(std::list<pstatic_stored_object> &to_delete) {
-    if (dal_static_stored_tab_valid__) {
     stored_object_tab& stored_objects_this_thread
       = dal::singleton<stored_object_tab>::instance();
+
+    if (dal_static_stored_tab_valid__) {
+
     stored_objects_this_thread.basic_delete_(to_delete);
     
     if (!to_delete.empty()) //need to delete from other threads
@@ -475,11 +336,13 @@
   void del_stored_objects(std::list<pstatic_stored_object> &to_delete,
     bool ignore_unstored) 
   {
-    if (dal_static_stored_tab_valid__) {
       getfem::omp_guard lock;
       GMM_NOPERATION(lock);
       stored_object_tab& stored_objects
         = dal::singleton<stored_object_tab>::instance();
+
+      if (dal_static_stored_tab_valid__) {
+
       std::list<pstatic_stored_object>::iterator it, itnext;
 
       for (it = to_delete.begin(); it != to_delete.end(); it = itnext) 
@@ -554,22 +417,20 @@
 
   void del_stored_object(const pstatic_stored_object &o, bool ignore_unstored) 
   {
-    if (dal_static_stored_tab_valid__) {
     std::list<pstatic_stored_object> to_delete;
     to_delete.push_back(o);
     del_stored_objects(to_delete, ignore_unstored);
-    }
   }
 
 
   void del_stored_objects(permanence perm) 
   {
-    if (dal_static_stored_tab_valid__) {
     std::list<pstatic_stored_object> to_delete;
     for(size_t thread=0; thread<getfem::num_threads();thread++)
     {
       stored_object_tab& stored_objects
         = dal::singleton<stored_object_tab>::instance(thread);
+      if (!dal_static_stored_tab_valid__) continue;
       if (perm == PERMANENT_STATIC_OBJECT) perm = STRONG_STATIC_OBJECT;
       stored_object_tab::iterator it;
       for (it = stored_objects.begin(); it != stored_objects.end(); ++it)
@@ -577,17 +438,15 @@
           to_delete.push_back(it->second.p);
     }
     del_stored_objects(to_delete, false);
-    }
   }
 
   void list_stored_objects(std::ostream &ost) 
   {
-    if (dal_static_stored_tab_valid__) {
     for(size_t thread=0; thread<getfem::num_threads();thread++)
     {
       stored_object_tab::stored_key_tab& stored_keys 
       = dal::singleton<stored_object_tab>::instance(thread).stored_keys_;
-
+      if (!dal_static_stored_tab_valid__) continue;
       if (stored_keys.begin() == stored_keys.end())
         ost << "No static stored objects" << endl;
       else ost << "Static stored objects" << endl;
@@ -598,22 +457,158 @@
             << typeid(*it->first).name() << endl;
       }
     }
-    }
   }
 
   size_t nb_stored_objects(void) 
   {
-    if (dal_static_stored_tab_valid__) {
     long num_objects=0;
     for(size_t thread=0;thread<getfem::num_threads(); ++thread)
     {
       stored_object_tab::stored_key_tab& stored_keys 
       = dal::singleton<stored_object_tab>::instance(thread).stored_keys_;
+      if (!dal_static_stored_tab_valid__) continue;
       num_objects+=stored_keys.size();
     }
     return num_objects;
-    }
-    return 0;
-  }
+  }
+
+
+
+
+/**
+  STATIC_STORED_TAB -------------------------------------------------------
+*/
+  stored_object_tab::stored_object_tab() 
+    : std::map<enr_static_stored_object_key, enr_static_stored_object>(),
+      locks_(), stored_keys_()
+  { dal_static_stored_tab_valid__ = true; }
+
+  stored_object_tab::~stored_object_tab()
+  { dal_static_stored_tab_valid__ = false; }
+
+  pstatic_stored_object stored_object_tab::
+    search_stored_object(pstatic_stored_object_key k) const
+  {
+   getfem::local_guard guard = locks_.get_lock();
+   stored_object_tab::const_iterator it=find(enr_static_stored_object_key(k));
+   return (it != end()) ? it->second.p : 0;
+  }
+
+  bool stored_object_tab::add_dependency_(pstatic_stored_object o1,
+    pstatic_stored_object o2)
+  {
+    getfem::local_guard guard = locks_.get_lock();
+    stored_key_tab::const_iterator it = stored_keys_.find(o1);
+    if (it == stored_keys_.end()) return false;
+    iterator ito1 = find(it->second);
+    GMM_ASSERT1(ito1 != end(), "Object has a key, but cannot be found");
+    ito1->second.dependencies.insert(o2);
+    return true;
+  }
+
+  void stored_object_tab::add_stored_object(pstatic_stored_object_key k, 
+    pstatic_stored_object o,  permanence perm) 
+  {
+    DAL_STORED_OBJECT_DEBUG_ADDED(o.get());
+    getfem::local_guard guard = locks_.get_lock();
+    GMM_ASSERT1(stored_keys_.find(o) == stored_keys_.end(),
+      "This object has already been stored, possibly with another key");
+    stored_keys_[o] = k;
+    insert(std::make_pair(enr_static_stored_object_key(k),
+                          enr_static_stored_object(o, perm)));
+    size_t t = this_thread();
+    GMM_ASSERT2(stored_keys_.size() == size() && t != size_t(-1), 
+      "stored_keys are not consistent with stored_object tab");
+  }
+
+  bool stored_object_tab::add_dependent_(pstatic_stored_object o1,
+    pstatic_stored_object o2)
+  {
+    getfem::local_guard guard = locks_.get_lock();
+    stored_key_tab::const_iterator it = stored_keys_.find(o2);
+    if (it == stored_keys_.end()) return false;
+    iterator ito2 = find(it->second);
+    GMM_ASSERT1(ito2 != end(), "Object has a key, but cannot be found");
+    ito2->second.dependent_object.insert(o1);
+    return true;
+  }
+
+  bool stored_object_tab::del_dependency_(pstatic_stored_object o1,
+    pstatic_stored_object o2)
+  {
+    getfem::local_guard guard = locks_.get_lock();
+    stored_key_tab::const_iterator it1 = stored_keys_.find(o1);
+    if (it1 == stored_keys_.end()) return false;
+    iterator ito1 = find(it1->second);
+    GMM_ASSERT1(ito1 != end(), "Object has a key, but cannot be found");
+    ito1->second.dependencies.erase(o2);
+    return true;
+  }
+
+  stored_object_tab::iterator 
stored_object_tab::iterator_of_object_(pstatic_stored_object o)
+  {
+    stored_key_tab::const_iterator itk = stored_keys_.find(o);
+    if (itk == stored_keys_.end()) return end();
+    iterator ito = find(itk->second);
+    GMM_ASSERT1(ito != end(), "Object has a key, but is not stored");
+    return ito;
+  }
+
+  bool stored_object_tab::del_dependent_(pstatic_stored_object o1,
+    pstatic_stored_object o2)
+  {
+    getfem::local_guard guard = locks_.get_lock();
+    stored_key_tab::const_iterator it2 = stored_keys_.find(o2);
+    if (it2 == stored_keys_.end()) return false;
+    iterator ito2 = find(it2->second);
+    GMM_ASSERT1(ito2 != end(), "Object has a key, but cannot be found");
+    ito2->second.dependent_object.erase(o1);
+    return true;
+  }
+
+  bool stored_object_tab::exists_stored_object(pstatic_stored_object o) const
+  {
+    getfem::local_guard guard = locks_.get_lock();
+    return (stored_keys_.find(o) != stored_keys_.end());
+  }
+
+  bool stored_object_tab::has_dependent_objects(pstatic_stored_object o) const
+  {
+    getfem::local_guard guard = locks_.get_lock();
+     stored_key_tab::const_iterator it = stored_keys_.find(o);
+    GMM_ASSERT1(it != stored_keys_.end(), "Object is not stored");
+    const_iterator ito = find(it->second);
+    GMM_ASSERT1(ito != end(), "Object has a key, but cannot be found");
+    return ito->second.dependent_object.empty();
+  }
+
+
+
+  void stored_object_tab::basic_delete_
+  (std::list<pstatic_stored_object> &to_delete)
+  {
+    getfem::local_guard guard = locks_.get_lock();
+    std::list<pstatic_stored_object>::iterator it;
+    for (it = to_delete.begin(); it != to_delete.end(); ) 
+    {
+      DAL_STORED_OBJECT_DEBUG_DELETED(it->get());
+      stored_key_tab::iterator itk = stored_keys_.find(*it);
+      stored_object_tab::iterator ito = end();
+      if (itk != stored_keys_.end())
+      {
+          ito = find(itk->second);
+          stored_keys_.erase(itk);
+      }
+      if (ito != end()) 
+      {
+        erase(ito);
+        it = to_delete.erase(it);
+      } else {
+        ++it;
+      }
+    }
+  }
+
+
 
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]