[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;
+ }
+ }
+ }
+
+
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5197 - /trunk/getfem/src/dal_static_stored_objects.cc,
Yves . Renard <=