/** * Adds the key to the set (no checks for unique keys!). * Matching #BLI_edgehash_insert */ void BLI_edgeset_insert(EdgeSet *es, unsigned int v0, unsigned int v1) { unsigned int hash; EDGE_ORD(v0, v1); /* ensure v0 is smaller */ hash = edgehash_keyhash((EdgeHash *)es, v0, v1); edgehash_insert_ex_keyonly((EdgeHash *)es, v0, v1, hash); }
/** * A version of BLI_edgeset_insert which checks first if the key is in the set. * \returns true if a new key has been added. * * \note EdgeHash has no equivalent to this because typically the value would be different. */ bool BLI_edgeset_add(EdgeSet *es, uint v0, uint v1) { EDGE_ORD(v0, v1); const uint bucket_index = edgehash_bucket_index((EdgeHash *)es, v0, v1); EdgeEntry *e = edgehash_lookup_entry_ex((EdgeHash *)es, v0, v1, bucket_index); if (e) { return false; } else { edgehash_insert_ex_keyonly((EdgeHash *)es, v0, v1, bucket_index); return true; } }
/** * Assign a new value to a key that may already be in edgehash. */ bool BLI_edgeset_reinsert(EdgeSet *es, unsigned int v0, unsigned int v1) { unsigned int hash; EdgeEntry *e; EDGE_ORD(v0, v1); /* ensure v0 is smaller */ hash = edgehash_keyhash((EdgeHash *)es, v0, v1); e = edgehash_lookup_entry_ex((EdgeHash *)es, v0, v1, hash); if (e) { return false; } else { edgehash_insert_ex_keyonly((EdgeHash *)es, v0, v1, hash); return true; } }
/** * Adds the key to the set (no checks for unique keys!). * Matching #BLI_edgehash_insert */ void BLI_edgeset_insert(EdgeSet *es, uint v0, uint v1) { EDGE_ORD(v0, v1); const uint bucket_index = edgehash_bucket_index((EdgeHash *)es, v0, v1); edgehash_insert_ex_keyonly((EdgeHash *)es, v0, v1, bucket_index); }