Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-04-20 20:50:07 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-04-20 20:50:07 +0400
commit25c9ea8cb3215408d6c3de7b06a5fe4b07e4b435 (patch)
treeebb6a16709a2a9212cae9a6715db11ab1db5fc6c /source/blender/blenlib/intern/edgehash.c
parent3ba7a75a6c317cee35a96594ea050f23ad136a44 (diff)
GHash, EdgeHash: hint on unlikely branch
also avoid searching buckets for empty hashes
Diffstat (limited to 'source/blender/blenlib/intern/edgehash.c')
-rw-r--r--source/blender/blenlib/intern/edgehash.c50
1 files changed, 27 insertions, 23 deletions
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c
index 40b484e1974..8558e5773c7 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -452,11 +452,33 @@ void BLI_edgehashIterator_init(EdgeHashIterator *ehi, EdgeHash *eh)
ehi->eh = eh;
ehi->curEntry = NULL;
ehi->curBucket = UINT_MAX; /* wraps to zero */
- while (!ehi->curEntry) {
- ehi->curBucket++;
- if (ehi->curBucket == ehi->eh->nbuckets)
- break;
- ehi->curEntry = ehi->eh->buckets[ehi->curBucket];
+ if (eh->nentries) {
+ while (!ehi->curEntry) {
+ ehi->curBucket++;
+ if (UNLIKELY(ehi->curBucket == ehi->eh->nbuckets)) {
+ break;
+ }
+
+ ehi->curEntry = ehi->eh->buckets[ehi->curBucket];
+ }
+ }
+}
+
+/**
+ * Steps the iterator to the next index.
+ */
+void BLI_edgehashIterator_step(EdgeHashIterator *ehi)
+{
+ if (ehi->curEntry) {
+ ehi->curEntry = ehi->curEntry->next;
+ while (!ehi->curEntry) {
+ ehi->curBucket++;
+ if (UNLIKELY(ehi->curBucket == ehi->eh->nbuckets)) {
+ break;
+ }
+
+ ehi->curEntry = ehi->eh->buckets[ehi->curBucket];
+ }
}
}
@@ -512,24 +534,6 @@ bool BLI_edgehashIterator_isDone(EdgeHashIterator *ehi)
}
#endif
-/**
- * Steps the iterator to the next index.
- */
-void BLI_edgehashIterator_step(EdgeHashIterator *ehi)
-{
- if (ehi->curEntry) {
- ehi->curEntry = ehi->curEntry->next;
- while (!ehi->curEntry) {
- ehi->curBucket++;
- if (ehi->curBucket == ehi->eh->nbuckets) {
- break;
- }
-
- ehi->curEntry = ehi->eh->buckets[ehi->curBucket];
- }
- }
-}
-
/** \} */
/* -------------------------------------------------------------------- */