You.i Engine
YiSignalHandlerRawConnection.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SIGNAL_HANDLER_RAW_CONNECTION_H_
3 #define _YI_SIGNAL_HANDLER_RAW_CONNECTION_H_
4 
5 #ifndef _YI_SIGNAL_H_
6 #error "Do not include YiSignalHandlerRawConnection.h directly. Include YiSignal.h instead."
7 #endif
8 
10 
11 // non-specialized concrete connection type (not defined -- only specializations are used)
12 template<typename SlotHandlerType, typename SlotReturnType, typename SlotTypes, typename... SignalTypes>
14 
20 template<class SlotHandlerType, typename SlotReturnType, typename... SlotTypes, typename... SignalTypes>
21 class CYISignalHandlerRawConnection<SlotHandlerType, SlotReturnType, YiSlotTypesContainer<SlotTypes...>, SignalTypes...> : public CYISignalBaseConnection<SignalTypes...>
22 {
23 public:
27  typedef SlotReturnType (SlotHandlerType::*const SlotType)(SlotTypes...);
28 
29  CYISignalHandlerRawConnection(CYISignalHandler &signalHandler, const SlotType &slot, YI_CONNECTION_TYPE connectionType, const CYISignalConnectionID &connectionID = CYISignalConnectionID::CreateUnique()) :
30  CYISignalBaseConnection<SignalTypes...>(&signalHandler, connectionType, connectionID),
31  m_pSlot(slot)
32  {
33  }
34 
35  virtual std::unique_ptr<CYISignalAbstractConnection> Clone(CYISignalHandler *pSignalHandler, YI_CONNECTION_TYPE eConnectionType) const override
36  {
37  return std::make_unique<CYISignalHandlerRawConnection<SlotHandlerType, SlotReturnType, YiSlotTypesContainer<SlotTypes...>, SignalTypes...>>(*pSignalHandler, m_pSlot, eConnectionType, this->GetConnectionID());
38  }
39 
40  virtual void Emit(const SignalTypes &... args) override
41  {
42  EmitInternal(args...);
43  }
44 
45  inline bool IsConnectionTo(const SlotType &slot) const
46  {
47  return slot == m_pSlot;
48  }
49 
50 protected:
51  const SlotType m_pSlot;
52 
53 private:
54  template<typename... ExtraTypes>
55  inline void EmitInternal(const SlotTypes &... slotArgs, const ExtraTypes &...)
56  {
57  (static_cast<SlotHandlerType &>(*CYISignalAbstractConnection::m_pSignalHandler).*m_pSlot)(slotArgs...);
58  }
59 };
60 
61 #endif /* _YI_SIGNAL_HANDLER_RAW_CONNECTION_H_ */
virtual std::unique_ptr< CYISignalAbstractConnection > Clone(CYISignalHandler *pSignalHandler, YI_CONNECTION_TYPE eConnectionType) const override
Definition: YiSignalHandlerRawConnection.h:35
CYISignalHandlerRawConnection(CYISignalHandler &signalHandler, const SlotType &slot, YI_CONNECTION_TYPE connectionType, const CYISignalConnectionID &connectionID=CYISignalConnectionID::CreateUnique())
Definition: YiSignalHandlerRawConnection.h:29
bool IsConnectionTo(const SlotType &slot) const
Definition: YiSignalHandlerRawConnection.h:45
static CYISignalConnectionID CreateUnique()
An object used to identify a specific CYISignal connection.
Definition: YiSignalConnectionID.h:14
The templated abstract class for signal connections.
Definition: YiSignalBaseConnection.h:26
Definition: YiSignalHandlerRawConnection.h:13
A templated struct used to pass multiple parameter packs to a templated class specialization or to a ...
Definition: YiSignalBaseConnection.h:18
Definition: YiSignalHandler.h:174
virtual void Emit(const SignalTypes &...args) override
Definition: YiSignalHandlerRawConnection.h:40
YI_CONNECTION_TYPE
Definition: YiSignalAbstractConnection.h:18