Making DALi public API typesafe using guaranteed types; uint8_t, uint32_t
[platform/core/uifw/dali-core.git] / dali / public-api / object / property.h
index 0c0b2a3..60236e9 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_PROPERTY_H__
 
 /*
- * Copyright (c) 2014 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.
 // EXTERNAL INCLUDES
 #include <string>
 #include <utility>
+#include <cstdint> // int32_t
 
 // INTERNAL INCLUDES
-#include <dali/public-api/common/vector-wrapper.h>
 #include <dali/public-api/common/dali-common.h>
+#include <dali/public-api/common/dali-vector.h>
 
 namespace Dali
 {
+/**
+ * @addtogroup dali_core_object
+ * @{
+ */
 
 class Handle;
 
 /**
  * @brief An object + property pair.
+ * @SINCE_1_0.0
  */
-struct DALI_IMPORT_API Property
+struct DALI_CORE_API Property
 {
   /**
    * @brief A valid property index is zero or greater.
+   * @SINCE_1_0.0
    */
-  typedef int Index;
+  typedef int32_t Index;
 
-  static const int INVALID_INDEX; ///< -1 is not a valid property index
-  static const int INVALID_COMPONENT_INDEX; ///< -1 is not a valid property index
+  static const int32_t INVALID_INDEX; ///< -1 is not a valid property index
+  static const int32_t INVALID_KEY;   ///< -1 is not a valid property key
+  static const int32_t INVALID_COMPONENT_INDEX; ///< -1 is not a valid property index
 
-  typedef std::vector< Index > IndexContainer; ///< A vector of property indices
+  typedef Dali::Vector< Index > IndexContainer; ///< A vector of property indices @SINCE_1_0.0
 
   /**
    * @brief A value-type representing a property value.
@@ -52,6 +60,11 @@ struct DALI_IMPORT_API Property
   class Value;
 
   /**
+   * @brief A Key used by Map
+   */
+  struct Key;
+
+  /**
    * @brief A Map of property values.
    */
   class Map;
@@ -59,85 +72,91 @@ struct DALI_IMPORT_API Property
   /**
    * @brief An Array of property values.
    */
-  typedef std::vector<Value> Array;
+  class Array;
 
   /**
-   * @brief The property types supported.
+   * @brief Enumeration for the property types supported.
+   * @SINCE_1_0.0
    */
   enum Type
   {
-    NONE,            ///< No type
-
-    BOOLEAN,         ///< A boolean type
-    FLOAT,           ///< A float type
-    INTEGER,         ///< An integer type
-    UNSIGNED_INTEGER,///< An unsigned integer type
-    VECTOR2,         ///< a vector array of size=2 with float precision
-    VECTOR3,         ///< a vector array of size=3 with float precision
-    VECTOR4,         ///< a vector array of size=4 with float precision
-    MATRIX3,         ///< a 3x3 matrix
-    MATRIX,          ///< a 4x4 matrix
-    RECTANGLE,       ///< an integer array of size=4
-    ROTATION,        ///< either a quaternion or an axis angle rotation
-    STRING,          ///< A string type
-    ARRAY,           ///< an array of Property::Value
-    MAP,             ///< a string key to Property:value mapping
-    TYPE_COUNT       ///< The number of supported property types
+    NONE,            ///< No type @SINCE_1_0.0
+
+    BOOLEAN,         ///< A boolean type @SINCE_1_0.0
+    FLOAT,           ///< A float type @SINCE_1_0.0
+    INTEGER,         ///< An integer type @SINCE_1_0.0
+    VECTOR2,         ///< a vector array of size=2 with float precision @SINCE_1_0.0
+    VECTOR3,         ///< a vector array of size=3 with float precision @SINCE_1_0.0
+    VECTOR4,         ///< a vector array of size=4 with float precision @SINCE_1_0.0
+    MATRIX3,         ///< a 3x3 matrix @SINCE_1_0.0
+    MATRIX,          ///< a 4x4 matrix @SINCE_1_0.0
+    RECTANGLE,       ///< an integer array of size=4 @SINCE_1_0.0
+    ROTATION,        ///< either a quaternion or an axis angle rotation @SINCE_1_0.0
+    STRING,          ///< A string type @SINCE_1_0.0
+    ARRAY,           ///< an array of Property::Value @SINCE_1_0.0
+    MAP,             ///< a string key to Property:value mapping @SINCE_1_0.0
+    EXTENTS          ///< a collection of 4 x uint16_t @SINCE_1_2.62
   };
 
   /**
-   * @brief The access mode for custom properties
+   * @brief Enumeration for the access mode for custom properties.
+   * @SINCE_1_0.0
    */
   enum AccessMode
   {
-    READ_ONLY,          ///< if the property is read-only
-    READ_WRITE,         ///< If the property is read/writeable
-    ANIMATABLE,         ///< If the property can be animated or constrained
-    ACCESS_MODE_COUNT   ///< The number of access modes
+    READ_ONLY,          ///< if the property is read-only @SINCE_1_0.0
+    READ_WRITE,         ///< If the property is read/writeable @SINCE_1_0.0
+    ANIMATABLE,         ///< If the property can be animated or constrained @SINCE_1_0.0
+    ACCESS_MODE_COUNT   ///< The number of access modes @SINCE_1_0.0
   };
 
 
   /**
-   * @brief Create a Property instance.
+   * @brief Creates a Property instance.
    *
-   * @param [in] object A valid handle to the target object.
-   * @param [in] propertyIndex The index of a property.
+   * @SINCE_1_0.0
+   * @param[in] object A valid handle to the target object
+   * @param[in] propertyIndex The index of a property
    */
   Property( Handle& object, Property::Index propertyIndex );
 
 
   /**
-   * @brief Create a Property instance.
+   * @brief Creates a Property instance.
    *
-   * @param [in] object A valid handle to the target object.
-   * @param [in] propertyIndex The index of a property.
-   * @param [in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
+   * @SINCE_1_0.0
+   * @param[in] object A valid handle to the target object.
+   * @param[in] propertyIndex The index of a property.
+   * @param[in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
    */
-  Property( Handle& object, Property::Index propertyIndex, int componentIndex );
+  Property( Handle& object, Property::Index propertyIndex, int32_t componentIndex );
 
   /**
-   * @brief Create a Property instance.
+   * @brief Creates a Property instance.
    *
+   * @SINCE_1_0.0
+   * @param[in] object A valid handle to the target object
+   * @param[in] propertyName The property name
    * @note This performs a property index query and is therefore slower than
    * constructing a Property directly with the index.
-   * @param [in] object A valid handle to the target object.
-   * @param [in] propertyName The property name.
    */
   Property( Handle& object, const std::string& propertyName );
 
   /**
-   * @brief Create a Property instance.
+   * @brief Creates a Property instance.
    *
+   * @SINCE_1_0.0
+   * @param[in] object A valid handle to the target object
+   * @param[in] propertyName The property name
+   * @param[in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
    * @note This performs a property index query and is therefore slower than
    * constructing a Property directly with the index.
-   * @param [in] object A valid handle to the target object.
-   * @param [in] propertyName The property name.
-   * @param [in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
    */
-  Property( Handle& object, const std::string& propertyName, int componentIndex );
+  Property( Handle& object, const std::string& propertyName, int32_t componentIndex );
 
   /**
    * @brief Non-virtual destructor; Property is not intended as a base class.
+   * @SINCE_1_0.0
    */
   ~Property();
 
@@ -145,9 +164,12 @@ struct DALI_IMPORT_API Property
 
   Index propertyIndex; ///< The index of a property provided by object.
 
-  int componentIndex; ///< Index of a property sub component, for use with Vector2, Vector3 and Vector4, -1 if using main property
+  int32_t componentIndex; ///< Index of a property sub component, for use with Vector2, Vector3 and Vector4, -1 if using main property
 };
 
+/**
+ * @}
+ */
 } // namespace Dali
 
 #endif // __DALI_PROPERTY_H__