Skip to content

Commit

Permalink
Add lazy_lift.
Browse files Browse the repository at this point in the history
  • Loading branch information
tmadden committed Aug 8, 2018
1 parent 8317ece commit 8195235
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/alia/signals/application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ lazy_apply(Function const& f, Arg0 const& arg0, Arg1 const& arg1)
Arg1>(f, arg0, arg1);
}

template<class Function>
auto
lazy_lift(Function const& f)
{
return [f](auto&&... args) { return lazy_apply(f, args...); };
}

// alia_method(m) wraps a method name in a lambda so that it can be passed as a
// function object.
#define ALIA_METHOD(m) [](auto const& x) { return x.m(); }
Expand Down
12 changes: 12 additions & 0 deletions unit_tests/signals/application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@ TEST_CASE("lazy_apply", "[signals]")
REQUIRE(s3.value_id() != s4.value_id());
}

TEST_CASE("lazy_lift", "[signals]")
{
auto s = lazy_lift([](int i) { return 2 * i; })(value(1));

typedef decltype(s) signal_t;
REQUIRE(signal_can_read<signal_t>::value);
REQUIRE(!signal_can_write<signal_t>::value);

REQUIRE(signal_is_readable(s));
REQUIRE(read_signal(s) == 2);
}

TEST_CASE("alia_method", "[signals]")
{
auto v = value("test text");
Expand Down

0 comments on commit 8195235

Please sign in to comment.