6#ifndef KISOPTIONTUPLE_H
7#define KISOPTIONTUPLE_H
10#include <boost/operators.hpp>
11#include <boost/tti/has_static_member_data.hpp>
15BOOST_TTI_HAS_STATIC_MEMBER_DATA(supports_prefix)
21template <typename T, bool has_member = has_static_member_data_supports_prefix<T, const bool>::value>
26 : std::bool_constant<false>
32 : std::bool_constant<T::supports_prefix>
39template <
typename... T>
48template <
typename... T>
54template <
bool allSupportPrefix,
bool noneSupportPrefix,
typename... Data>
57 static_assert (allSupportPrefix || noneSupportPrefix,
58 "Either **all** or **none** arguments of KisOptionTuple should define 'supports_prefix'");
64template <
typename FirstData,
typename... RestData>
68 public boost::equality_comparable<KisOptionTupleImpl<true, false, FirstData, RestData...>>
70 template <
typename... T>
72 : FirstData(prefix,
std::forward<decltype(args)>(args)...),
81 return ((
static_cast<const FirstData&
>(lhs) ==
static_cast<const FirstData&
>(rhs)) && ... &&
82 (
static_cast<const RestData&
>(lhs) ==
static_cast<const RestData&
>(rhs)));
87 return (
static_cast<FirstData&
>(*this).read(setting) && ... &&
88 static_cast<RestData&
>(*this).read(setting));
93 (
static_cast<const FirstData&
>(*this).write(setting) , ... ,
94 static_cast<const RestData&
>(*this).write(setting));
102template <
typename... Data>
105 public boost::equality_comparable<KisOptionTupleImpl<false, true, Data...>>
107 template <
typename... T>
109 :
kismpl::first_type_t<Data...>(
std::forward<decltype(args)>(args)...)
117 return ((
static_cast<const Data&
>(lhs) ==
static_cast<const Data&
>(rhs)) && ... );
122 return (
static_cast<Data&
>(*this).read(setting) && ... );
127 (
static_cast<const Data&
>(*this).write(setting) , ... );
173template <
typename... Data>
float value(const T *src, size_t ch)
friend bool operator==(const KisOptionTupleImpl< false, true, Data... > &lhs, const KisOptionTupleImpl< false, true, Data... > &rhs)
void write(KisPropertiesConfiguration *setting) const
bool read(const KisPropertiesConfiguration *setting)
KisOptionTupleImpl(T... args)
friend bool operator==(const KisOptionTupleImpl< true, false, FirstData, RestData... > &lhs, const KisOptionTupleImpl< true, false, FirstData, RestData... > &rhs)
bool read(const KisPropertiesConfiguration *setting)
void write(KisPropertiesConfiguration *setting) const
KisOptionTupleImpl(const QString &prefix, T... args)
static constexpr bool value
static constexpr bool value