[Bf-blender-cvs] [dab1a1d] id-remap: Merge main remap funcs' bool parameters into a single bitflag.

Bastien Montagne noreply at git.blender.org
Thu Dec 17 19:33:34 CET 2015


Commit: dab1a1dd5f37d52eb7a04548094fb05ab79efbd9
Author: Bastien Montagne
Date:   Thu Dec 17 19:32:33 2015 +0100
Branches: id-remap
https://developer.blender.org/rBdab1a1dd5f37d52eb7a04548094fb05ab79efbd9

Merge main remap funcs' bool parameters into a single bitflag.

Too much bools kill bools.

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

M	source/blender/blenkernel/BKE_library.h
M	source/blender/blenkernel/intern/library.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/makesrna/intern/rna_ID.c
M	source/blender/makesrna/intern/rna_main_api.c
M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 9aec4b5..f66e425e 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -58,13 +58,27 @@ void *BKE_libblock_copy(struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 void  BKE_libblock_copy_data(struct ID *id, const struct ID *id_from, const bool do_action);
 void  BKE_libblock_relink(struct ID *id);
 
+/* Also IDRemap->flag. */
+enum {
+	/* Do not remap indirect usages of IDs (that is, when user is some linked data). */
+	ID_REMAP_SKIP_INDIRECT_USAGE    = 1 << 0,
+	/* This flag should always be set, *except for 'unlink' scenarios* (only relevant when new_id == NULL).
+	 * Basically, when unset, NEVER_NULL ID usages will keep pointing to old_id, but (if needed) old_id user count
+	 * will still be decremented. This is mandatory for 'delete ID' case, but in all other situation this would lead
+	 * to invalid user counts! */
+	ID_REMAP_SKIP_NEVER_NULL_USAGE  = 1 << 1,
+	/* This tells the callback func to flag with LIB_DOIT all IDs using target one with a 'never NULL' pointer
+	 * (like e.g. Object->data). */
+	ID_REMAP_FLAG_NEVER_NULL_USAGE  = 1 << 2,
+};
+
 /* Note: Requiring new_id to be non-null, this *may* not be the case ultimately, but makes things simpler for now. */
 void BKE_libblock_remap_locked(
         struct Main *bmain, void *old_idv, void *new_idv,
-        const bool skip_indirect_usage, const bool us_min_never_null, const bool do_flag_never_null) ATTR_NONNULL(1, 2);
+        const short remap_flags) ATTR_NONNULL(1, 2);
 void BKE_libblock_remap(
         struct Main *bmain, void *old_idv, void *new_idv,
-        const bool skip_indirect_usage, const bool us_min_never_null, const bool do_flag_never_null) ATTR_NONNULL(1, 2);
+        const short remap_flags) ATTR_NONNULL(1, 2);
 
 void BKE_libblock_unlink(struct Main *bmain, void *idv, const bool do_flag_never_null) ATTR_NONNULL();
 
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index a5f6503..ba2a919 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -189,6 +189,7 @@ static void id_us_clear_real(ID *id)
 			const int limit = ID_FAKE_USERS(id);
 			id->us--;
 			BLI_assert(id->us >= limit);
+			UNUSED_VARS_NDEBUG(limit);
 		}
 		id->flag2 &= ~(LIB_EXTRAUSER | LIB_EXTRAUSER_SET);
 	}
@@ -1048,21 +1049,9 @@ typedef struct IDRemap {
 	int skipped_refcounted;  /* Number of skipped usecases that refcount the datablock. */
 } IDRemap;
 
-/* IDRemp->flag */
-enum {
-	/* Do not remap indirect usages of IDs (that is, when user is some linked data). */
-	ID_REMAP_SKIP_INDIRECT_USAGE    = 1 << 0,
-	/* This flag should always be set, *except for 'unlink' scenarios* (only relevant when new_id == NULL).
-	 * Basically, when unset, NEVER_NULL ID usages will keep pointing to old_id, but (if needed) old_id user count
-	 * will still be decremented. This is mandatory for 'delete ID' case, but in all other situation this would lead
-	 * to invalid user counts! */
-	ID_REMAP_SKIP_NEVER_NULL_USAGE  = 1 << 1,
-	/* This tells the callback func to flag with LIB_DOIT all IDs using target one with a 'never NULL' pointer
-	 * (like e.g. Object->data). */
-	ID_REMAP_FLAG_NEVER_NULL_USAGE  = 1 << 2,
-};
+/* IDRemap->flag enums defined in BKE_library.h */
 
-/* IDRemp->status */
+/* IDRemap->status */
 enum {
 	/* *** Set by callback. *** */
 	ID_REMAP_IS_LINKED_DIRECT       = 1 << 0,  /* new_id is directly linked in current .blend. */
@@ -1245,14 +1234,11 @@ static void libblock_remap_data(
  */
 void BKE_libblock_remap_locked(
         Main *bmain, void *old_idv, void *new_idv,
-        const bool skip_indirect_usage, const bool us_min_never_null, const bool do_flag_never_null)
+        const short remap_flags)
 {
 	IDRemap id_remap_data;
 	ID *old_id = old_idv;
 	ID *new_id = new_idv;
-	int remap_flags = ((skip_indirect_usage ? ID_REMAP_SKIP_INDIRECT_USAGE : 0) |
-	                   (do_flag_never_null ? ID_REMAP_FLAG_NEVER_NULL_USAGE : 0) |
-	                   (us_min_never_null ? 0 : ID_REMAP_SKIP_NEVER_NULL_USAGE));
 	int skipped_direct, skipped_refcounted;
 
 	BLI_assert(old_id != NULL);
@@ -1357,23 +1343,29 @@ void BKE_libblock_remap_locked(
 	DAG_relations_tag_update(bmain);
 }
 
-void BKE_libblock_remap(
-        Main *bmain, void *old_idv, void *new_idv,
-        const bool skip_indirect_usage, const bool us_min_never_null, const bool do_flag_never_null)
+void BKE_libblock_remap(Main *bmain, void *old_idv, void *new_idv, const short remap_flags)
 {
 	BKE_main_lock(bmain);
 
-	BKE_libblock_remap_locked(bmain, old_idv, new_idv, skip_indirect_usage, us_min_never_null, do_flag_never_null);
+	BKE_libblock_remap_locked(bmain, old_idv, new_idv, remap_flags);
 
 	BKE_main_unlock(bmain);
 }
 
-/** Unlink given \a id from given \a bmain (does not touch to indirect, i.e. library, usages of the ID). */
+/**
+ * Unlink given \a id from given \a bmain (does not touch to indirect, i.e. library, usages of the ID).
+ *
+ * \param do_flag_never_null If true, all IDs using \a idv in a 'non-NULL' way are flagged by \a LIB_DOIT flag
+ *                           (quite obviously, 'non-NULL' usages can never be unlinked by this function...).
+ */
 void BKE_libblock_unlink(Main *bmain, void *idv, const bool do_flag_never_null)
 {
+	const short remap_flags = ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_INDIRECT_USAGE |
+	                          (do_flag_never_null ? ID_REMAP_FLAG_NEVER_NULL_USAGE : 0);
+
 	BKE_main_lock(bmain);
 
-	BKE_libblock_remap_locked(bmain, idv, NULL, true, false, do_flag_never_null);
+	BKE_libblock_remap_locked(bmain, idv, NULL, remap_flags);
 
 	BKE_main_unlock(bmain);
 }
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index d491dfe..16e5d12 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1747,7 +1747,7 @@ bool ED_screen_delete_scene(bContext *C, Scene *scene)
 
 	ED_screen_set_scene(C, CTX_wm_screen(C), newscene);
 
-	BKE_libblock_remap(bmain, scene, newscene, true, false, false);
+	BKE_libblock_remap(bmain, scene, newscene, ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
 
 	BKE_libblock_free(bmain, scene);
 
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index 92ddbd4..e854f4f 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -1388,7 +1388,8 @@ static void remap_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUS
 	ID *new_id = user_data;
 
 	if (tselem->id && (tselem->id != new_id) && (GS(tselem->id->name) == GS(new_id->name))) {
-		BKE_libblock_remap(CTX_data_main(C), tselem->id, new_id, true, false, false);
+		BKE_libblock_remap(CTX_data_main(C), tselem->id, new_id,
+		                   ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
 	}
 }
 
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index 8ec673e..9be9cee 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -342,7 +342,8 @@ static void rna_ID_delete(ID *id, Main *bmain)
 static void rna_ID_user_remap(ID *id, Main *bmain, ID *new_id)
 {
 	if (GS(id->name) == GS(new_id->name)) {
-		BKE_libblock_remap(bmain, id, new_id, true, false, false);  /* Now, do not allow remapping data in linked data from here... */
+		/* For now, do not allow remapping data in linked data from here... */
+		BKE_libblock_remap(bmain, id, new_id, ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
 	}
 }
 
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index afb2875..25d448c 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -160,7 +160,7 @@ static void rna_Main_scenes_remove(Main *bmain, bContext *C, ReportList *reports
 
 		}
 
-		BKE_libblock_remap(bmain, scene, scene_new, true, false, false);
+		BKE_libblock_remap(bmain, scene, scene_new, ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
 		BKE_libblock_free(bmain, scene);
 		RNA_POINTER_INVALIDATE(scene_ptr);
 	}
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index cbd902c..a9793a5 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -3126,7 +3126,7 @@ static int wm_lib_relocate_exec_do(bContext *C, wmOperator *op, const bool reloa
 				if (new_id) {
 //					printf("before remap, old_id users: %d (%p), new_id users: %d (%p)\n", old_id->us, old_id, new_id->us, new_id);
 					/* Note that here, we also want to replace indirect usages. */
-					BKE_libblock_remap_locked(bmain, old_id, new_id, false, false, false);
+					BKE_libblock_remap_locked(bmain, old_id, new_id, ID_REMAP_SKIP_NEVER_NULL_USAGE);
 
 //					printf("after remap, old_id users: %d, new_id users: %d\n", old_id->us, new_id->us);
 
@@ -3255,7 +3255,8 @@ static int wm_lib_relocate_exec_do(bContext *C, wmOperator *op, const bool reloa
 				BLI_assert(old_id);
 				if (new_id) {
 //					printf("before remap, old_id users: %d, new_id users: %d\n", old_id->us, new_id->us);
-					BKE_libblock_remap_locked(bmain, old_id, new_id, true, false, false);
+					BKE_libblock_remap_locked(bmain, old_id, new_id,
+					                          ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
 
 					if (old_id->flag & LIB_FAKEUSER) {
 						id_fake_user_clear(old_id);




More information about the Bf-blender-cvs mailing list