Fixed a regression bug in admesh: bad hashing.

Also the hash table size for admesh was made adaptive based on the number
of faces.
This commit is contained in:
bubnikv 2018-09-25 16:05:26 +02:00
parent 6260e43f61
commit 47b2d363f0
3 changed files with 30 additions and 16 deletions

View file

@ -65,11 +65,11 @@ typedef struct {
typedef struct stl_hash_edge {
// Key of a hash edge: sorted vertices of the edge.
unsigned char key[2 * sizeof(stl_vertex)];
uint32_t key[6];
// Compare two keys.
bool operator==(const stl_hash_edge &rhs) { return memcmp(key, rhs.key, sizeof(key)) == 0; }
bool operator!=(const stl_hash_edge &rhs) { return ! (*this == rhs); }
int hash(int M) const { return ((key[0] / 23 + key[1] / 19 + key[2] / 17 + key[3] /13 + key[4] / 11 + key[5] / 7 ) % M); }
int hash(int M) const { return ((key[0] / 11 + key[1] / 7 + key[2] / 3) ^ (key[3] / 11 + key[4] / 7 + key[5] / 3)) % M; }
// Index of a facet owning this edge.
int facet_number;
// Index of this edge inside the facet with an index of facet_number.