dd73fb857de7e685275611aa10ffe454bedd8e77
[framework/graphics/dali.git] / dali / public-api / object / property-array.h
1 #ifndef __DALI_PROPERTY_ARRAY_H__
2 #define __DALI_PROPERTY_ARRAY_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <string>
23
24 // INTERNAL INCLUDES
25 #include <dali/public-api/common/dali-common.h>
26 #include <dali/public-api/object/property-value.h>
27 #include <dali/public-api/object/property.h>
28
29 namespace Dali
30 {
31 /**
32  * @addtogroup dali_core_object
33  * @{
34  */
35
36 /**
37  * @brief A Array of property values.
38  * @since_tizen 2.4
39  */
40 class DALI_IMPORT_API Property::Array
41 {
42 public:
43
44   typedef std::size_t SizeType; ///< Size type @since_tizen 2.4
45
46   /**
47    * @brief Default constructor.
48    * @since_tizen 2.4
49    */
50   Array();
51
52   /**
53    * @brief Copy Constructor.
54    *
55    * @since_tizen 2.4
56    * @param[in] other The Array to copy from.
57    */
58   Array( const Array& other );
59
60   /**
61    * @brief Non-virtual destructor.
62    * @since_tizen 2.4
63    */
64   ~Array();
65
66   /**
67    * @brief Retrieve the number of elements in the array.
68    *
69    * @since_tizen 2.4
70    * @return The number of elements in the array.
71    */
72   SizeType Size() const
73   {
74     return Count();
75   }
76
77   /**
78    * @brief Retrieve the number of elements in the array.
79    *
80    * @since_tizen 2.4
81    * @return The number of elements in the array.
82    */
83   SizeType Count() const;
84
85   /**
86    * @brief Returns whether the array is empty.
87    *
88    * @since_tizen 2.4
89    * @return true if empty, false otherwise
90    */
91   bool Empty() const
92   {
93     return Count() == 0;
94   }
95
96   /**
97    * @brief Clears the array.
98    * @since_tizen 2.4
99    */
100   void Clear();
101
102   /**
103    * @brief Increase the capcity of the array.
104    * @since_tizen 2.4
105    */
106   void Reserve( SizeType size );
107
108   /**
109    * @brief Resize to size.
110    * @since_tizen 2.4
111    */
112   void Resize( SizeType size );
113
114   /**
115    * @brief Retrieve the capacity of the array.
116    *
117    * @since_tizen 2.4
118    * @return The allocated capacity of the array
119    */
120   SizeType Capacity();
121
122   /**
123    * @brief Add an element to the array.
124    *
125    * @since_tizen 2.4
126    * @param[in] value The value to add to the end of the array
127    */
128   void PushBack( const Value& value );
129
130   /**
131    * @brief Const access an element.
132    *
133    * @since_tizen 2.4
134    * @param[in] index The element index to access. No bounds checking is performed.
135    *
136    * @return The a reference to the element.
137    */
138   const Value& GetElementAt( SizeType index ) const
139   {
140     return operator[]( index );
141   }
142
143   /**
144    * @brief Access an element.
145    *
146    * @since_tizen 2.4
147    * @param[in] index The element index to access. No bounds checking is performed.
148    *
149    * @return The a reference to the element.
150    */
151   Value& GetElementAt( SizeType index )
152   {
153     return operator[]( index );
154   }
155
156   /**
157    * @brief Const operator to access an element.
158    *
159    * @since_tizen 2.4
160    * @param[in] index The element index to access. No bounds checking is performed.
161    *
162    * @return The a reference to the element.
163    *
164    */
165   const Value& operator[]( SizeType index ) const;
166
167   /**
168    * @brief Operator to access an element.
169    *
170    * @since_tizen 2.4
171    * @param[in] index The element index to access. No bounds checking is performed.
172    *
173    * @return The a reference to the element.
174    *
175    */
176   Value& operator[]( SizeType index );
177
178   /**
179    * @brief Assignment Operator
180    *
181    * @since_tizen 2.4
182    * @param[in] other The array to copy from.
183    *
184    * @return The copied array.
185    */
186   Array& operator=( const Array& other );
187
188 private:
189   struct DALI_INTERNAL Impl; ///< Private data
190   Impl* mImpl; ///< Pointer to private data
191 };
192
193 /**
194  * @}
195  */
196 } // namespace Dali
197
198 #endif // __DALI_PROPERTY_ARRAY_H__