// EXTERNAL INCLUDES
#include <cstddef>
+#include <type_traits>
// INTERNAL INCLUDES
#include <dali/public-api/signals/callback.h>
return mSlotObserver;
}
-SignalConnection::SignalConnection(CallbackBase* callback)
-: mSignalObserver(nullptr),
- mCallback(callback)
-{
-}
-
-SignalConnection::SignalConnection(SignalObserver* signalObserver, CallbackBase* callback)
-: mSignalObserver(signalObserver),
- mCallback(callback)
-{
-}
-
-SignalConnection::~SignalConnection()
-{
- // signal connections have ownership of the callback.
- delete mCallback;
-}
-
-void SignalConnection::Disconnect(SlotObserver* slotObserver)
+void SignalConnection::Disconnect(SlotObserver* slotObserver) noexcept
{
if(mSignalObserver)
{
mCallback = nullptr;
}
-CallbackBase* SignalConnection::GetCallback()
-{
- return mCallback;
-}
+static_assert(std::is_nothrow_move_constructible_v<SignalConnection>);
+static_assert(std::is_nothrow_move_assignable_v<SignalConnection>);
+
+static_assert(std::is_copy_constructible_v<SignalConnection> == false);
+static_assert(std::is_copy_assignable_v<SignalConnection> == false);
} // namespace Dali
*/
// INTERNAL INCLUDES
+#include <dali/public-api/signals/callback.h>
#include <dali/public-api/signals/signal-slot-observers.h>
namespace Dali
* @{
*/
-class CallbackBase;
/**
* @brief Slot connection is the connection information held by a connection tracker.
* @SINCE_1_0.0
* @param[in] callback The callback which should be a C function
*/
- SignalConnection(CallbackBase* callback);
+ SignalConnection(CallbackBase* callback) noexcept
+ : mCallback(callback)
+ {
+ }
/**
* @brief Constructor.
* @param[in] signalObserver The signal observer
* @param[in] callback Ownership of this callback object is taken
*/
- SignalConnection(SignalObserver* signalObserver, CallbackBase* callback);
+ SignalConnection(SignalObserver* signalObserver, CallbackBase* callback) noexcept
+ : mSignalObserver(signalObserver),
+ mCallback(callback)
+ {
+ }
/**
* @brief Non-virtual destructor, not intended as a base class.
* @SINCE_1_0.0
*/
- ~SignalConnection();
+ ~SignalConnection() noexcept
+ {
+ // signal connections have ownership of the callback.
+ delete mCallback;
+ }
/**
* @brief Disconnects the signal from the slot.
* @SINCE_1_0.0
* @param[in] slotObserver The signal disconnecting from the slot
*/
- void Disconnect(SlotObserver* slotObserver);
+ void Disconnect(SlotObserver* slotObserver) noexcept;
/**
* @brief Retrieves the callback.
* @SINCE_1_0.0
* @return A pointer to the callback
*/
- CallbackBase* GetCallback();
+ CallbackBase* GetCallback() const noexcept
+ {
+ return mCallback;
+ }
-private:
SignalConnection(const SignalConnection&) = delete; ///< Deleted copy constructor. @SINCE_1_0.0
- SignalConnection(SignalConnection&&) = delete; ///< Deleted move constructor. @SINCE_1_9.25
SignalConnection& operator=(const SignalConnection&) = delete; ///< Deleted copy assignment operator. @SINCE_1_0.0
- SignalConnection& operator=(SignalConnection&&) = delete; ///< Deleted move assignment operator. @SINCE_1_9.25
+
+ /**
+ * @brief Move constructor.
+ *
+ * A move constructor enables the resources owned by an rvalue object to be moved into an lvalue without copying.
+ * @SINCE_1_9.38
+ * @param[in] connection The property value to move from
+ */
+ SignalConnection(SignalConnection&& connection) noexcept
+ : mSignalObserver(connection.mSignalObserver),
+ mCallback(connection.mCallback)
+ {
+ connection.mSignalObserver = nullptr;
+ connection.mCallback = nullptr;
+ }
+
+ /**
+ * @brief Move assignment operator.
+ *
+ * @SINCE_1_9.38
+ * @param[in] connection The connection to move from
+ * @return a reference to this
+ */
+ SignalConnection& operator=(SignalConnection&& connection) noexcept
+ {
+ if(this != &connection)
+ {
+ // release the callback
+ delete mCallback;
+
+ mSignalObserver = connection.mSignalObserver;
+ mCallback = connection.mCallback;
+
+ connection.mSignalObserver = nullptr;
+ connection.mCallback = nullptr;
+ }
+ return *this;
+ }
+
+ explicit operator bool() const noexcept
+ {
+ return mCallback ? true : false;
+ }
private:
- SignalObserver* mSignalObserver; ///< a pointer to the signal observer (not owned)
- CallbackBase* mCallback; ///< The callback, has ownership.
+ SignalObserver* mSignalObserver{nullptr}; ///< a pointer to the signal observer (not owned)
+ CallbackBase* mCallback{nullptr}; ///< The callback, has ownership.
};
/**