[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15003] branches/harmonic-skeleton/source/ blender/blenlib: gHash iterator initializer

Martin Poirier theeth at yahoo.com
Tue May 27 15:22:17 CEST 2008


Revision: 15003
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15003
Author:   theeth
Date:     2008-05-27 15:22:17 +0200 (Tue, 27 May 2008)

Log Message:
-----------
gHash iterator initializer

To be able to have iterators on the stack/reuse iterators

Modified Paths:
--------------
    branches/harmonic-skeleton/source/blender/blenlib/BLI_ghash.h
    branches/harmonic-skeleton/source/blender/blenlib/intern/BLI_ghash.c

Modified: branches/harmonic-skeleton/source/blender/blenlib/BLI_ghash.h
===================================================================
--- branches/harmonic-skeleton/source/blender/blenlib/BLI_ghash.h	2008-05-27 12:38:07 UTC (rev 15002)
+++ branches/harmonic-skeleton/source/blender/blenlib/BLI_ghash.h	2008-05-27 13:22:17 UTC (rev 15003)
@@ -34,8 +34,13 @@
 
 struct GHash;
 typedef struct GHash GHash;
-typedef struct GHashIterator GHashIterator;
 
+typedef struct GHashIterator {
+	GHash *gh;
+	int curBucket;
+	struct Entry *curEntry;
+} GHashIterator;
+
 typedef unsigned int	(*GHashHashFP)		(void *key);
 typedef int				(*GHashCmpFP)		(void *a, void *b);
 typedef	void			(*GHashKeyFreeFP)	(void *key);
@@ -63,6 +68,15 @@
 	 */
 GHashIterator*	BLI_ghashIterator_new		(GHash *gh);
 	/**
+	 * Init an already allocated GHashIterator. The hash table must not
+	 * be mutated while the iterator is in use, and the iterator will
+	 * step exactly BLI_ghash_size(gh) times before becoming done.
+	 * 
+	 * @param ghi The GHashIterator to initialize.
+	 * @param gh The GHash to iterate over.
+	 */
+void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh);
+	/**
 	 * Free a GHashIterator.
 	 *
 	 * @param ghi The iterator to free.

Modified: branches/harmonic-skeleton/source/blender/blenlib/intern/BLI_ghash.c
===================================================================
--- branches/harmonic-skeleton/source/blender/blenlib/intern/BLI_ghash.c	2008-05-27 12:38:07 UTC (rev 15002)
+++ branches/harmonic-skeleton/source/blender/blenlib/intern/BLI_ghash.c	2008-05-27 13:22:17 UTC (rev 15003)
@@ -198,12 +198,6 @@
 
 /***/
 
-struct GHashIterator {
-	GHash *gh;
-	int curBucket;
-	Entry *curEntry;
-};
-
 GHashIterator *BLI_ghashIterator_new(GHash *gh) {
 	GHashIterator *ghi= malloc(sizeof(*ghi));
 	ghi->gh= gh;
@@ -217,6 +211,17 @@
 	}
 	return ghi;
 }
+void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh) {
+	ghi->gh= gh;
+	ghi->curEntry= NULL;
+	ghi->curBucket= -1;
+	while (!ghi->curEntry) {
+		ghi->curBucket++;
+		if (ghi->curBucket==ghi->gh->nbuckets)
+			break;
+		ghi->curEntry= ghi->gh->buckets[ghi->curBucket];
+	}
+}
 void BLI_ghashIterator_free(GHashIterator *ghi) {
 	free(ghi);
 }





More information about the Bf-blender-cvs mailing list