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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to