-#ifndef __DALI_INTERNAL_MESSAGE_H__
-#define __DALI_INTERNAL_MESSAGE_H__
+#ifndef DALI_INTERNAL_MESSAGE_H
+#define DALI_INTERNAL_MESSAGE_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
class Message : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)();
+ using MemberFunction = void ( T::* )();
/**
* Create a message.
object( const_cast< T* >( obj ) ),
memberFunction( member )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~Message()
+ ~Message() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex /*bufferIndex*/ )
+ void Process( BufferIndex /*bufferIndex*/ ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
(object->*memberFunction)();
}
class MessageValue1 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)( typename ParameterType< P >::PassingType );
+ using MemberFunction = void ( T::* )( typename ParameterType<P>::PassingType );
/**
* Create a message.
memberFunction( member ),
param1( p1 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageValue1()
+ ~MessageValue1() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex /*bufferIndex*/ )
+ void Process( BufferIndex /*bufferIndex*/ ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)( ParameterType< P >::PassObject( param1 ) );
+ (object->*memberFunction)( param1 );
}
private:
class MessageValue2 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- typename ParameterType< P1 >::PassingType,
- typename ParameterType< P2 >::PassingType );
+ using MemberFunction = void ( T::* )( typename ParameterType<P1>::PassingType, typename ParameterType<P2>::PassingType );
/**
* Create a message.
param1( p1 ),
param2( p2 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageValue2()
+ ~MessageValue2() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex /*bufferIndex*/ )
+ void Process( BufferIndex /*bufferIndex*/ ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- ParameterType< P1 >::PassObject( param1 ),
- ParameterType< P2 >::PassObject( param2 ) );
+ (object->*memberFunction)( param1, param2 );
}
private:
class MessageValue3 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- typename ParameterType< P1 >::PassingType,
- typename ParameterType< P2 >::PassingType,
- typename ParameterType< P3 >::PassingType );
+ using MemberFunction = void ( T::* )( typename ParameterType<P1>::PassingType, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType );
/**
* Create a message.
param2( p2 ),
param3( p3 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageValue3()
+ ~MessageValue3() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex /*bufferIndex*/ )
+ void Process( BufferIndex /*bufferIndex*/ ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- ParameterType< P1 >::PassObject( param1 ),
- ParameterType< P2 >::PassObject( param2 ),
- ParameterType< P3 >::PassObject( param3 ) );
+ (object->*memberFunction)( param1, param2, param3 );
}
private:
class MessageValue4 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- typename ParameterType< P1 >::PassingType,
- typename ParameterType< P2 >::PassingType,
- typename ParameterType< P3 >::PassingType,
- typename ParameterType< P4 >::PassingType );
+ using MemberFunction = void ( T::* )( typename ParameterType<P1>::PassingType, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType, typename ParameterType<P4>::PassingType );
/**
* Create a message.
param3( p3 ),
param4( p4 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageValue4()
+ ~MessageValue4() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex /*bufferIndex*/ )
+ void Process( BufferIndex /*bufferIndex*/ ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- ParameterType< P1 >::PassObject( param1 ),
- ParameterType< P2 >::PassObject( param2 ),
- ParameterType< P3 >::PassObject( param3 ),
- ParameterType< P4 >::PassObject( param4 ) );
+ (object->*memberFunction)( param1, param2, param3, param4 );
}
private:
class MessageValue5 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- typename ParameterType< P1 >::PassingType,
- typename ParameterType< P2 >::PassingType,
- typename ParameterType< P3 >::PassingType,
- typename ParameterType< P4 >::PassingType,
- typename ParameterType< P5 >::PassingType );
+ using MemberFunction = void ( T::* )( typename ParameterType<P1>::PassingType, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType, typename ParameterType<P4>::PassingType, typename ParameterType<P5>::PassingType );
/**
* Create a message.
param4( p4 ),
param5( p5 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageValue5()
+ ~MessageValue5() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex /*bufferIndex*/ )
+ void Process( BufferIndex /*bufferIndex*/ ) override
+ {
+ (object->*memberFunction)( param1, param2, param3, param4, param5 );
+ }
+
+private:
+
+ T* object;
+ MemberFunction memberFunction;
+ typename ParameterType< P1 >::HolderType param1;
+ typename ParameterType< P2 >::HolderType param2;
+ typename ParameterType< P3 >::HolderType param3;
+ typename ParameterType< P4 >::HolderType param4;
+ typename ParameterType< P5 >::HolderType param5;
+
+};
+
+/**
+ * Templated message which calls a member function of an object.
+ * This overload passes six value-type parameters.
+ * Template parameters need to match the MemberFunction!
+ * The message will contain copy of the value (in case of & or const&)
+ */
+template< typename T, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6 >
+class MessageValue6 : public MessageBase
+{
+public:
+ using MemberFunction = void ( T::* )( typename ParameterType<P1>::PassingType, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType, typename ParameterType<P4>::PassingType, typename ParameterType<P5>::PassingType, typename ParameterType<P6>::PassingType );
+
+ /**
+ * Create a message.
+ * @note The object is expected to be const in the thread which sends this message.
+ * However it can be modified when Process() is called in a different thread.
+ * @param[in] obj The object.
+ * @param[in] member The member function of the object.
+ * @param[in] p1 The first parameter to pass to the member function.
+ * @param[in] p2 The second parameter to pass to the member function.
+ * @param[in] p3 The third parameter to pass to the member function.
+ * @param[in] p4 The fourth parameter to pass to the member function.
+ * @param[in] p5 The fifth parameter to pass to the member function.
+ * @param[in] p6 The sixth parameter to pass to the member function.
+ */
+ MessageValue6( const T* obj,
+ MemberFunction member,
+ typename ParameterType< P1 >::PassingType p1,
+ typename ParameterType< P2 >::PassingType p2,
+ typename ParameterType< P3 >::PassingType p3,
+ typename ParameterType< P4 >::PassingType p4,
+ typename ParameterType< P5 >::PassingType p5,
+ typename ParameterType< P6 >::PassingType p6 )
+ : MessageBase(),
+ object( const_cast< T* >( obj ) ),
+ memberFunction( member ),
+ param1( p1 ),
+ param2( p2 ),
+ param3( p3 ),
+ param4( p4 ),
+ param5( p5 ),
+ param6( p6 )
+ {
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
+ }
+
+ /**
+ * Virtual destructor
+ */
+ ~MessageValue6() override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- ParameterType< P1 >::PassObject( param1 ),
- ParameterType< P2 >::PassObject( param2 ),
- ParameterType< P3 >::PassObject( param3 ),
- ParameterType< P4 >::PassObject( param4 ),
- ParameterType< P5 >::PassObject( param5 ) );
+ }
+ /**
+ * @copydoc MessageBase::Process
+ */
+ void Process( BufferIndex /*bufferIndex*/ ) override
+ {
+ (object->*memberFunction)( param1, param2, param3, param4, param5, param6 );
}
private:
typename ParameterType< P3 >::HolderType param3;
typename ParameterType< P4 >::HolderType param4;
typename ParameterType< P5 >::HolderType param5;
+ typename ParameterType< P6 >::HolderType param6;
+
+};
+
+/**
+ * Templated message which calls a member function of an object.
+ * This overload passes just the buffer index to the method, no parameters.
+ */
+template< typename T >
+class MessageDoubleBuffered0 : public MessageBase
+{
+public:
+ using MemberFunction = void ( T::* )( BufferIndex );
+
+ /**
+ * Create a message.
+ * @note The object is expected to be const in the thread which sends this message.
+ * However it can be modified when Process() is called in a different thread.
+ * @param[in] obj The object.
+ * @param[in] member The member function of the object.
+ */
+ MessageDoubleBuffered0( const T* obj, MemberFunction member )
+ : MessageBase(),
+ object( const_cast< T* >( obj ) ),
+ memberFunction( member )
+ {
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
+ }
+
+ /**
+ * Virtual destructor
+ */
+ ~MessageDoubleBuffered0() override
+ {
+ }
+
+ /**
+ * @copydoc MessageBase::Process
+ */
+ void Process( BufferIndex bufferIndex ) override
+ {
+ (object->*memberFunction)( bufferIndex );
+ }
+
+private:
+
+ T* object;
+ MemberFunction memberFunction;
};
+
/**
* Templated message which calls a member function of an object.
* This overload passes a value-type to set a double-buffered property.
class MessageDoubleBuffered1 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- BufferIndex,
- typename ParameterType< P >::PassingType );
+ using MemberFunction = void ( T::* )( BufferIndex, typename ParameterType<P>::PassingType );
/**
* Create a message.
memberFunction( member ),
param( p )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageDoubleBuffered1()
+ ~MessageDoubleBuffered1() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex bufferIndex )
+ void Process( BufferIndex bufferIndex ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- bufferIndex,
- ParameterType< P >::PassObject( param ) );
+ (object->*memberFunction)( bufferIndex, param );
}
private:
class MessageDoubleBuffered2 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- BufferIndex,
- typename ParameterType< P2 >::PassingType,
- typename ParameterType< P3 >::PassingType );
+ using MemberFunction = void ( T::* )( BufferIndex, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType );
/**
* Create a message.
param2( p2 ),
param3( p3 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageDoubleBuffered2()
+ ~MessageDoubleBuffered2() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex bufferIndex )
+ void Process( BufferIndex bufferIndex ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- bufferIndex,
- ParameterType< P2 >::PassObject( param2 ),
- ParameterType< P3 >::PassObject( param3 ) );
+ (object->*memberFunction)( bufferIndex, param2, param3 );
}
private:
class MessageDoubleBuffered3 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- BufferIndex,
- typename ParameterType< P2 >::PassingType,
- typename ParameterType< P3 >::PassingType,
- typename ParameterType< P4 >::PassingType );
+ using MemberFunction = void ( T::* )( BufferIndex, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType, typename ParameterType<P4>::PassingType );
/**
* Create a message.
param3( p3 ),
param4( p4 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageDoubleBuffered3()
+ ~MessageDoubleBuffered3() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex bufferIndex )
+ void Process( BufferIndex bufferIndex ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- bufferIndex,
- ParameterType< P2 >::PassObject( param2 ),
- ParameterType< P3 >::PassObject( param3 ),
- ParameterType< P4 >::PassObject( param4 ) );
+ (object->*memberFunction)( bufferIndex, param2, param3, param4 );
}
private:
class MessageDoubleBuffered4 : public MessageBase
{
public:
-
- typedef void(T::*MemberFunction)(
- BufferIndex,
- typename ParameterType< P2 >::PassingType,
- typename ParameterType< P3 >::PassingType,
- typename ParameterType< P4 >::PassingType,
- typename ParameterType< P5 >::PassingType );
+ using MemberFunction = void ( T::* )( BufferIndex, typename ParameterType<P2>::PassingType, typename ParameterType<P3>::PassingType, typename ParameterType<P4>::PassingType, typename ParameterType<P5>::PassingType );
/**
* Create a message.
param4( p4 ),
param5( p5 )
{
+ DALI_ASSERT_DEBUG( object && "nullptr passed into message as object" );
}
/**
* Virtual destructor
*/
- virtual ~MessageDoubleBuffered4()
+ ~MessageDoubleBuffered4() override
{
}
/**
* @copydoc MessageBase::Process
*/
- virtual void Process( BufferIndex bufferIndex )
+ void Process( BufferIndex bufferIndex ) override
{
- DALI_ASSERT_DEBUG( object && "Message does not have an object" );
- (object->*memberFunction)(
- bufferIndex,
- ParameterType< P2 >::PassObject( param2 ),
- ParameterType< P3 >::PassObject( param3 ),
- ParameterType< P4 >::PassObject( param4 ),
- ParameterType< P5 >::PassObject( param5 ) );
+ (object->*memberFunction)( bufferIndex, param2, param3, param4, param5 );
}
private:
} // namespace Dali
-#endif // __DALI_INTERNAL_MESSAGE_H__
+#endif // DALI_INTERNAL_MESSAGE_H