[Bf-blender-cvs] [da0b2d8ee8f] uuid-undo-experiments: Revert "Rework the whole unique ID system to also store ID addresses history in Main's mapping."
Bastien Montagne
noreply at git.blender.org
Fri Feb 28 15:45:59 CET 2020
Commit: da0b2d8ee8f2a5cc4b603d900e078e3e2da7b4d9
Author: Bastien Montagne
Date: Fri Feb 28 15:24:50 2020 +0100
Branches: uuid-undo-experiments
https://developer.blender.org/rBda0b2d8ee8f2a5cc4b603d900e078e3e2da7b4d9
Revert "Rework the whole unique ID system to also store ID addresses history in Main's mapping."
This reverts commit 726e6972160159cc9d5b2be9cfb618f7362acc81.
===================================================================
M source/blender/blenkernel/BKE_main.h
M source/blender/blenkernel/intern/blender.c
M source/blender/blenkernel/intern/lib_id.c
M source/blender/blenkernel/intern/main.c
M source/blender/blenloader/intern/readfile.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 50db422614b..b6d21643b68 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -51,7 +51,6 @@ struct GHash;
struct GSet;
struct ImBuf;
struct Library;
-struct LinkNode;
struct MainLock;
/* Blender thumbnail, as written on file (width, height, and data as char RGBA). */
@@ -106,9 +105,8 @@ typedef struct Main {
*/
char use_memfile_full_barrier;
- struct GHash *used_id_memhash;
- struct LinkNode *used_id_memhash_history_chains;
- short used_id_memhash_tag;
+ struct GSet *used_id_memset;
+ short used_id_memset_tag;
BlendThumbnail *blen_thumb;
@@ -162,7 +160,7 @@ typedef struct Main {
/* Main.used_id_memory_pointers_tag */
enum {
- MAIN_IDMEMHASH_OWNER = 1 << 0,
+ MAIN_IDMEMSET_OWNER = 1 << 0,
};
struct Main *BKE_main_new(void);
@@ -171,20 +169,22 @@ void BKE_main_free(struct Main *mainvar);
void BKE_main_lock(struct Main *bmain);
void BKE_main_unlock(struct Main *bmain);
-void BKE_main_idmemhash_ensure(struct Main *bmain);
-void BKE_main_idmemhash_release(struct Main *bmain);
-void BKE_main_idmemhash_transfer_ownership(struct Main *bmain_dst, struct Main *bmain_src);
-void BKE_main_idmemhash_usefrom(struct Main *bmain_user, struct Main *bmain_src);
-bool BKE_main_idmemhash_register_id(struct Main *bmain, void *old_vmemh, struct ID *id);
-struct ID *BKE_main_idmemhash_lookup_id(struct Main *bmain,
- void *vmemh,
- struct LinkNode **r_used_id_chain);
-void *BKE_main_idmemhash_unique_alloc(struct Main *bmain,
- void *old_vmemh,
- void *(*alloc_cb)(size_t len, const char *str),
- size_t size,
- const char *message);
-void *BKE_main_idmemhash_unique_realloc(struct Main *bmain, void *old_vmemh, void *vmemh);
+void BKE_main_idmemset_ensure(struct Main *bmain);
+void BKE_main_idmemset_release(struct Main *bmain);
+void BKE_main_idmemset_transfer_ownership(struct Main *bmain_dst, struct Main *bmain_src);
+void BKE_main_idmemset_usefrom(struct Main *bmain_user, struct Main *bmain_src);
+bool BKE_main_idmemset_register_id(struct Main *bmain, struct ID *id);
+void *BKE_main_idmemset_unique_alloc(struct Main *bmain,
+ void *(*alloc_cb)(size_t len, const char *str),
+ size_t size,
+ const char *message);
+void *BKE_main_idmemset_unique_realloc(struct Main *bmain,
+ void *vmemh,
+ void *(*realloc_cb)(void *vmemh,
+ size_t len,
+ const char *str),
+ size_t size,
+ const char *message);
void BKE_main_relations_create(struct Main *bmain, const short flag);
void BKE_main_relations_free(struct Main *bmain);
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index a828ede92bb..7a145f41c32 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -127,7 +127,7 @@ void BKE_blender_globals_init(void)
U.savetime = 1;
G_MAIN = BKE_main_new();
- BKE_main_idmemhash_ensure(G_MAIN);
+ BKE_main_idmemset_ensure(G_MAIN);
strcpy(G.ima, "//");
diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c
index 09ff670e81c..132f86755b6 100644
--- a/source/blender/blenkernel/intern/lib_id.c
+++ b/source/blender/blenkernel/intern/lib_id.c
@@ -1198,7 +1198,7 @@ void *BKE_libblock_alloc_notest(Main *bmain, short type)
const char *name;
size_t size = BKE_libblock_get_alloc_info(type, &name);
if (size != 0) {
- return BKE_main_idmemhash_unique_alloc(bmain, NULL, MEM_callocN, size, name);
+ return BKE_main_idmemset_unique_alloc(bmain, MEM_callocN, size, name);
}
BLI_assert(!"Request to allocate unknown data type");
return NULL;
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index 12ee548c871..bf7d7fc00ab 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -29,7 +29,6 @@
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
-#include "BLI_linklist.h"
#include "BLI_mempool.h"
#include "BLI_threads.h"
@@ -195,7 +194,7 @@ void BKE_main_free(Main *mainvar)
BKE_main_relations_free(mainvar);
}
- BKE_main_idmemhash_release(mainvar);
+ BKE_main_idmemset_release(mainvar);
BLI_spin_end((SpinLock *)mainvar->lock);
MEM_freeN(mainvar->lock);
@@ -212,121 +211,64 @@ void BKE_main_unlock(struct Main *bmain)
BLI_spin_unlock((SpinLock *)bmain->lock);
}
-void BKE_main_idmemhash_ensure(Main *bmain)
+void BKE_main_idmemset_ensure(Main *bmain)
{
- if (bmain->used_id_memhash == NULL || (bmain->used_id_memhash_tag & MAIN_IDMEMHASH_OWNER) == 0) {
- bmain->used_id_memhash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
- bmain->used_id_memhash_history_chains = NULL;
- bmain->used_id_memhash_tag |= MAIN_IDMEMHASH_OWNER;
+ if (bmain->used_id_memset == NULL || (bmain->used_id_memset_tag & MAIN_IDMEMSET_OWNER) == 0) {
+ bmain->used_id_memset = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+ bmain->used_id_memset_tag |= MAIN_IDMEMSET_OWNER;
}
}
-static void main_idmemhash_history_chains_free(void *linkv)
+void BKE_main_idmemset_release(Main *bmain)
{
- LinkNode *link = linkv;
- BLI_linklist_free(link, NULL);
-}
-
-void BKE_main_idmemhash_release(Main *bmain)
-{
- if (bmain->used_id_memhash != NULL) {
- if ((bmain->used_id_memhash_tag & MAIN_IDMEMHASH_OWNER) != 0) {
- BLI_ghash_free(bmain->used_id_memhash, NULL, NULL);
- BLI_linklist_free(bmain->used_id_memhash_history_chains, main_idmemhash_history_chains_free);
+ if (bmain->used_id_memset != NULL) {
+ if ((bmain->used_id_memset_tag & MAIN_IDMEMSET_OWNER) != 0) {
+ BLI_gset_free(bmain->used_id_memset, NULL);
}
- bmain->used_id_memhash = NULL;
- bmain->used_id_memhash_history_chains = NULL;
- bmain->used_id_memhash_tag &= ~MAIN_IDMEMHASH_OWNER;
+ bmain->used_id_memset = NULL;
+ bmain->used_id_memset_tag &= ~MAIN_IDMEMSET_OWNER;
}
}
-void BKE_main_idmemhash_transfer_ownership(Main *bmain_dst, Main *bmain_src)
+void BKE_main_idmemset_transfer_ownership(Main *bmain_dst, Main *bmain_src)
{
- BKE_main_idmemhash_release(bmain_dst);
+ BKE_main_idmemset_release(bmain_dst);
- BLI_assert(bmain_src->used_id_memhash != NULL);
- BLI_assert(bmain_src->used_id_memhash_tag & MAIN_IDMEMHASH_OWNER);
+ BLI_assert(bmain_src->used_id_memset != NULL);
+ BLI_assert(bmain_src->used_id_memset_tag & MAIN_IDMEMSET_OWNER);
- bmain_dst->used_id_memhash = bmain_src->used_id_memhash;
- bmain_dst->used_id_memhash_history_chains = bmain_src->used_id_memhash_history_chains;
- bmain_dst->used_id_memhash_tag |= MAIN_IDMEMHASH_OWNER;
- bmain_src->used_id_memhash_tag &= ~MAIN_IDMEMHASH_OWNER;
+ bmain_dst->used_id_memset = bmain_src->used_id_memset;
+ bmain_dst->used_id_memset_tag |= MAIN_IDMEMSET_OWNER;
+ bmain_src->used_id_memset_tag &= ~MAIN_IDMEMSET_OWNER;
}
-void BKE_main_idmemhash_usefrom(Main *bmain_user, Main *bmain_src)
+void BKE_main_idmemset_usefrom(Main *bmain_user, Main *bmain_src)
{
- BKE_main_idmemhash_release(bmain_user);
+ BKE_main_idmemset_release(bmain_user);
- BLI_assert(bmain_src->used_id_memhash != NULL);
- bmain_user->used_id_memhash = bmain_src->used_id_memhash;
- bmain_user->used_id_memhash_history_chains = bmain_src->used_id_memhash_history_chains;
+ BLI_assert(bmain_src->used_id_memset != NULL);
+ bmain_user->used_id_memset = bmain_src->used_id_memset;
}
/**
* @return true if the ID was successfully added to the memset, false if it already existed.
*/
-bool BKE_main_idmemhash_register_id(Main *bmain, void *old_vmemh, ID *id)
+bool BKE_main_idmemset_register_id(Main *bmain, ID *id)
{
- BLI_assert(bmain->used_id_memhash != NULL);
- BLI_assert(old_vmemh != id);
- void **val;
- if (!BLI_ghash_ensure_p(bmain->used_id_memhash, id, &val)) {
- if (old_vmemh != NULL) {
- LinkNode **chain_hook = (LinkNode **)BLI_ghash_lookup_p(bmain->used_id_memhash, old_vmemh);
- BLI_assert(chain_hook != NULL);
- if (*chain_hook == NULL) {
- /* That datablock only ever had one address so far, we need to initialize its addresses
- * history chain. */
- *chain_hook = MEM_callocN(sizeof(**chain_hook), __func__);
- LinkNode *old_id_entry = MEM_mallocN(sizeof(*old_id_entry), __func__);
- old_id_entry->link = old_vmemh;
- old_id_entry->next = NULL;
- BLI_linklist_prepend_nlink(
- &bmain->used_id_memhash_history_chains, old_id_entry, *chain_hook);
- }
- LinkNode *curr_id_entry = MEM_mallocN(sizeof(*curr_id_entry), __func__);
- BLI_linklist_prepend_nlink((LinkNode **)&(*chain_hook)->link, id, curr_id_entry);
- *val = *chain_hook;
- }
- else {
- *val = NULL;
- }
- return true;
- }
- return false;
-}
-
-/**
- * Lookup a random ID memory address, and return its last known valid instance, and the linked list
- * of all its known addresses so far.
- *
- * \param r_used_id_chain If not NULL, and that address has had several previous instances, the
- * linked list storing all of those.
- * \return The last known instance address matching given \a vmemh pointer, or vmemh itself if it
- * is unknown.
- */
-ID *BKE_main_idmemhash_lookup_id(Main *bmain, void *vmemh, LinkNode **r_used_id_chain)
-{
- LinkNode *used_id_chain_hook = BLI_ghash_lookup(bmain->used_id_memhash, vmemh);
- LinkNode *used_id_chain = used_id_chain_hook ? used_id_chain_hook->link : NULL;
- if (r_used_id_chain != NULL) {
- *r_used_id_chain = used_id_chain;
- }
- /* The last valid address should always be
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list