lager
lager copied to clipboard
C++ library for value-oriented design using the unidirectional data-flow architecture — Redux for C++
If we modify the counter example slightly, we can demonstrate this behavior. `counter.hpp`: ``` inline model update(model c, action action) { return std::visit(lager::visitor{ [&](increment_action) { return model{c.value + 1}; },...
In deps.hpp, we see this method starting at line 399 ``` template auto merge(deps other) { return boost::hana::unpack( boost::hana::union_(spec_map, deps::spec_map), [&](auto... ts) { using deps_t = deps; return deps_t{*this, std::move(other)};...
It could be a call to `nudge()` somewhere here: https://github.com/arximboldi/lager/blob/master/lager/watch.hpp#L66-L82
#128 introduced a new feature to be able to track the completion of reduction of actions and effects. This introduces certain overhead, so it is made optional per store using...
Consider a scenario: ```c++ lager::reader parent = ...; lager::reader child1 = paren[k0]; lager::reader child2 = paren[k1]; ... lager::reader childN = parent[kN]; ``` At the moment, whenever any value changes inside...
As Qt6 is out, the examples could be updated to the newer version. The following blog posts describe best practices. https://www.qt.io/blog/introduction-to-the-qml-cmake-api https://www.qt.io/blog/qml-modules-in-qt-6.2 A standalone setup of snake and the todo...
I was trying to do sth like this (more objects are actually involved inside the component, plus some functionality for my Component, irrelevant to the issue though): ``` class Component...
Hi! Thank you a lot for the awesome library! Can you please make a release of the library? It'll help a lot with packaging your library in Conan. Thank you!
Observed in [optional.hpp](https://github.com/arximboldi/lager/blob/master/lager/lenses/optional.hpp#L29), using `bind_opt` in a `lager::set` caused a use-after-move UB, resulting in a default constructed `whole` being written back.
I think this is an example of this behavior: ```cpp auto x = state(0); x.set(42); auto y = x.xform(zug::map([](auto x) { return x; })); assert(y.get() == 0); // fails, returns...