getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] (no subject)


From: Andriy Andreykiv
Subject: [Getfem-commits] (no subject)
Date: Mon, 30 Jul 2018 21:54:36 -0400 (EDT)

branch: comparing_stored_objects_by_key
commit cf721e171830caa9edc2d7c73495dbb6e69b9268
Author: aa <address@hidden>
Date:   Tue Jul 31 03:50:36 2018 +0200

    more overloads for equal of static_stored_object_key
---
 src/bgeot_convex_structure.cc | 10 +++++++++-
 src/getfem_mat_elem.cc        | 27 ++++++++++++++++++++++-----
 src/getfem_mat_elem_type.cc   | 25 +++++++++++++++++++++----
 3 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/src/bgeot_convex_structure.cc b/src/bgeot_convex_structure.cc
index 98b7417..fe927e9 100644
--- a/src/bgeot_convex_structure.cc
+++ b/src/bgeot_convex_structure.cc
@@ -83,7 +83,7 @@ namespace bgeot {
               // 2 = dummy (N = dimension, K = nbpt)
     dim_type N; short_type K; short_type nf;
   public :
-    virtual bool compare(const static_stored_object_key &oo) const {
+    bool compare(const static_stored_object_key &oo) const override{
       const convex_structure_key &o
         = dynamic_cast<const convex_structure_key &>(oo);
       if (type < o.type) return true;
@@ -95,6 +95,14 @@ namespace bgeot {
       if (nf < o.nf) return true;
       return false;
     }
+    bool equal(const static_stored_object_key &oo) const override{
+      auto &o = dynamic_cast<const convex_structure_key &>(oo);
+      if (type != o.type) return false;
+      if (N != o.N) return false;
+      if (K != o.K) return false;
+      if (nf != o.nf) return false;
+      return true;
+    }
     convex_structure_key(int t, dim_type NN, short_type KK = 0,
                          short_type nnf = 0)
       : type(t), N(NN), K(KK), nf(nnf)  {}
diff --git a/src/getfem_mat_elem.cc b/src/getfem_mat_elem.cc
index ae7f3f7..9c5ea77 100644
--- a/src/getfem_mat_elem.cc
+++ b/src/getfem_mat_elem.cc
@@ -39,17 +39,34 @@ namespace getfem {
        element if possible (i.e. if no exact integration is used); this allow
        using inline reduction during the integration */
     bool prefer_comp_on_real_element;
-    virtual bool compare(const static_stored_object_key &oo) const {
-      const emelem_comp_key_ &o = dynamic_cast<const emelem_comp_key_ &>(oo);
+    bool compare(const static_stored_object_key &oo) const override{
+      auto &o = dynamic_cast<const emelem_comp_key_ &>(oo);
       if (pmt < o.pmt) return true;
       if (o.pmt < pmt) return false;
       if (ppi < o.ppi) return true;
       if (o.ppi < ppi) return false;
       if (pgt < o.pgt) return true;
       if (o.pgt < pgt) return false;
-      if (prefer_comp_on_real_element < o.prefer_comp_on_real_element)
-        return true;
-      return false;
+      return prefer_comp_on_real_element < o.prefer_comp_on_real_element;
+    }
+    bool equal(const static_stored_object_key &oo) const override{
+      auto &o = dynamic_cast<const emelem_comp_key_ &>(oo);
+
+      if (pmt == o.pmt && ppi == o.ppi && pgt == o.pgt) return true;
+
+      auto pmat_key = dal::key_of_stored_object(pmt);
+      auto poo_mat_key = dal::key_of_stored_object(o.pmt);
+      if (*pmat_key != *poo_mat_key) return false;
+
+      auto pint_key = dal::key_of_stored_object(ppi);
+      auto poo_int_key = dal::key_of_stored_object(o.ppi);
+      if (*pint_key != *poo_int_key) return false;
+
+      auto pgt_key = dal::key_of_stored_object(pgt);
+      auto poo_gt_key = dal::key_of_stored_object(o.pgt);
+      if (*pgt_key != *poo_gt_key) return false;
+
+      return true;
     }
     emelem_comp_key_(pmat_elem_type pm, pintegration_method pi,
                        bgeot::pgeometric_trans pg, bool on_relt)
diff --git a/src/getfem_mat_elem_type.cc b/src/getfem_mat_elem_type.cc
index cced331..d166d03 100644
--- a/src/getfem_mat_elem_type.cc
+++ b/src/getfem_mat_elem_type.cc
@@ -39,16 +39,34 @@ namespace getfem {
     return false;
   }
 
+  bool operator == (const constituant &m, const constituant &n) {
+    if (&m == &n) return true;
+    if (m.t != n.t) return false;
+    if (m.t == GETFEM_NONLINEAR_) {
+      if (m.nlt != n.nlt) return false;
+      if (m.nl_part != n.nl_part) return false;
+     }
+    if (m.pfi == n.pfi) return true;
+    auto pmfi_key = dal::key_of_stored_object(m.pfi);
+    auto pnfi_key = dal::key_of_stored_object(n.pfi);
+    if (*pmfi_key != *pnfi_key) return false;
+
+    return true;
+  }
+
   struct mat_elem_type_key : virtual public dal::static_stored_object_key {
     const mat_elem_type *pmet;
   public :
-    virtual bool compare(const static_stored_object_key &oo) const {
-      const mat_elem_type_key &o
-        = dynamic_cast<const mat_elem_type_key &>(oo);
+    bool compare(const static_stored_object_key &oo) const override{
+      auto &o = dynamic_cast<const mat_elem_type_key &>(oo);
       if (gmm::lexicographical_less<mat_elem_type>()(*pmet, *(o.pmet)) < 0)
         return true;
       return false;
     }
+    bool equal(const static_stored_object_key &oo) const override{
+      auto &o = dynamic_cast<const mat_elem_type_key &>(oo);
+      return *o.pmet == *pmet;
+    }
     mat_elem_type_key(const mat_elem_type *p) : pmet(p) {}
   };
 
@@ -201,6 +219,5 @@ namespace getfem {
     return mii;
   }
 
-
 }  /* end of namespace getfem.                                            */
 



reply via email to

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