14#include <lager/lenses.hpp>
15#include <lager/reader.hpp>
34template <
typename Func,
typename... Cursors,
36 typename T =
typename FirstCursor::value_type>
38 auto fold_func = [func] (
const auto &lhs,
const auto &rhs) {
39 return lager::with(lhs, rhs).map(func);
48 return lager::lenses::getset(
49 [multiplier] (T
value) {
return value * multiplier; },
50 [multiplier] (T, T
value) {
return value / multiplier; }
55 return lager::lenses::getset(
56 [multiplier] (
int value) {
return value * multiplier; },
57 [multiplier] (int, qreal
value) {
return qRound(
value / multiplier); }
62 return lager::lenses::getset(
63 [multiplier] (qreal
value) {
return qRound(
value * multiplier); },
64 [multiplier] (qreal,
int value) {
return value / multiplier; }
68template <
typename Src,
typename Dst,
typename SrcConstRef = std::add_lvalue_reference_t<std::add_const_t<Src>>>
70 [] (SrcConstRef
value) {
return static_cast<Dst
>(
value); },
71 [] (Src, Dst
value) {
return static_cast<Src
>(
value); }
81template <
typename Derived,
typename Base,
82 typename = std::enable_if_t<
83 std::is_base_of_v<Base, Derived>>>
85 [] (
const Derived &
value) -> Base {
return static_cast<const Base&
>(
value); },
86 [] (Derived src,
const Base &
value) {
static_cast<Base&
>(src) =
value;
return src; }
97template <
typename Base>
99 [] (
const auto &
value) -> Base {
return static_cast<const Base&
>(
value); },
100 [] (
auto src,
const Base &
value) {
static_cast<Base&
>(src) =
value;
return src; }
104auto variant_to = lager::lenses::getset(
105 [] (
const QVariant &src) {
106 return src.value<T>();
108 [] (QVariant src,
const T &
value) {
109 src = QVariant::fromValue<T>(
value);
115 return lager::lenses::getset(
116 [](
bool value) ->
bool {
119 [](bool,
bool value) ->
bool {
float value(const T *src, size_t ch)
constexpr auto logical_not
constexpr auto scale_real_to_int
constexpr auto scale_int_to_real
std::optional< lager::reader< T > > fold_optional_cursors(const Func &func, Cursors &&...cursors)
std::optional< T > fold_optional(Fun &&fun, Args &&...args)
typename first_type< T... >::type first_type_t