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:
authorDaniel Dunbar <daniel@zuster.org>2005-08-23 06:29:22 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-08-23 06:29:22 +0400
commit0192536102a0d0179f2cb09e62c7035c13ce3723 (patch)
tree38ce2e8998d9011a0e4a3fe3fafc2cbc44c70165 /source/blender/blenlib/intern/edgehash.c
parent3c1887036a17a98cf54bf36f985b6f344c46895f (diff)
- added iterator to edgehash
- updated decimator to make edges
Diffstat (limited to 'source/blender/blenlib/intern/edgehash.c')
-rw-r--r--source/blender/blenlib/intern/edgehash.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c
index f67d07a0649..8fae0f63746 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -167,3 +167,54 @@ void BLI_edgehash_free(EdgeHash *eh, EdgeHashFreeFP valfreefp) {
MEM_freeN(eh);
}
+
+/***/
+
+struct EdgeHashIterator {
+ EdgeHash *eh;
+ int curBucket;
+ Entry *curEntry;
+};
+
+EdgeHashIterator *BLI_edgehashIterator_new(EdgeHash *eh) {
+ EdgeHashIterator *ehi= malloc(sizeof(*ehi));
+ ehi->eh= eh;
+ ehi->curEntry= NULL;
+ ehi->curBucket= -1;
+ while (!ehi->curEntry) {
+ ehi->curBucket++;
+ if (ehi->curBucket==ehi->eh->nbuckets)
+ break;
+ ehi->curEntry= ehi->eh->buckets[ehi->curBucket];
+ }
+ return ehi;
+}
+void BLI_edgehashIterator_free(EdgeHashIterator *ehi) {
+ free(ehi);
+}
+
+void BLI_edgehashIterator_getKey(EdgeHashIterator *ehi, int *v0_r, int *v1_r) {
+ if (ehi->curEntry) {
+ *v0_r = ehi->curEntry->v0;
+ *v1_r = ehi->curEntry->v1;
+ }
+}
+void *BLI_edgehashIterator_getValue(EdgeHashIterator *ehi) {
+ return ehi->curEntry?ehi->curEntry->val:NULL;
+}
+
+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];
+ }
+ }
+}
+int BLI_edgehashIterator_isDone(EdgeHashIterator *ehi) {
+ return !ehi->curEntry;
+}
+