[Bf-blender-cvs] [5fd97c6] id-remap: Move remapping functions into BKE_library_remap.h

Campbell Barton noreply at git.blender.org
Thu Jun 16 12:36:13 CEST 2016


Commit: 5fd97c6e857d44783cc919f8dd58c46b5cf84ef6
Author: Campbell Barton
Date:   Thu Jun 16 20:28:54 2016 +1000
Branches: id-remap
https://developer.blender.org/rB5fd97c6e857d44783cc919f8dd58c46b5cf84ef6

Move remapping functions into BKE_library_remap.h

This is done since remapping is quite an involved process.

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

M	source/blender/blenkernel/BKE_library.h
A	source/blender/blenkernel/BKE_library_remap.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/library.c
A	source/blender/blenkernel/intern/library_remap.c
M	source/blender/editors/object/object_group.c
M	source/blender/editors/render/render_preview.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/space_outliner/outliner_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_files_link.c
M	source/blender/windowmanager/intern/wm_init_exit.c

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

diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index bf9a144..56f040a 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -60,45 +60,16 @@ void  BKE_libblock_relink(struct ID *id);
 void  BKE_libblock_rename(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL();
 void  BLI_libblock_ensure_unique_name(struct Main *bmain, const char *name) ATTR_NONNULL();
 
+struct ID *BKE_libblock_find_name_ex(struct Main *bmain, const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+struct ID *BKE_libblock_find_name(const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+
+/* library_remap.c (keep here since they're general functions) */
 void  BKE_libblock_free(struct Main *bmain, void *idv) ATTR_NONNULL();
 void  BKE_libblock_free_ex(struct Main *bmain, void *idv, bool do_id_user) ATTR_NONNULL();
 void  BKE_libblock_free_us(struct Main *bmain, void *idv) ATTR_NONNULL();
 void  BKE_libblock_free_data(struct Main *bmain, struct ID *id) ATTR_NONNULL();
-
 void  BKE_libblock_delete(struct Main *bmain, void *idv) ATTR_NONNULL();
 
-struct ID *BKE_libblock_find_name_ex(struct Main *bmain, const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-struct ID *BKE_libblock_find_name(const short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-
-/* 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,
-	/* This tells the callback func to force setting IDs using target one with a 'never NULL' pointer to NULL.
-	 * WARNING! Use with extreme care, this will leave database in broken state! */
-	ID_REMAP_FORCE_NEVER_NULL_USAGE = 1 << 3,
-};
-
-/* 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 short remap_flags) ATTR_NONNULL(1, 2);
-void BKE_libblock_remap(
-        struct Main *bmain, void *old_idv, void *new_idv,
-        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();
-
-void BKE_libblock_relink_ex(void *idv, void *old_idv, void *new_idv, const bool us_min_never_null) ATTR_NONNULL(1);
-
 void BKE_id_lib_local_paths(struct Main *bmain, struct Library *lib, struct ID *id);
 void id_lib_extern(struct ID *id);
 void BKE_library_filepath_set(struct Library *lib, const char *filepath);
@@ -149,16 +120,11 @@ void BKE_main_lib_objects_recalc_all(struct Main *bmain);
 /* (MAX_ID_NAME - 2) + 3 */
 void BKE_id_ui_prefix(char name[66 + 1], const struct ID *id);
 
+void BKE_library_free(struct Library *lib);
+
 void BKE_library_make_local(
         struct Main *bmain, const struct Library *lib, const bool untagged_only, const bool set_fake);
 
-typedef void (*BKE_library_free_window_manager_cb)(struct bContext *, struct wmWindowManager *);
-typedef void (*BKE_library_free_notifier_reference_cb)(const void *);
-typedef void (*BKE_library_remap_editor_id_reference_cb)(struct ID *, struct ID *);
-
-void BKE_library_callback_free_window_manager_set(BKE_library_free_window_manager_cb func);
-void BKE_library_callback_free_notifier_reference_set(BKE_library_free_notifier_reference_cb func);
-void BKE_library_callback_remap_editor_id_reference_set(BKE_library_remap_editor_id_reference_cb func);
 
 /* use when "" is given to new_id() */
 #define ID_FALLBACK_NAME N_("Untitled")
diff --git a/source/blender/blenkernel/BKE_library_remap.h b/source/blender/blenkernel/BKE_library_remap.h
new file mode 100644
index 0000000..e85a3e6
--- /dev/null
+++ b/source/blender/blenkernel/BKE_library_remap.h
@@ -0,0 +1,76 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __BKE_LIBRARY_REMAP_H__
+#define __BKE_LIBRARY_REMAP_H__
+
+/** \file BKE_library_remap.h
+ *  \ingroup bke
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "BLI_compiler_attrs.h"
+
+/* BKE_libblock_free, delete are declared in BKE_library.h for convenience. */
+
+/* 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,
+	/* This tells the callback func to force setting IDs using target one with a 'never NULL' pointer to NULL.
+	 * WARNING! Use with extreme care, this will leave database in broken state! */
+	ID_REMAP_FORCE_NEVER_NULL_USAGE = 1 << 3,
+};
+
+/* 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 short remap_flags) ATTR_NONNULL(1, 2);
+void BKE_libblock_remap(
+        struct Main *bmain, void *old_idv, void *new_idv,
+        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();
+
+void BKE_libblock_relink_ex(void *idv, void *old_idv, void *new_idv, const bool us_min_never_null) ATTR_NONNULL(1);
+
+
+typedef void (*BKE_library_free_window_manager_cb)(struct bContext *, struct wmWindowManager *);
+typedef void (*BKE_library_free_notifier_reference_cb)(const void *);
+typedef void (*BKE_library_remap_editor_id_reference_cb)(struct ID *, struct ID *);
+
+void BKE_library_callback_free_window_manager_set(BKE_library_free_window_manager_cb func);
+void BKE_library_callback_free_notifier_reference_set(BKE_library_free_notifier_reference_cb func);
+void BKE_library_callback_remap_editor_id_reference_set(BKE_library_remap_editor_id_reference_cb func);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __BKE_LIBRARY_REMAP_H__ */
\ No newline at end of file
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 8626422..02bdcc5 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -123,6 +123,7 @@ set(SRC
 	intern/library.c
 	intern/library_idmap.c
 	intern/library_query.c
+	intern/library_remap.c
 	intern/linestyle.c
 	intern/mask.c
 	intern/mask_evaluate.c
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 57c32b0..97822ae 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -1077,657 +1077,12 @@ void BKE_libblock_relink(ID *id)
 	BKE_library_foreach_ID_link(id, id_relink_looper, NULL, 0);
 }
 
-static void BKE_library_free(Library *lib)
+void BKE_library_free(Library *lib)
 {
 	if (lib->packedfile)
 		freePackedFile(lib->packedfile);
 }
 
-static BKE_library_free_window_manager_cb free_windowmanager_cb = NULL;
-
-void BKE_library_callback_free_window_manager_set(BKE_library_free_window_manager_cb func)
-{
-	free_windowmanager_cb = func;
-}
-
-static BKE_library_free_notifier_reference_cb free_notifier_reference_cb = NULL;
-
-void BKE_library_callback_free_notifier_reference_set(BKE_library_free_notifier_reference_cb func)
-{
-	free_notifier_reference_cb = func;
-}
-
-static BKE_library_remap_editor_id_reference_cb remap_editor_id_reference_cb = NULL;
-
-void BKE_library_callback_remap_editor_id_reference_set(BKE_library_remap_editor_id_reference_cb func)
-{
-	remap_editor_id_reference_cb = func;
-}
-
-typedef struct IDRemap {
-	ID *old_id;
-	ID *new_id;
-	ID *id;  /* The ID in which we are replacing old_id by new_id usages. */
-	short flag;
-
-	/* 'Output' data. */
-	short status;
-	int skipped_direct;  /* Number of direct usecases that could not be remapped (e.g.: obdata when in edit mode). */
-	int skipped_indirect;  /* Number of indirect usecases that could not be remapped. */
-	int skipped_refcounted;  /* Number of skipped usecases that refcount the datablock. */
-} IDRemap;
-
-/* IDRemap->flag enums defined in BKE_library.h */
-
-/* IDRemap->status */
-enum {
-	/* *** Set by callback. *** */
-	ID_REMAP_IS_LINKED_DIRECT       = 1 << 0,  /* new_id is directly linked in current .blend. */
-	ID_REMAP_IS_USER_ONE_SKIPPED    = 1 << 1,  /* There was some

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list