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 #include #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 +static void remove_from_vector(vector *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(); }; /* ********* */