[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. */
- [Getfem-commits] [getfem-commits] branch comparing_stored_objects_by_key created (now 7e0a80a), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject), Andriy Andreykiv, 2018/07/30
- [Getfem-commits] (no subject),
Andriy Andreykiv <=