Loading TemplateTest/main.cpp +253 −20 Original line number Original line Diff line number Diff line Loading @@ -812,6 +812,157 @@ void testOperator() { #include <chrono> #include <chrono> template<typename Class, typename ValueType, typename Ref> class TestMemberReference{ TestMemberReference(Ref){} }; template <typename Class, typename ValueType> class TestMemberReference<Class, ValueType, ValueType Class::*> : MemberApproach<Class, ValueType>{ using refType = ValueType Class::*; public: refType const ref; public: TestMemberReference(refType referenceToMember) : ref(referenceToMember){ //ref = referenceToMember; } inline ValueType getValue(const Class* c) const { return c->*ref; } inline void setValue(Class* c, const ValueType& val) const { c->*ref = val; } inline ValueType getValue(const Class& c) const { return c.*ref; } inline void setValue(Class& c, const ValueType& val) const { c.*ref = val; } }; template<typename Class, typename...RefTypes> class TestTraits { public: template<unsigned int Index> using refType = typename std::tuple_element<Index,std::tuple<RefTypes...>>::type; template <unsigned int Index> using type = typename MemberReferenceType<refType<Index>>::type; private: template<unsigned int Index = 0, typename Dummy = void> struct MemRefs: public MemRefs<Index + 1> { const TestMemberReference<Class, type<Index>, refType<Index>> ref; std::string name; template <typename ... REST> MemRefs(std::string n, refType<Index> r, REST... rest) : MemRefs<Index + 1> (rest...), ref(r), name(n){} }; template<typename Dummy> struct MemRefs<sizeof...(RefTypes) - 1, Dummy>{ const TestMemberReference<Class, type<sizeof...(RefTypes) - 1>, refType<sizeof...(RefTypes) - 1>> ref; std::string name; MemRefs(std::string n, refType<sizeof...(RefTypes) - 1> r) : ref(r), name(n){} }; const MemRefs<0, void> refs; /* using refs = Singleton<MemRefs<sizeof... (RefTypes) - 1, void>>; template<unsigned int Pos = 0, typename ref, typename...Refs> static void _makeReferences(const std::string& name, ref member,Refs... refsAndNames) { _makeReferences<Pos, ref>(name, member); _makeReferences<Pos+1>(refsAndNames...); } template<unsigned int Pos, typename ref> static void _makeReferences(const std::string& name, ref member) { refs::getInstance().MemRefs<Pos, void>::name = name; refs::getInstance().MemRefs<Pos, void>::ref = MemberReference<Class, type<Pos>, refType<Pos>>(member); } template<unsigned int Pos, typename ref> static void _makeReferences(const char* name, ref member) { refs::getInstance().MemRefs<Pos, void>::name = name; refs::getInstance().MemRefs<Pos, void>::ref = MemberReference<Class, type<Pos>, refType<Pos>>(member); } */ public: static constexpr unsigned int size(){ return sizeof... (RefTypes); } template<unsigned int Index> const TestMemberReference<Class, type<Index>, refType<Index>>& getReference(){ return refs.MemRefs<Index, void>::ref; } template<unsigned int Index> type<Index> getValue(const Class* c){ return getReference<Index>()->getValue(c); } template<unsigned int Index> type<Index> getValue(const Class& c){ return getReference<Index>().getValue(c); } template<unsigned int Index> void setValue(Class* c, const type<Index>& val){ getReference<Index>().setValue(c, val); } template<unsigned int Index> void setValue(Class& c, const type<Index>& val){ getReference<Index>().setValue(c, val); } template<unsigned int Index> const std::string& getName(){ return refs.MemRefs<Index, void>::name; } template<typename...Refs> TestTraits(Refs... refsAndNames) : refs(refsAndNames...){} }; void testTestTraits(){ TestTraits<ExportTest, decltype (&ExportTest::attrInt), decltype (&ExportTest::attrDouble)> trait( "attrInt", &ExportTest::attrInt, "attrDouble", &ExportTest::attrDouble ); ExportTest e; trait.setValue<0>(e,7); DBGVAR(trait.getValue<0>(e)); } void testTraitPerformance() { void testTraitPerformance() { size_t size; size_t size; Loading @@ -836,19 +987,22 @@ void testTraitPerformance() { auto clock = std::chrono::high_resolution_clock(); auto clock = std::chrono::high_resolution_clock(); DBGMSG("primary approach"); DBGMSG("primary approach"); long long deviation = 0; long long deviation = 0; long long duration = 0; auto start = clock.now(); auto start = clock.now(); double res = 0; double res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += vec[i].attrDouble; res += vec[i].attrDouble; } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } auto avgDuration = (clock.now() - start).count() / maxRep; auto avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; Loading @@ -861,42 +1015,52 @@ void testTraitPerformance() { for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += doubleAttr::getValue(vec[i]); res += doubleAttr::getValue(vec[i]); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("direct ref"); start = clock.now(); start = clock.now(); res = 0; res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += vec[i].*(doubleAttr::mp); res += vec[i].*(doubleAttr::mp); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("member reference"); DBGMSG("member reference"); //typedef B<decltype(&ExportTest::attrDouble),decltype(&ExportTest::attrDouble), &ExportTest::attrDouble, &ExportTest::attrDouble> doubleAttr; //typedef B<decltype(&ExportTest::attrDouble),decltype(&ExportTest::attrDouble), &ExportTest::attrDouble, &ExportTest::attrDouble> doubleAttr; MemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)> MR(&ExportTest::attrDouble); TestMemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)> MR(&ExportTest::attrDouble); start = clock.now(); start = clock.now(); res = 0; res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += MR.getValue(vec[i]); res += MR.getValue(vec[i]); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; start = clock.now(); start = clock.now(); Loading @@ -905,28 +1069,91 @@ void testTraitPerformance() { for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += vec[i].*(MR.ref); res += vec[i].*(MR.ref); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("new test trait"); TestTraits<ExportTest, decltype (&ExportTest::attrInt), decltype (&ExportTest::attrDouble)> trait( "attrInt", &ExportTest::attrInt, "attrDouble", &ExportTest::attrDouble ); DBGVAR(Traits<ExportTest>::ttype::getName<1>()); start = clock.now(); start = clock.now(); res = 0; res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += Traits<ExportTest>::ttype::getValue<1>(vec[i]); res += trait.getValue<1>(vec[i]); } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; duration = 0; DBGMSG("member reference virtual"); MemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)> MR1(&ExportTest::attrDouble); start = clock.now(); res = 0; for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { res += MR1.getValue(vec[i]); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("member reference virtual"); const MemberApproach<ExportTest, double>* MA = new MemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)>(&ExportTest::attrDouble); start = clock.now(); res = 0; for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { res += MA->getValue(vec[i]); } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; duration = 0; DBGMSG("traits"); start = clock.now(); res = 0; for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { res += Traits<ExportTest>::ttype::getValue<1>(vec[i]); } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; duration = 0; Loading Loading @@ -1067,7 +1294,7 @@ public: MAKE_NAMED_ATTRIBUTE_TRAIT(privateAttr, "str_attr", attr); MAKE_NAMED_ATTRIBUTE_TRAIT(privateAttr, "str_attr", attr); //#include <ciso646> void testPrivateTrait(){ void testPrivateTrait(){ privateAttr a; privateAttr a; DBGVAR(a); DBGVAR(a); Loading @@ -1076,6 +1303,7 @@ void testPrivateTrait(){ } } /* #include "json.hpp" #include "json.hpp" Loading Loading @@ -1223,7 +1451,11 @@ void testJson() { std::cout << j_test << std::endl; std::cout << j_test << std::endl; DBGVAR(j, p_test, j_test); DBGVAR(j, p_test, j_test); } }*/ int main() int main() Loading @@ -1237,10 +1469,11 @@ int main() //testStructTransposition(); //testStructTransposition(); //testTraitApply(); //testTraitApply(); //testCompileTimeTraits(); //testCompileTimeTraits(); //testTraitPerformance(); testTraitPerformance(); //testCustomUnorderedMap(); //testCustomUnorderedMap(); //testPrivateTrait(); //testPrivateTrait(); testJson(); //testJson(); //testTestTraits(); return 0; return 0; } } Loading Unstructured_mesh/main.cpp +18 −12 Original line number Original line Diff line number Diff line Loading @@ -116,43 +116,43 @@ void twoPrisms(UnstructuredMesh<3, size_t, double, 6>& mesh3){ mesh3.getEdges().push_back({13,2,1}); mesh3.getEdges().push_back({13,2,1}); DBGCHECK; DBGCHECK; size_t index = 0; size_t index = 0; mesh3.getFaces().push_back(index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(index)); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(13); Loading Loading @@ -612,6 +612,12 @@ DBGMSG("tessellated cell volume"); DBGVAR(vert.getIndex(), con1[vert]); DBGVAR(vert.getIndex(), con1[vert]); } } DBGMSG("connection test oposite"); auto con2 = MeshConnections<2,3>::connections(mesh3); for (auto& face : mesh3.getFaces()){ DBGVAR(face.getIndex(), con2[face]); } DBGMSG("face to vertex colouring"); DBGMSG("face to vertex colouring"); auto colours = ColorMesh<2,0>::color(mesh3); auto colours = ColorMesh<2,0>::color(mesh3); for (auto& face : mesh3.getFaces()){ for (auto& face : mesh3.getFaces()){ Loading Loading @@ -1012,10 +1018,10 @@ int main() { { //meshSize(); //meshSize(); //testMesh2D(); //testMesh2D(); testMesh2DLoadAndWrite(); //testMesh2DLoadAndWrite(); testMesh3D(); testMesh3D(); test3DMeshDeformedPrisms(); //test3DMeshDeformedPrisms(); testMeshRefine(); //testMeshRefine(); //testMeshDataContainer(); //testMeshDataContainer(); //UnstructuredMesh<5, size_t, double, 6,5,4> m; //UnstructuredMesh<5, size_t, double, 6,5,4> m; //m.ComputeElementMeasures(); //m.ComputeElementMeasures(); Loading src/Traits/MemberApproach/MemberApproach.h +28 −28 Original line number Original line Diff line number Diff line Loading @@ -12,11 +12,11 @@ template <typename Class, typename ValueType> template <typename Class, typename ValueType> class MemberApproach{ class MemberApproach{ public: public: virtual ValueType getValue(const Class*) = 0; virtual ValueType getValue(const Class*) const = 0; virtual void setValue(Class*, const ValueType&) = 0; virtual void setValue(Class*, const ValueType&) const = 0; virtual ValueType getValue(const Class&) = 0; virtual ValueType getValue(const Class&) const = 0; virtual void setValue(Class&, const ValueType&) = 0; virtual void setValue(Class&, const ValueType&) const = 0; }; }; Loading @@ -41,19 +41,19 @@ public: //ref = referenceToMember; //ref = referenceToMember; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return c->*ref; return c->*ref; } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { c->*ref = val; c->*ref = val; } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return c.*ref; return c.*ref; } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { c.*ref = val; c.*ref = val; } } }; }; Loading @@ -74,18 +74,18 @@ public: //ref = referenceToMember; //ref = referenceToMember; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*ref)(); return (c->*ref)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*ref)() = val; (c->*ref)() = val; } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*ref)(); return (c.*ref)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*ref)() = val; (c.*ref)() = val; } } Loading Loading @@ -115,19 +115,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading @@ -154,19 +154,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading @@ -193,19 +193,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading @@ -232,19 +232,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading src/UnstructuredMesh/MeshFunctions/MeshConnections.h +86 −8 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
TemplateTest/main.cpp +253 −20 Original line number Original line Diff line number Diff line Loading @@ -812,6 +812,157 @@ void testOperator() { #include <chrono> #include <chrono> template<typename Class, typename ValueType, typename Ref> class TestMemberReference{ TestMemberReference(Ref){} }; template <typename Class, typename ValueType> class TestMemberReference<Class, ValueType, ValueType Class::*> : MemberApproach<Class, ValueType>{ using refType = ValueType Class::*; public: refType const ref; public: TestMemberReference(refType referenceToMember) : ref(referenceToMember){ //ref = referenceToMember; } inline ValueType getValue(const Class* c) const { return c->*ref; } inline void setValue(Class* c, const ValueType& val) const { c->*ref = val; } inline ValueType getValue(const Class& c) const { return c.*ref; } inline void setValue(Class& c, const ValueType& val) const { c.*ref = val; } }; template<typename Class, typename...RefTypes> class TestTraits { public: template<unsigned int Index> using refType = typename std::tuple_element<Index,std::tuple<RefTypes...>>::type; template <unsigned int Index> using type = typename MemberReferenceType<refType<Index>>::type; private: template<unsigned int Index = 0, typename Dummy = void> struct MemRefs: public MemRefs<Index + 1> { const TestMemberReference<Class, type<Index>, refType<Index>> ref; std::string name; template <typename ... REST> MemRefs(std::string n, refType<Index> r, REST... rest) : MemRefs<Index + 1> (rest...), ref(r), name(n){} }; template<typename Dummy> struct MemRefs<sizeof...(RefTypes) - 1, Dummy>{ const TestMemberReference<Class, type<sizeof...(RefTypes) - 1>, refType<sizeof...(RefTypes) - 1>> ref; std::string name; MemRefs(std::string n, refType<sizeof...(RefTypes) - 1> r) : ref(r), name(n){} }; const MemRefs<0, void> refs; /* using refs = Singleton<MemRefs<sizeof... (RefTypes) - 1, void>>; template<unsigned int Pos = 0, typename ref, typename...Refs> static void _makeReferences(const std::string& name, ref member,Refs... refsAndNames) { _makeReferences<Pos, ref>(name, member); _makeReferences<Pos+1>(refsAndNames...); } template<unsigned int Pos, typename ref> static void _makeReferences(const std::string& name, ref member) { refs::getInstance().MemRefs<Pos, void>::name = name; refs::getInstance().MemRefs<Pos, void>::ref = MemberReference<Class, type<Pos>, refType<Pos>>(member); } template<unsigned int Pos, typename ref> static void _makeReferences(const char* name, ref member) { refs::getInstance().MemRefs<Pos, void>::name = name; refs::getInstance().MemRefs<Pos, void>::ref = MemberReference<Class, type<Pos>, refType<Pos>>(member); } */ public: static constexpr unsigned int size(){ return sizeof... (RefTypes); } template<unsigned int Index> const TestMemberReference<Class, type<Index>, refType<Index>>& getReference(){ return refs.MemRefs<Index, void>::ref; } template<unsigned int Index> type<Index> getValue(const Class* c){ return getReference<Index>()->getValue(c); } template<unsigned int Index> type<Index> getValue(const Class& c){ return getReference<Index>().getValue(c); } template<unsigned int Index> void setValue(Class* c, const type<Index>& val){ getReference<Index>().setValue(c, val); } template<unsigned int Index> void setValue(Class& c, const type<Index>& val){ getReference<Index>().setValue(c, val); } template<unsigned int Index> const std::string& getName(){ return refs.MemRefs<Index, void>::name; } template<typename...Refs> TestTraits(Refs... refsAndNames) : refs(refsAndNames...){} }; void testTestTraits(){ TestTraits<ExportTest, decltype (&ExportTest::attrInt), decltype (&ExportTest::attrDouble)> trait( "attrInt", &ExportTest::attrInt, "attrDouble", &ExportTest::attrDouble ); ExportTest e; trait.setValue<0>(e,7); DBGVAR(trait.getValue<0>(e)); } void testTraitPerformance() { void testTraitPerformance() { size_t size; size_t size; Loading @@ -836,19 +987,22 @@ void testTraitPerformance() { auto clock = std::chrono::high_resolution_clock(); auto clock = std::chrono::high_resolution_clock(); DBGMSG("primary approach"); DBGMSG("primary approach"); long long deviation = 0; long long deviation = 0; long long duration = 0; auto start = clock.now(); auto start = clock.now(); double res = 0; double res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += vec[i].attrDouble; res += vec[i].attrDouble; } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } auto avgDuration = (clock.now() - start).count() / maxRep; auto avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; Loading @@ -861,42 +1015,52 @@ void testTraitPerformance() { for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += doubleAttr::getValue(vec[i]); res += doubleAttr::getValue(vec[i]); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("direct ref"); start = clock.now(); start = clock.now(); res = 0; res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += vec[i].*(doubleAttr::mp); res += vec[i].*(doubleAttr::mp); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("member reference"); DBGMSG("member reference"); //typedef B<decltype(&ExportTest::attrDouble),decltype(&ExportTest::attrDouble), &ExportTest::attrDouble, &ExportTest::attrDouble> doubleAttr; //typedef B<decltype(&ExportTest::attrDouble),decltype(&ExportTest::attrDouble), &ExportTest::attrDouble, &ExportTest::attrDouble> doubleAttr; MemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)> MR(&ExportTest::attrDouble); TestMemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)> MR(&ExportTest::attrDouble); start = clock.now(); start = clock.now(); res = 0; res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += MR.getValue(vec[i]); res += MR.getValue(vec[i]); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; start = clock.now(); start = clock.now(); Loading @@ -905,28 +1069,91 @@ void testTraitPerformance() { for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += vec[i].*(MR.ref); res += vec[i].*(MR.ref); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("new test trait"); TestTraits<ExportTest, decltype (&ExportTest::attrInt), decltype (&ExportTest::attrDouble)> trait( "attrInt", &ExportTest::attrInt, "attrDouble", &ExportTest::attrDouble ); DBGVAR(Traits<ExportTest>::ttype::getName<1>()); start = clock.now(); start = clock.now(); res = 0; res = 0; for(int rep = 0; rep < maxRep; rep++){ for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { for(size_t i = 0; i < vec.size(); i++) { res += Traits<ExportTest>::ttype::getValue<1>(vec[i]); res += trait.getValue<1>(vec[i]); } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; duration = 0; DBGMSG("member reference virtual"); MemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)> MR1(&ExportTest::attrDouble); start = clock.now(); res = 0; for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { res += MR1.getValue(vec[i]); } } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } } avgDuration = (clock.now() - start).count() / maxRep; avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt((deviation / maxRep )- pow(avgDuration,2))); DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; deviation = 0; duration = 0; DBGMSG("member reference virtual"); const MemberApproach<ExportTest, double>* MA = new MemberReference<ExportTest, double, decltype (&ExportTest::attrDouble)>(&ExportTest::attrDouble); start = clock.now(); res = 0; for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { res += MA->getValue(vec[i]); } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; duration = 0; DBGMSG("traits"); start = clock.now(); res = 0; for(int rep = 0; rep < maxRep; rep++){ for(size_t i = 0; i < vec.size(); i++) { res += Traits<ExportTest>::ttype::getValue<1>(vec[i]); } duration += (clock.now() - start).count(); deviation += (clock.now() - start).count() * (clock.now() - start).count(); start = clock.now(); } avgDuration = duration / maxRep; DBGVAR(res, avgDuration , sqrt(((deviation)- maxRep * pow(avgDuration,2)) / (maxRep - 1))); deviation = 0; duration = 0; Loading Loading @@ -1067,7 +1294,7 @@ public: MAKE_NAMED_ATTRIBUTE_TRAIT(privateAttr, "str_attr", attr); MAKE_NAMED_ATTRIBUTE_TRAIT(privateAttr, "str_attr", attr); //#include <ciso646> void testPrivateTrait(){ void testPrivateTrait(){ privateAttr a; privateAttr a; DBGVAR(a); DBGVAR(a); Loading @@ -1076,6 +1303,7 @@ void testPrivateTrait(){ } } /* #include "json.hpp" #include "json.hpp" Loading Loading @@ -1223,7 +1451,11 @@ void testJson() { std::cout << j_test << std::endl; std::cout << j_test << std::endl; DBGVAR(j, p_test, j_test); DBGVAR(j, p_test, j_test); } }*/ int main() int main() Loading @@ -1237,10 +1469,11 @@ int main() //testStructTransposition(); //testStructTransposition(); //testTraitApply(); //testTraitApply(); //testCompileTimeTraits(); //testCompileTimeTraits(); //testTraitPerformance(); testTraitPerformance(); //testCustomUnorderedMap(); //testCustomUnorderedMap(); //testPrivateTrait(); //testPrivateTrait(); testJson(); //testJson(); //testTestTraits(); return 0; return 0; } } Loading
Unstructured_mesh/main.cpp +18 −12 Original line number Original line Diff line number Diff line Loading @@ -116,43 +116,43 @@ void twoPrisms(UnstructuredMesh<3, size_t, double, 6>& mesh3){ mesh3.getEdges().push_back({13,2,1}); mesh3.getEdges().push_back({13,2,1}); DBGCHECK; DBGCHECK; size_t index = 0; size_t index = 0; mesh3.getFaces().push_back(index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(index)); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(0); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(1); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().at(index).getSubelements().addSubelement(4); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().at(index).getSubelements().addSubelement(3); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(2); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(6); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().at(index).getSubelements().addSubelement(5); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(8); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().at(index).getSubelements().addSubelement(11); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(9); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(10); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().push_back(++index); mesh3.getFaces().push_back(UnstructuredMesh<3, size_t, double, 6>::Face(++index)); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(12); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(7); mesh3.getFaces().at(index).getSubelements().addSubelement(13); mesh3.getFaces().at(index).getSubelements().addSubelement(13); Loading Loading @@ -612,6 +612,12 @@ DBGMSG("tessellated cell volume"); DBGVAR(vert.getIndex(), con1[vert]); DBGVAR(vert.getIndex(), con1[vert]); } } DBGMSG("connection test oposite"); auto con2 = MeshConnections<2,3>::connections(mesh3); for (auto& face : mesh3.getFaces()){ DBGVAR(face.getIndex(), con2[face]); } DBGMSG("face to vertex colouring"); DBGMSG("face to vertex colouring"); auto colours = ColorMesh<2,0>::color(mesh3); auto colours = ColorMesh<2,0>::color(mesh3); for (auto& face : mesh3.getFaces()){ for (auto& face : mesh3.getFaces()){ Loading Loading @@ -1012,10 +1018,10 @@ int main() { { //meshSize(); //meshSize(); //testMesh2D(); //testMesh2D(); testMesh2DLoadAndWrite(); //testMesh2DLoadAndWrite(); testMesh3D(); testMesh3D(); test3DMeshDeformedPrisms(); //test3DMeshDeformedPrisms(); testMeshRefine(); //testMeshRefine(); //testMeshDataContainer(); //testMeshDataContainer(); //UnstructuredMesh<5, size_t, double, 6,5,4> m; //UnstructuredMesh<5, size_t, double, 6,5,4> m; //m.ComputeElementMeasures(); //m.ComputeElementMeasures(); Loading
src/Traits/MemberApproach/MemberApproach.h +28 −28 Original line number Original line Diff line number Diff line Loading @@ -12,11 +12,11 @@ template <typename Class, typename ValueType> template <typename Class, typename ValueType> class MemberApproach{ class MemberApproach{ public: public: virtual ValueType getValue(const Class*) = 0; virtual ValueType getValue(const Class*) const = 0; virtual void setValue(Class*, const ValueType&) = 0; virtual void setValue(Class*, const ValueType&) const = 0; virtual ValueType getValue(const Class&) = 0; virtual ValueType getValue(const Class&) const = 0; virtual void setValue(Class&, const ValueType&) = 0; virtual void setValue(Class&, const ValueType&) const = 0; }; }; Loading @@ -41,19 +41,19 @@ public: //ref = referenceToMember; //ref = referenceToMember; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return c->*ref; return c->*ref; } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { c->*ref = val; c->*ref = val; } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return c.*ref; return c.*ref; } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { c.*ref = val; c.*ref = val; } } }; }; Loading @@ -74,18 +74,18 @@ public: //ref = referenceToMember; //ref = referenceToMember; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*ref)(); return (c->*ref)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*ref)() = val; (c->*ref)() = val; } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*ref)(); return (c.*ref)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*ref)() = val; (c.*ref)() = val; } } Loading Loading @@ -115,19 +115,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading @@ -154,19 +154,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading @@ -193,19 +193,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading @@ -232,19 +232,19 @@ public: //refSet = getSet.second; //refSet = getSet.second; } } virtual ValueType getValue(const Class* c) override { virtual ValueType getValue(const Class* c) const override { return (c->*refGet)(); return (c->*refGet)(); } } virtual void setValue(Class* c, const ValueType& val) override { virtual void setValue(Class* c, const ValueType& val) const override { (c->*refSet)(val); (c->*refSet)(val); } } virtual ValueType getValue(const Class& c) override { virtual ValueType getValue(const Class& c) const override { return (c.*refGet)(); return (c.*refGet)(); } } virtual void setValue(Class& c, const ValueType& val) override { virtual void setValue(Class& c, const ValueType& val) const override { (c.*refSet)(val); (c.*refSet)(val); } } }; }; Loading
src/UnstructuredMesh/MeshFunctions/MeshConnections.h +86 −8 File changed.Preview size limit exceeded, changes collapsed. Show changes