[Bf-blender-cvs] [6ba8e71fa28] master: BKE_main: add a util to generate/extend a GSet with all ID pointers of a Main database.

Bastien Montagne noreply at git.blender.org
Fri Feb 8 18:58:19 CET 2019


Commit: 6ba8e71fa2890ec36de6f5012414ff40e5e4b23a
Author: Bastien Montagne
Date:   Fri Feb 8 18:44:37 2019 +0100
Branches: master
https://developer.blender.org/rB6ba8e71fa2890ec36de6f5012414ff40e5e4b23a

BKE_main: add a util to generate/extend a GSet with all ID pointers of a Main database.

===================================================================

M	source/blender/blenkernel/BKE_main.h
M	source/blender/blenkernel/intern/main.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 872cdc2bcd3..88387b88d96 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -41,6 +41,7 @@ struct BLI_mempool;
 struct BlendThumbnail;
 struct Depsgraph;
 struct GHash;
+struct GSet;
 struct ImBuf;
 struct Library;
 struct MainLock;
@@ -136,6 +137,8 @@ void BKE_main_unlock(struct Main *bmain);
 void BKE_main_relations_create(struct Main *bmain);
 void BKE_main_relations_free(struct Main *bmain);
 
+struct GSet *BKE_main_gset_create(struct Main *bmain, struct GSet *gset);
+
 /* *** Generic utils to loop over whole Main database. *** */
 /** \return false to stop iteration, true to keep going. */
 typedef bool (*MainForeachIDCallback) (struct Main *bmain, struct ID *id, void *user_data);
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index d5b9147b34f..37d812adfa2 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -209,6 +209,27 @@ void BKE_main_relations_free(Main *bmain)
 	}
 }
 
+static bool main_gset_create(Main *UNUSED(bmain), ID *id, void *user_data)
+{
+	GSet *gset = user_data;
+	BLI_gset_add(gset, id);
+	return true;
+}
+
+/**
+ * Create a GSet storing all IDs present in given \a bmain, by their pointers.
+ *
+ * \param gset If not NULL, given GSet will be extended with IDs from given \a bmain, instead of creating a new one.
+ */
+GSet *BKE_main_gset_create(Main *bmain, GSet *gset)
+{
+	if (gset == NULL) {
+		gset = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+	}
+	BKE_main_foreach_id(bmain, false, main_gset_create, gset);
+	return gset;
+}
+
 /**
  * Call given callback over every IDs of given \a lb listbase (assumed to be part of given \a bmain).
  *



More information about the Bf-blender-cvs mailing list