50 : m_element(element), m_vertexIds(std::move(vertexIds)), m_winding(winding)
54 std::size_t nVertices = m_vertexIds.size();
58 long smallestVertexId = m_vertexIds[m_firstVertexId];
59 for (std::size_t i = 1; i < nVertices; ++i) {
60 long vertexId = m_vertexIds[i];
61 if (vertexId < smallestVertexId) {
63 smallestVertexId = vertexId;
126 std::size_t nVertices = vertexIds_1.
size();
127 if (nVertices != vertexIds_2.
size()) {
131 int winding = m_winding * other.m_winding;
132 std::size_t offset = other.m_firstVertexId - winding * m_firstVertexId + 2 * nVertices;
133 for (std::size_t i = 0; i < nVertices; ++i) {
135 std::size_t k2 = (offset + winding * i) % nVertices;
136 if (vertexIds_1[k1] != vertexIds_2[k2]) {
175 std::size_t nVertices = vertexIds.
size();
177 std::size_t hash = nVertices;
178 if (item.m_winding == ElementHalfItem::WINDING_NATURAL) {
179 for (std::size_t i = 0; i < nVertices; ++i) {
180 std::size_t k = (item.m_firstVertexId + i) % nVertices;
181 utils::hashing::hash_combine(hash, vertexIds[k]);
187 if (item.m_element.getType() != ElementType::PIXEL) {
188 for (std::size_t i = nVertices; i > 0; --i) {
189 std::size_t k = (item.m_firstVertexId + i) % nVertices;
190 utils::hashing::hash_combine(hash, vertexIds[k]);
193 utils::hashing::hash_combine(hash, vertexIds[(item.m_firstVertexId + 1) % nVertices]);
194 utils::hashing::hash_combine(hash, vertexIds[(item.m_firstVertexId + 0) % nVertices]);
195 utils::hashing::hash_combine(hash, vertexIds[(item.m_firstVertexId + 3) % nVertices]);
196 utils::hashing::hash_combine(hash, vertexIds[(item.m_firstVertexId + 2) % nVertices]);