[Bf-blender-cvs] [5b1404f0665] master: Depsgraph: Add utility function to unlink relation from graph

Sergey Sharybin noreply at git.blender.org
Wed Dec 20 16:20:04 CET 2017


Commit: 5b1404f0665d7e110e60ebea8a1029a5f7f15a70
Author: Sergey Sharybin
Date:   Wed Dec 20 16:15:55 2017 +0100
Branches: master
https://developer.blender.org/rB5b1404f0665d7e110e60ebea8a1029a5f7f15a70

Depsgraph: Add utility function to unlink relation from graph

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

M	source/blender/depsgraph/intern/depsgraph.cc
M	source/blender/depsgraph/intern/depsgraph.h

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

diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc
index 2ab6320f14f..9a3b1788aa1 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -51,6 +51,7 @@ extern "C" {
 #include "RNA_access.h"
 }
 
+#include <algorithm>
 #include <cstring>
 
 #include "DEG_depsgraph.h"
@@ -68,6 +69,14 @@ static DEG_EditorUpdateIDCb deg_editor_update_id_cb = NULL;
 static DEG_EditorUpdateSceneCb deg_editor_update_scene_cb = NULL;
 static DEG_EditorUpdateScenePreCb deg_editor_update_scene_pre_cb = NULL;
 
+/* TODO(sergey): Find a better place for this. */
+template <typename T>
+static void remove_from_vector(vector<T> *vector, const T& value)
+{
+	vector->erase(std::remove(vector->begin(), vector->end(), value),
+	              vector->end());
+}
+
 Depsgraph::Depsgraph()
   : time_source(NULL),
     need_update(false),
@@ -391,7 +400,15 @@ DepsRelation::DepsRelation(DepsNode *from,
 DepsRelation::~DepsRelation()
 {
 	/* Sanity check. */
-	BLI_assert(this->from && this->to);
+	BLI_assert(from != NULL && to != NULL);
+}
+
+void DepsRelation::unlink()
+{
+	/* Sanity check. */
+	BLI_assert(from != NULL && to != NULL);
+	remove_from_vector(&from->outlinks, this);
+	remove_from_vector(&to->inlinks, this);
 }
 
 /* Low level tagging -------------------------------------- */
diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h
index be20b20a2ac..ce56d67b6de 100644
--- a/source/blender/depsgraph/intern/depsgraph.h
+++ b/source/blender/depsgraph/intern/depsgraph.h
@@ -84,6 +84,8 @@ struct DepsRelation {
 	             const char *description);
 
 	~DepsRelation();
+
+	void unlink();
 };
 
 /* ********* */



More information about the Bf-blender-cvs mailing list