32 #include <Pt/Callable.h>
34 #include <Pt/Connectable.h>
35 #include <Pt/TypeTraits.h>
48 template <
typename L,
typename R,
typename... A>
56 : _lambda(std::forward<T>(lambda))
60 R call(A... args)
const
62 return _lambda(std::forward<A>(args)...);
66 void invoke(A... args)
const
68 _lambda(std::forward<A>(args)...);
89 template <
typename L,
typename R,
typename... A>
100 : _lambda(std::forward<T>(lambda))
119 if(_context && connection.
sender() != _context)
121 _context->onConnectionOpen(connection);
128 if(_context && connection.
sender() != _context)
130 _context->onConnectionClose(connection);
147 template <
typename L,
149 typename M = decltype( &C::operator() )>
150 struct LambdaSlotTraits;
154 template <
typename L,
class C,
typename R,
typename... As>
155 struct LambdaSlotTraits<L, C, R (C::*)(As...)>
157 typedef LambdaSlot<C, R, As...> Slot;
162 template <
typename L,
class C,
typename R,
typename... As>
163 struct LambdaSlotTraits<L, C, R (C::*)(As...) const>
165 typedef LambdaSlot<C, R, As...> Slot;
173 template <
typename L,
174 typename SlotT =
typename LambdaSlotTraits<L>::Slot>
177 return SlotT( std::forward<L>(lambda) );
185 template <
typename L,
186 typename SlotT =
typename LambdaSlotTraits<L>::Slot>
189 return SlotT( std::forward<L>(lambda), &context );
197 template <
typename R,
typename... A,
typename T,
201 return LambdaSlot<L, R, A...>( std::forward<T>(lambda) );
209 template <
typename R,
typename... A,
typename T,
214 return LambdaSlot<L, R, A...>( std::forward<T>(lambda), &context );
219 #endif // PT_LAMBDA_H
const Connectable * sender() const
Returns the sender.
Definition: Connection.h:115
Core module.
Definition: Allocator.h:33
virtual const Callback * callable() const
Returns the callable converted to the type-erased Callback interface.
Definition: Lambda.h:105
An interface for all callable entities.
Definition: Callable.h:48
SlotT slot(Connectable &context, L &&lambda)
Returns a deduced slot object for the given lambda.
Definition: Lambda.h:187
Adapts a lambda or function object as a callable.
Definition: Lambda.h:50
LambdaSlot< L, R, A... > slot(T &&lambda)
Returns a slot object for the given lambda.
Definition: Lambda.h:199
Base type for various "slot" types.
Definition: Slot.h:92
IMPLEMENTATION_DEFINED Value
The derived value type.
Definition: Api-TypeTraits.h:22
Slot * clone() const
Clone this object with new.
Definition: Lambda.h:111
virtual void onDisconnect(const Connection &connection)
Notifies of disconnects.
Definition: Lambda.h:126
Connection Management for Signal and Slot Objects.
Definition: Connectable.h:50
Lambda(T &&lambda)
Constructs from a lambda or function object.
Definition: Lambda.h:55
Adapts a Lambda for use as a slot.
Definition: Lambda.h:91
SlotT slot(L &&lambda)
Returns a deduced slot object for the given lambda.
Definition: Lambda.h:175
LambdaSlot< L, R, A... > slot(Connectable &context, T &&lambda)
Returns a slot object for the given lambda.
Definition: Lambda.h:211
virtual void onConnect(const Connection &connection)
Notifies of connects.
Definition: Lambda.h:117
Endpoint of a signal/slot connection.
Definition: Slot.h:55
LambdaSlot(T &&lambda, Connectable *context=0)
Constructs from a lambda and optional lifetime context.
Definition: Lambda.h:99
virtual bool equals(const Slot &) const
Returns true if two slots are equal in value.
Definition: Lambda.h:135
Represents a connection between a Signal/Delegate and a slot.
Definition: Connection.h:96