summaryrefslogtreecommitdiff
path: root/include/erebos
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2021-05-08 18:37:07 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2021-05-08 18:37:07 +0200
commit00e52ec8ee38a85737c093d90ebfba5069829608 (patch)
tree967bffe7133fb3266ab99fc44827aeeba8ce5f7d /include/erebos
parentb02dfe41b255ac663c3ac3a4475a4933186de1e7 (diff)
FRP: run callback when starting to watch behavior
Diffstat (limited to 'include/erebos')
-rw-r--r--include/erebos/frp.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/erebos/frp.h b/include/erebos/frp.h
index 8014536..681aee8 100644
--- a/include/erebos/frp.h
+++ b/include/erebos/frp.h
@@ -160,11 +160,18 @@ using Bhv = BhvFun<monostate, A>;
template<typename A>
Watched<A> Bhv<A>::watch(function<void(const A &)> f)
{
+ BhvCurTime ctime;
+ auto & impl = BhvFun<monostate, A>::impl;
+ if (impl->needsUpdate(ctime))
+ impl->doUpdate(ctime);
+
auto cb = make_shared<function<void(const BhvCurTime &)>>(
[impl = BhvFun<monostate, A>::impl, f] (const BhvCurTime & ctime) {
f(impl->get(ctime, monostate()));
});
- BhvFun<monostate, A>::impl->watchers.push_back(cb);
+
+ impl->watchers.push_back(cb);
+ f(impl->get(ctime, monostate()));
return Watched<A>(move(cb));
}