Making DALi public API typesafe using guaranteed types; uint8_t, uint32_t
[platform/core/uifw/dali-core.git] / dali / public-api / object / any.h
index 8e77c77..e3fac2a 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_ANY_TYPE_H__
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 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.
@@ -41,7 +41,7 @@ namespace Dali
  * Any floatVariable( 4.5f );
  * Any strVariable( std::string( "Hello world" ) );
  * uintVariable = 1u;
- * unsigned int variable = AnyCast< unsigned int >( uintVariable );
+ * uint32_t variable = AnyCast< uint32_t >( uintVariable );
  * if ( typeid( int ) == uintVariable.GetType() )
  * \endcode
  * @SINCE_1_0.0
@@ -53,27 +53,27 @@ public:
    * @brief Default constructor.
    * @SINCE_1_0.0
    */
-  DALI_IMPORT_API Any();
+  DALI_CORE_API Any();
 
   /**
    * @brief Destructor. Free resources.
    * @SINCE_1_0.0
    */
-  DALI_IMPORT_API ~Any();
+  DALI_CORE_API ~Any();
 
   /**
-   * @brief Pass Assert message
+   * @brief Passes Assert message.
    *
    * @SINCE_1_0.0
-   * @param assertMessage Assert message to report
+   * @param[in] assertMessage Assert message to report
    */
-  DALI_IMPORT_API static void AssertAlways( const char* assertMessage );
+  DALI_CORE_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.
+   * @param[in] value The given value
    */
   template<typename Type>
   Any( const Type& value )
@@ -84,7 +84,7 @@ public:
   /**
    * @brief Copy Constructor.
    * @SINCE_1_0.0
-   * @param [in] any Any to be copied.
+   * @param[in] any Any to be copied
    */
   Any( const Any& any )
   {
@@ -139,18 +139,18 @@ public:
    * @brief Assignment operator.
    *
    * @SINCE_1_0.0
-   * @param [in] any Any to be assigned which contains a value of identical type to current contents.
+   * @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.
    *
    */
-  DALI_IMPORT_API Any& operator=( const Any& any );
+  DALI_CORE_API Any& operator=( const Any& any );
 
   /**
-   * @brief Get a value of type Type from container
+   * @brief Gets a value of type Type from container.
    *
    * @SINCE_1_0.0
-   * @param type destination of type Type to write to
+   * @param[in] type destination of type Type to write to
    */
   template<typename Type>
   void Get( Type& type ) const
@@ -163,27 +163,24 @@ public:
    *
    * @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.
+   * type if there is no value stored
    */
-  DALI_IMPORT_API const std::type_info& GetType() const;
+  DALI_CORE_API const std::type_info& GetType() const;
 
   /**
    * @brief Retrieves the stored value in the Any type.
    *
    * @SINCE_1_0.0
-   * @return The stored value.
+   * @return The stored value
    */
   template<typename Type>
   const Type& Get() const
   {
-
     if ( NULL == mContainer )
     {
       AssertAlways( "Any::Get(). mContainer is NULL" );
     }
-
-    // Check if the value has the same value than the Any type.
-    if( mContainer->GetType() != typeid( Type ) )
+    else if( mContainer->GetType() != typeid( Type ) ) // Check if the value has the same value than the Any type.
     {
       AssertAlways( "Any::Get(). Trying to retrieve a value of a different type than the template one." );
     }
@@ -191,10 +188,10 @@ public:
   }
 
   /**
-   * @brief Return pointer of Type to the value stored
+   * @brief Returns pointer of Type to the value stored.
    *
    * @SINCE_1_0.0
-   * @return pointer to the value or NULL if no value is contained
+   * @return pointer to the value, or NULL if no value is contained
    */
   template<typename Type>
   Type* GetPointer()
@@ -212,10 +209,10 @@ public:
   }
 
   /**
-   * @brief Return pointer of Type to the value stored
+   * @brief Returns pointer of Type to the value stored.
    *
    * @SINCE_1_0.0
-   * @return pointer to the value or NULL if no value is contained
+   * @return pointer to the value, or NULL if no value is contained
    */
   template<typename Type>
   const Type* GetPointer() const
@@ -233,10 +230,10 @@ public:
   }
 
   /**
-   * @brief Returns whether container holds a value
+   * @brief Returns whether container holds a value.
    *
    * @SINCE_1_0.0
-   * @return true if the container is empty, else false.
+   * @return @c true if the container is empty, else @c false
    */
   bool Empty() const
   {
@@ -248,19 +245,19 @@ public:
   typedef void (*DeleteFunc)( const AnyContainerBase* base );
 
   /**
-   * @brief 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
+     * @brief Constructor of base container.
      *
      * @SINCE_1_0.0
-     * @param type typeid of container
-     * @param cloneFunc Cloning function to replicate this container type
-     * @param deleteFunc Deleting function to destroy this container type
+     * @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 ),
@@ -269,10 +266,10 @@ public:
     {}
 
     /**
-     * @brief Get the typeid of this container
+     * @brief Gets the typeid of this container.
      *
      * @SINCE_1_0.0
-     * @return type
+     * @return Type
      */
     const std::type_info& GetType() const
     {
@@ -286,10 +283,10 @@ public:
 
 
   /**
-   * @brief Templated Clone function from container base
+   * @brief Templated Clone function from container base.
    *
    * @SINCE_1_0.0
-   * @param base reference to container
+   * @param[in] base The reference to container
    */
   template<typename Type>
   struct AnyContainerImplCloner
@@ -301,10 +298,10 @@ public:
   };
 
   /**
-   * @brief Templated Delete function from container base
+   * @brief Templated Delete function from container base.
    *
    * @SINCE_1_0.0
-   * @param base pointer to container
+   * @param[in] base The pointer to container
    */
   template<typename Type>
   struct AnyContainerImplDelete
@@ -316,7 +313,7 @@ public:
   };
 
   /**
-   * @brief Templated class to hold value for type
+   * @brief Templated class to hold value for type.
    *
    * @SINCE_1_0.0
    */
@@ -326,10 +323,10 @@ public:
   public:
 
     /**
-     * @brief Constructor to create container holding value of type Type
+     * @brief Constructor to create container holding value of type Type.
      *
      * @SINCE_1_0.0
-     * @param value Value of Type
+     * @param[in] value Value of Type
      */
     AnyContainerImpl( const Type& value )
     : AnyContainerBase( typeid( Type ),
@@ -339,10 +336,10 @@ public:
     {}
 
     /**
-     * @brief Constructor to create new container of type from and existing container (cloning)
+     * @brief Constructor to create new container of type from and existing container (cloning).
      *
      * @SINCE_1_0.0
-     * @param base reference to base container to copy from
+     * @param[in] base The reference to base container to copy from
      */
     AnyContainerImpl( const AnyContainerBase& base )
     : AnyContainerBase( typeid( Type ),
@@ -353,10 +350,10 @@ public:
     }
 
     /**
-     * @brief Get the container's stored value
+     * @brief Gets the container's stored value.
      *
      * @SINCE_1_0.0
-     * @return value of type Type
+     * @return Value of type Type
      */
     const Type& GetValue() const
     {
@@ -364,10 +361,10 @@ public:
     }
 
     /**
-     * @brief Set the container's stored value
+     * @brief Sets the container's stored value.
      *
      * @SINCE_1_0.0
-     * @param value of type Type
+     * @param[in] value Value of type Type
      */
     void SetValue( const Type& value )
     {
@@ -375,10 +372,10 @@ public:
     }
 
     /**
-     * @brief Get a pointer to the value held
+     * @brief Gets a pointer to the value held.
      *
      * @SINCE_1_0.0
-     * @return pointer to the value of type Type
+     * @return Pointer to the value of type Type
      */
     Type* GetPointerToValue()
     {
@@ -386,10 +383,10 @@ public:
     }
 
     /**
-     * @brief Get a pointer to the value held
+     * @brief Gets a pointer to the value held.
      *
      * @SINCE_1_0.0
-     * @return pointer to the value of type Type
+     * @return Pointer to the value of type Type
      */
     const Type* GetPointerToValue() const
     {
@@ -409,10 +406,10 @@ public:
  */
 
 /**
- * @brief Extract a pointer to the held type of an Any object from a pointer to that Any object (NULL if empty )
+ * @brief Extracts a pointer to the held type of an Any object from a pointer to that Any object (NULL if empty).
  *
  * @SINCE_1_0.0
- * @param any Pointer to an Any object
+ * @param[in] any Pointer to an Any object
  *
  * @return Pointer to the Type held
  */
@@ -423,10 +420,10 @@ inline Type* AnyCast( Any* any )
 }
 
 /**
- * @brief Extract a const pointer to the held type of an Any object from a pointer to that Any object (NULL if empty )
+ * @brief Extracts a const pointer to the held type of an Any object from a pointer to that Any object (NULL if empty).
  *
  * @SINCE_1_0.0
- * @param any const Pointer to an Any object
+ * @param[in] any const Pointer to an Any object
  *
  * @return const Pointer to the Type held
  */
@@ -437,10 +434,10 @@ inline const Type* AnyCast( const Any* any )
 }
 
 /**
- * @brief Extract a held value of type Type from an Any object from a reference to that Any object
+ * @brief Extracts a held value of type Type from an Any object from a reference to that Any object.
  *
  * @SINCE_1_0.0
- * @param any reference to an Any object
+ * @param[in] any The reference to an Any object
  *
  * @return Type value of type Type
  */
@@ -451,10 +448,10 @@ inline Type AnyCast( Any& any )
 }
 
 /**
- * @brief Extract a held value of type Type from an Any object from a const reference to that Any object
+ * @brief Extracts a held value of type Type from an Any object from a const reference to that Any object.
  *
  * @SINCE_1_0.0
- * @param any reference to an Any object
+ * @param[in] any The reference to an Any object
  *
  * @return Type value of type Type
  */
@@ -465,10 +462,10 @@ inline Type AnyCast( const Any& any )
 }
 
 /**
- * @brief Extract a reference to the held value of type Type from an Any object from a reference to that Any object
+ * @brief Extracts a reference to the held value of type Type from an Any object from a reference to that Any object
  *
  * @SINCE_1_0.0
- * @param any reference to an Any object
+ * @param[in] any The reference to an Any object
  *
  * @return A reference to the Type value of type Type
  */
@@ -479,10 +476,10 @@ inline Type& AnyCastReference( Any& any )
 }
 
 /**
- * @brief Extract a const reference to the held value of type Type from an Any object from a const reference to that Any object
+ * @brief Extracts a const reference to the held value of type Type from an Any object from a const reference to that Any object.
  *
  * @SINCE_1_0.0
- * @param any reference to an Any object
+ * @param[in] any The reference to an Any object
  *
  * @return A const reference to the Type value of type Type
  */