diff --git a/Unstructured_mesh/main.cpp b/Unstructured_mesh/main.cpp index 348ebca6b890c7998d531a643851c741f6abfebc..483bccf93a60083da6ee3729cbcd3383b50ff90b 100644 --- a/Unstructured_mesh/main.cpp +++ b/Unstructured_mesh/main.cpp @@ -1,4 +1,5 @@ #include <iostream> +#include <string> //#define UNDEBUG #define CONSOLE_COLOURED_OUTPUT #include "../src/Debug/Debug.h" @@ -272,7 +273,6 @@ void testMesh2D() { using sit = UnstructuredMesh<2, size_t, double>; sit mesh; - mesh.getVertices().resize(4); mesh.getVertices().at(0).setIndex(0); @@ -982,6 +982,10 @@ void testFPMA_poly(){ int main() { + vector<size_t> v(10,1); + DBGVAR(v.data(), ((char *)&*(v.end())) - ((char*)&*(v.begin()))); + + void* p = 0; testMesh2D(); //testMesh2DLoadAndWrite(); diff --git a/src/UnstructuredMesh/MeshElements/MeshElements.h b/src/UnstructuredMesh/MeshElements/MeshElements.h index 4ed54bfbe4edc3dabf553cc25ce8e7a2b42198d8..50eb72c4f2bb29c44614836aca9c7f7c043ddd63 100644 --- a/src/UnstructuredMesh/MeshElements/MeshElements.h +++ b/src/UnstructuredMesh/MeshElements/MeshElements.h @@ -219,7 +219,7 @@ public: private: template<unsigned int Dim = Dimension, typename Dummy = void> - struct hashOfMeshElements{ + struct HashOfMeshElements{ static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ std::hash<IndexType> indexHasher; @@ -230,7 +230,7 @@ private: elemHash ^= indexHasher(subElement.index); } } - return elemHash ^ hashOfMeshElements<Dim - 1>::hash(mesh); + return elemHash ^ HashOfMeshElements<Dim - 1>::hash(mesh); } }; @@ -239,49 +239,35 @@ private: * @brief The hashOfMeshElements<Dimension, Dummy> struct hashes the cell information. */ template<typename Dummy> - struct hashOfMeshElements<Dimension, Dummy>{ + struct HashOfMeshElements<Dimension, Dummy>{ static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ - std::hash<IndexType> indexHasher; // Hash of cells - size_t cHash = indexHasher(mesh.getCells().size()); - for(auto& cell : mesh.getCells()) { - cHash ^= indexHasher(cell.getBoundaryElementIndex()); - } - return cHash ^ hashOfMeshElements<Dimension -1>::hash(mesh); + size_t cHash = std::_Hash_impl::hash(mesh.getCells().data(), mesh.getCells().size() * sizeof (MeshElements<Dimension, IndexType, Real, Reserve...>::Cell)); + + return cHash ^ HashOfMeshElements<Dimension -1>::hash(mesh); } }; template<typename Dummy> - struct hashOfMeshElements<1, Dummy>{ + struct HashOfMeshElements<1, Dummy>{ static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ - std::hash<IndexType> indexHasher; // Hash of cells - size_t eHash = indexHasher(mesh.getEdges().size()); - for(auto& edge : mesh.getEdges()) { - eHash ^= edge.getVertexAIndex(); - eHash ^= edge.getVertexBIndex(); - } - return eHash ^ hashOfMeshElements<0>::hash(mesh); + size_t eHash = std::_Hash_impl::hash(mesh.getEdges().data(), mesh.getEdges().size() * sizeof (MeshElements<Dimension, IndexType, Real, Reserve...>::Edge)); + + return eHash ^ HashOfMeshElements<0>::hash(mesh); } }; template<typename Dummy> - struct hashOfMeshElements<0, Dummy>{ + struct HashOfMeshElements<0, Dummy>{ static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ - std::hash<Real> vertexHasher; - std::hash<IndexType> indexHasher; // Hash of vertices - size_t vHash = indexHasher(mesh.getVertices().size()); - for(auto& vertex : mesh.getVertices()) { - for(unsigned int i = 0; i < vertex.size(); i++) { - vHash ^= vertexHasher(vertex[i]); - //vHash >>= 2; - } - } + size_t vHash = std::_Hash_impl::hash(&mesh.getVertices()[0], mesh.getVertices().size() * sizeof (MeshElements<Dimension, IndexType, Real, Reserve...>::Vertex)); + return vHash; } }; @@ -290,7 +276,7 @@ public: size_t updateSignature() { - meshSignature = hashOfMeshElements<Dimension>::hash(*this); + meshSignature = HashOfMeshElements<Dimension>::hash(*this); return meshSignature;