X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=core%2Fproducer%2Fbinding.h;h=17c9cff199a40a306d3125b24d6bbd67d44acab7;hb=5a66feb95182b62ac3ec176ca9b05a29181bcd06;hp=71e31f2035942e76c63336993561ab265b521b73;hpb=578ef643b95a96d64848105c465ccf180b7cf6e6;p=casparcg diff --git a/core/producer/binding.h b/core/producer/binding.h index 71e31f203..17c9cff19 100644 --- a/core/producer/binding.h +++ b/core/producer/binding.h @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -99,7 +100,7 @@ private: mutable bool evaluated_ = false; impl() - : value_() + : value_(boost::value_initialized()) { } @@ -110,7 +111,8 @@ private: template impl(const Expr& expression) - : expression_(expression) + : value_(boost::value_initialized()) + , expression_(expression) { } @@ -142,18 +144,20 @@ private: void evaluate() const override { - if (expression_) + if (bound()) { auto new_value = expression_(); + evaluated_ = true; + if (new_value != value_) { value_ = new_value; on_change(); } } - - evaluated_ = true; + else + evaluated_ = true; } using impl_base::on_change; @@ -182,7 +186,7 @@ private: void unbind() { - if (expression_) + if (bound()) { expression_ = std::function(); dependencies_.clear();