7 #ifndef _QITYPE_DETAIL_PROPERTY_HXX_
8 #define _QITYPE_DETAIL_PROPERTY_HXX_
10 #include <boost/thread/locks.hpp>
31 :
SignalF<void(const T&)>(std::move(onsubscribe))
32 , _getter(std::move(getter))
33 , _setter(std::move(setter))
42 :
SignalF<void(const T&)>(execContext, std::move(onsubscribe))
43 , _getter(std::move(getter))
44 , _setter(std::move(setter))
52 :
SignalF<void(const T&)>(std::move(onsubscribe))
53 , _getter(std::move(getter))
54 , _setter(std::move(setter))
55 , _value(defaultValue.to<T>())
65 :
SignalF<void(const T&)>(execContext, std::move(onsubscribe))
66 , _getter(std::move(getter))
67 , _setter(std::move(setter))
68 , _value(defaultValue.to<T>())
76 return _getter(boost::ref(_value));
83 qiLogDebug(
"qitype.property") <<
"set " <<
this <<
" " << (!!_setter);
86 const bool ok = _setter(boost::ref(_value), v);
120 this->setImpl(value.
to<T>());
135 return strand().async(
track([
this]{
return this->getImpl(); }, &_tracked));
141 return strand().async(
track([
this, v]{ this->setImpl(v); }, &_tracked));
147 return strand().async(
track([
this]{
return AnyValue::from(this->getImpl()); }, &_tracked));
153 const auto v = value.
to<T>();
154 return strand().async(
track([
this, v]{ this->setImpl(v); }, &_tracked));
160 struct Src : boost::static_visitor<Strand&>, ka::src_t {};
161 return boost::apply_visitor(Src{}, _strand);
167 struct JoinStrand : boost::static_visitor<void>
169 void operator()(Strand*)
const
174 void operator()(Strand& strand)
const
179 boost::apply_visitor(JoinStrand{}, _strand);
183 #endif // _QITYPE_DETAIL_PROPERTY_HXX_
FutureSync< AnyValue > value() const override
FutureSync< void > setValue(AutoAnyReference value) override
auto track(F &&f, T &&toTrack) -> decltype(trackWithFallback(detail::throwPointerLockException, std::forward< F >(f), std::forward< T >(toTrack)))
UniqueAnyReference convert(TypeInterface *targetType) const
static AnyValue from(const T &r)
FutureSync< T > get() const override
boost::function< T(boost::reference_wrapper< const T >)> Getter
#define QI_NOEXCEPT(cond)
Specify that a function may throw or not. Do nothing if noexcept is not available.
FutureSync< void > setValue(AutoAnyReference value) override
boost::function< bool(boost::reference_wrapper< T >, const T &)> Setter
T to() const
Convert to anything or throw trying.
boost::function< Future< void >(bool)> OnSubscribers
TypeInterface * type() const
FutureSync< void > set(const T &v) override
PropertyImpl(Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
const char * infoString()
FutureSync< void > set(const T &v) override
FutureSync< void > set(const AnyValue &v) override
FutureSync< T > get() const override
FutureSync< AnyValue > value() const override
void clearExecutionContext()