7 #ifndef _QI_PROPERTY_HPP_
8 #define _QI_PROPERTY_HPP_
10 #include <boost/function.hpp>
11 #include <boost/thread/mutex.hpp>
12 #include <boost/variant.hpp>
13 #include <ka/mutablestore.hpp>
19 # pragma warning( push )
21 # pragma warning( disable: 4251 )
23 # pragma warning( disable: 4275 )
51 bool operator()(boost::reference_wrapper<T> ref_to_current_value,
const T& newValue)
const {
52 T& currentValue = ref_to_current_value;
53 if (currentValue != newValue)
55 currentValue = newValue;
71 using Setter = boost::function<bool (boost::reference_wrapper<T>,
const T&)>;
72 using Getter = boost::function<T(boost::reference_wrapper<const T>)>;
132 :
PropertyImpl<T>(std::move(getter), std::move(setter), std::move(onsubscribe))
137 :
PropertyImpl<T>(std::move(defaultValue), std::move(getter), std::move(setter), std::move(onsubscribe))
168 :
PropertyImpl<T>(std::move(getter), std::move(setter), std::move(onsubscribe))
177 :
PropertyImpl<T>(&strand, std::move(getter), std::move(setter), std::move(onsubscribe))
186 :
PropertyImpl<T>(std::move(defaultValue), std::move(getter), std::move(setter), std::move(onsubscribe))
200 std::move(onsubscribe))
221 mutable Tracked _tracked;
223 Strand& strand()
const;
233 mutable boost::variant<Strand, Strand*> _strand;
250 template<
typename... Args>
252 :
Property<AnyValue>(defaultValue, ka::fwd<Args>(args)...)
253 , _type{ defaultValue.
type() }
268 template<
typename... Args>
282 return set(AnyValue(value,
false,
false));
301 # pragma warning( pop )
304 #endif // _QITYPE_PROPERTY_HPP_
FutureSync< AnyValue > value() const override
void setValue(qi::Promise< R > &p, const boost::function< R()> &f)
GenericProperty & operator=(const AnyValue &v)
FutureSync< void > setValue(AutoAnyReference value) override
SignalBase * signal() override
void _setSignature(const Signature &s)
typename ImplType::Getter Getter
Property(AutoAnyReference defaultValue, Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
Property(AutoAnyReference defaultValue, Strand &strand, Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
typename ImplType::Getter Getter
boost::function< qi::ServiceDirectoryProxy::Status(boost::reference_wrapper< const qi::ServiceDirectoryProxy::Status >)> Getter
UnsafeProperty(AutoAnyReference defaultValue, Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
#define QI_NOEXCEPT(cond)
Specify that a function may throw or not. Do nothing if noexcept is not available.
typename ImplType::Setter Setter
FutureSync< void > setValue(AutoAnyReference value) override
boost::function< bool(boost::reference_wrapper< qi::ServiceDirectoryProxy::Status >, const qi::ServiceDirectoryProxy::Status &)> Setter
qi::Signature signature() const override
UnsafeProperty(Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
boost::function< Future< void >(bool)> OnSubscribers
TypeInterface * type() const
GenericProperty(const AutoAnyReference &defaultValue, Args &&...args)
virtual FutureSync< void > set(const T &v)=0
FutureSync< void > set(const T &v) override
Type-erased property, simulating a typed property but using AnyValue.
UnsafeProperty< T > & operator=(const T &v)
PropertyImpl(Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
Property(Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
qi::Signature makeTupleSignature(const std::vector< qi::AnyReference > &vgv, bool resolveDynamic=false, const std::string &name=std::string(), const std::vector< std::string > &names=std::vector< std::string >())
SignalBase * signal() override
bool operator()(boost::reference_wrapper< T > ref_to_current_value, const T &newValue) const
FutureSync< void > set(const T &v) override
PropertyImpl< T > & operator=(const T &v)
Object tracking by blocking destruction while shared pointers are present.
GenericProperty(TypeInterface *type, Args &&...args)
typename ImplType::Setter Setter
Property(Strand &strand, Getter getter=Getter(), Setter setter=Setter(), SignalBase::OnSubscribers onsubscribe=SignalBase::OnSubscribers())
Property< T > & operator=(const T &v)
FutureSync< AnyValue > value() const override
FutureSync< void > setValue(AutoAnyReference value) override
SignalBase * signal() override