#pragma once #include #include #include namespace polymesh { struct hash { template size_t operator()(polymesh::primitive_index const& i) const noexcept { return i.value; } size_t operator()(polymesh::face_index const& i) const noexcept { return i.value; } size_t operator()(polymesh::vertex_index const& i) const noexcept { return i.value; } size_t operator()(polymesh::edge_index const& i) const noexcept { return i.value; } size_t operator()(polymesh::halfedge_index const& i) const noexcept { return i.value; } template size_t operator()(polymesh::primitive_handle const& i) const noexcept { return size_t(i.idx.value) ^ size_t(i.mesh); } size_t operator()(polymesh::face_handle const& i) const noexcept { return size_t(i.idx.value) ^ size_t(i.mesh); } size_t operator()(polymesh::vertex_handle const& i) const noexcept { return size_t(i.idx.value) ^ size_t(i.mesh); } size_t operator()(polymesh::edge_handle const& i) const noexcept { return size_t(i.idx.value) ^ size_t(i.mesh); } size_t operator()(polymesh::halfedge_handle const& i) const noexcept { return size_t(i.idx.value) ^ size_t(i.mesh); } }; }