#define __DALI_ANY_TYPE_H__
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2015 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.
*
*/
-// INTERNAL INCLUDES
-#include <dali/public-api/common/dali-common.h>
-
// EXTERNAL INCLUDES
#include <typeinfo> // operator typeid
+#include <cstddef> // NULL
+
+// INTERNAL INCLUDES
+#include <dali/public-api/common/dali-common.h>
namespace Dali
{
+/**
+ * @addtogroup dali_core_object
+ * @{
+ */
/**
* @brief Stores a value of any type.
* unsigned int variable = AnyCast< unsigned int >( uintVariable );
* if ( typeid( int ) == uintVariable.GetType() )
* \endcode
+ * @SINCE_1_0.0
*/
class Any
{
public:
/**
- * Default constructor.
+ * @brief Default constructor.
+ * @SINCE_1_0.0
*/
DALI_IMPORT_API Any();
/**
- * Destructor. Free resources.
+ * @brief Destructor. Free resources.
+ * @SINCE_1_0.0
*/
DALI_IMPORT_API ~Any();
/**
* @brief Pass Assert message
*
- * @param assertMessage Assert message to report
+ * @SINCE_1_0.0
+ * @param[in] assertMessage Assert message to report
*/
DALI_IMPORT_API static void AssertAlways( const char* assertMessage );
/**
* @brief Constructs a Any type with the given value.
*
+ * @SINCE_1_0.0
* @param[in] value The given value.
*/
template<typename Type>
}
/**
- * Copy Constructor.
- * @param [in] any Any to be copied.
+ * @brief Copy Constructor.
+ * @SINCE_1_0.0
+ * @param[in] any Any to be copied.
*/
Any( const Any& any )
{
// If container isn't empty then copy the container?
- if ( 0 != any.mContainer )
+ if ( NULL != any.mContainer )
{
mContainer = any.mContainer->mCloneFunc( *any.mContainer );
}
else
{
// Otherwise mark new container as empty
- mContainer = 0;
+ mContainer = NULL;
}
}
/**
* @brief Assigns a given value to the Any type.
*
+ * @SINCE_1_0.0
+ * @param[in] value The given value
+ * @return A reference to this
* @note If the types are different, then the current container will be re-created.
*
- * @param[in] value The given value.
*/
template<typename Type>
Any& operator=( const Type& value )
{
// If the container is empty then assign the new value
- if ( 0 == mContainer )
+ if ( NULL == mContainer )
{
mContainer = new AnyContainerImpl< Type >( value );
}
/**
* @brief Assignment operator.
*
+ * @SINCE_1_0.0
+ * @param [in] any Any to be assigned which contains a value of identical type to current contents.
+ * @return A reference to this
* @exception DaliException If parameter any is of a different type.
*
- * @param [in] any Any to be assigned which contains a value of identical type to current contents.
*/
DALI_IMPORT_API Any& operator=( const Any& any );
/**
* @brief Get a value of type Type from container
*
- * @param type destination of type Type to write to
+ * @SINCE_1_0.0
+ * @param[in] type destination of type Type to write to
*/
template<typename Type>
void Get( Type& type ) const
/**
* @brief Returns the type info of the stored value.
*
+ * @SINCE_1_0.0
* @return The std::type_info of the stored value or the type info of the void
* type if there is no value stored.
*/
/**
* @brief Retrieves the stored value in the Any type.
*
+ * @SINCE_1_0.0
* @return The stored value.
*/
template<typename Type>
const Type& Get() const
{
- if ( 0 == mContainer )
+ if ( NULL == mContainer )
{
- AssertAlways( "Any::Get(). mContainer is null" );
+ AssertAlways( "Any::Get(). mContainer is NULL" );
}
// Check if the value has the same value than the Any type.
/**
* @brief Return pointer of Type to the value stored
*
- * @return pointer to the value or null if no value is contained
+ * @SINCE_1_0.0
+ * @return pointer to the value or NULL if no value is contained
*/
template<typename Type>
Type* GetPointer()
{
- if( 0 == mContainer )
+ if( NULL == mContainer )
{
- return 0;
+ return NULL;
}
// Check if the value has the same value than the Any type.
if( mContainer->GetType() != typeid( Type ) )
/**
* @brief Return pointer of Type to the value stored
*
- * @return pointer to the value or null if no value is contained
+ * @SINCE_1_0.0
+ * @return pointer to the value or NULL if no value is contained
*/
template<typename Type>
const Type* GetPointer() const
{
- if( 0 == mContainer )
+ if( NULL == mContainer )
{
- return 0;
+ return NULL;
}
// Check if the value has the same value than the Any type.
if( mContainer->GetType() != typeid( Type ) )
/**
* @brief Returns whether container holds a value
*
+ * @SINCE_1_0.0
* @return true if the container is empty, else false.
*/
bool Empty() const
{
- return ( 0 == mContainer ) ? true : false;
+ return ( NULL == mContainer ) ? true : false;
}
struct AnyContainerBase; // Forward declaration for typedef
typedef void (*DeleteFunc)( const AnyContainerBase* base );
/**
- * Base container to hold type for match verification and instance cloning function
+ * @brief Base container to hold type for match verification and instance cloning function
*
+ * @SINCE_1_0.0
*/
struct AnyContainerBase
{
/**
* @brief Constructor of base container
*
- * @param type typeid of container
- * @param cloneFunc Cloning function to replicate this container type
- * @param deleteFunc Deleting function to destroy this container type
+ * @SINCE_1_0.0
+ * @param[in] type typeid of container
+ * @param[in] cloneFunc Cloning function to replicate this container type
+ * @param[in] deleteFunc Deleting function to destroy this container type
*/
AnyContainerBase( const std::type_info& type, CloneFunc cloneFunc, DeleteFunc deleteFunc )
: mType( type ),
/**
* @brief Get the typeid of this container
*
+ * @SINCE_1_0.0
* @return type
*/
const std::type_info& GetType() const
/**
* @brief Templated Clone function from container base
*
- * @param base reference to container
+ * @SINCE_1_0.0
+ * @param[in] base reference to container
*/
template<typename Type>
struct AnyContainerImplCloner
/**
* @brief Templated Delete function from container base
*
- * @param base pointer to container
+ * @SINCE_1_0.0
+ * @param[in] base pointer to container
*/
template<typename Type>
struct AnyContainerImplDelete
/**
* @brief Templated class to hold value for type
*
+ * @SINCE_1_0.0
*/
template<typename Type>
class AnyContainerImpl : public AnyContainerBase
/**
* @brief Constructor to create container holding value of type Type
*
- * @param value Value of Type
+ * @SINCE_1_0.0
+ * @param[in] value Value of Type
*/
AnyContainerImpl( const Type& value )
: AnyContainerBase( typeid( Type ),
/**
* @brief Constructor to create new container of type from and existing container (cloning)
*
- * @param base reference to base container to copy from
+ * @SINCE_1_0.0
+ * @param[in] base reference to base container to copy from
*/
AnyContainerImpl( const AnyContainerBase& base )
: AnyContainerBase( typeid( Type ),
/**
* @brief Get the container's stored value
*
+ * @SINCE_1_0.0
* @return value of type Type
*/
const Type& GetValue() const
/**
* @brief Set the container's stored value
*
- * @param value of type Type
+ * @SINCE_1_0.0
+ * @param[in] value of type Type
*/
void SetValue( const Type& value )
{
/**
* @brief Get a pointer to the value held
*
+ * @SINCE_1_0.0
* @return pointer to the value of type Type
*/
Type* GetPointerToValue()
/**
* @brief Get a pointer to the value held
*
+ * @SINCE_1_0.0
* @return pointer to the value of type Type
*/
const Type* GetPointerToValue() const
*/
/**
- * @brief Extract a pointer to the held type of an Any object from a pointer to that Any object (null if empty )
+ * @brief Extract a pointer to the held type of an Any object from a pointer to that Any object (NULL if empty )
*
- * @param any Pointer to an Any object
+ * @SINCE_1_0.0
+ * @param[in] any Pointer to an Any object
*
* @return Pointer to the Type held
*/
}
/**
- * @brief Extract a const pointer to the held type of an Any object from a pointer to that Any object (null if empty )
+ * @brief Extract a const pointer to the held type of an Any object from a pointer to that Any object (NULL if empty )
*
- * @param any const Pointer to an Any object
+ * @SINCE_1_0.0
+ * @param[in] any const Pointer to an Any object
*
* @return const Pointer to the Type held
*/
/**
* @brief Extract a held value of type Type from an Any object from a reference to that Any object
*
- * @param any reference to an Any object
+ * @SINCE_1_0.0
+ * @param[in] any reference to an Any object
*
* @return Type value of type Type
*/
/**
* @brief Extract a held value of type Type from an Any object from a const reference to that Any object
*
- * @param any reference to an Any object
+ * @SINCE_1_0.0
+ * @param[in] any reference to an Any object
*
* @return Type value of type Type
*/
/**
* @brief Extract a reference to the held value of type Type from an Any object from a reference to that Any object
*
- * @param any reference to an Any object
+ * @SINCE_1_0.0
+ * @param[in] any reference to an Any object
*
* @return A reference to the Type value of type Type
*/
/**
* @brief Extract a const reference to the held value of type Type from an Any object from a const reference to that Any object
*
- * @param any reference to an Any object
+ * @SINCE_1_0.0
+ * @param[in] any reference to an Any object
*
* @return A const reference to the Type value of type Type
*/
return any.Get<Type>();
}
+/**
+ * @}
+ */
} // namespace Dali
#endif // __DALI_ANY_TYPE_H__