PengZheng commented on code in PR #727:
URL: https://github.com/apache/celix/pull/727#discussion_r1486373102


##########
libs/utils/include/celix_array_list.h:
##########
@@ -468,11 +868,48 @@ CELIX_UTILS_EXPORT
 void celix_arrayList_sortEntries(celix_array_list_t *list, 
celix_array_list_compare_entries_fp compare);
 
 /**
- * @warning Never use this function with array of doubles, since on some 
32-bit platform (sizeof(double)==8 && sizeof(void*)==4)
- * @deprecated This function is deprecated, use celix_arrayList_sortEntries 
instead.
+ * @brief Sort the array list using the array list configured compare function.
+ * Note that undefined the array list compare function can be NULL and in that 
case the array list will not be sorted.
  */
-CELIX_UTILS_DEPRECATED_EXPORT
-void celix_arrayList_sort(celix_array_list_t *list, celix_arrayList_sort_fp 
sortFp);
+CELIX_UTILS_EXPORT
+void celix_arrayList_sort(celix_array_list_t *list);
+
+/**
+ * @brief Check if the array list are equal.
+ *
+ * Equal is defined as:
+ * - The array list have the same size
+ * - The array list have the same element type
+ * - The array list have the same equals callback
+ * - The array list have the same values at the same index
+ *
+ * Note that the remove callback and compare callback are ignored.
+ *
+ * If both array list are NULL, they are considered equal.
+ *
+ * @param listA The first array list.
+ * @param listB The second array list.
+ * @return true if the array list are equal, false otherwise.
+ */
+CELIX_UTILS_EXPORT
+bool celix_arrayList_equals(const celix_array_list_t* listA, const 
celix_array_list_t* listB);
+
+/**
+ * @Brief Copy the array list to a new array list.
+ *
+ * The new array list will have the same element type and the same callbacks 
as the original array list.
+ * If the element type is CELIX_ARRAY_LIST_ELEMENT_TYPE_STRING, the strings 
will be copied and
+ * if the element type is CELIX_ARRAY_LIST_ELEMENT_TYPE_VERSION, the versions 
will be copied.
+ * For all other element types the values will be copied.
+ *
+ * If a NULL is returned and the original array list is not NULL, a error 
message is logged to celix_err.
+ *
+ * @param[in] list The array list to copy.
+ * @return A new array list with the same element type and values as the 
original array list or NULL if the original
+ * array list is NULL or out of memory.
+ */
+CELIX_UTILS_EXPORT
+celix_array_list_t* celix_arrayList_copy(const celix_array_list_t* list);

Review Comment:
   If `CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED` is reserved for user-defined 
type, then how these user-defined type should be copied is left undefined.



##########
libs/utils/include/celix_array_list.h:
##########
@@ -40,36 +41,83 @@
 extern "C" {
 #endif
 
+/**
+ * @enum celix_array_list_element_type_t
+ * @brief An enumeration of the types of elements that can be stored in a 
Celix array list.
+ */
+typedef enum celix_array_list_element_type {
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED = 0, /**< Represents an undefined 
element type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_POINTER = 1,   /**< Represents a pointer 
element type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_STRING = 2, /**< Represents a string element 
type where the array list is the owner */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_STRING_REF =
+        3, /**< Represents a string element type where the array list is not 
the owner */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_INT = 4,    /**< Represents an integer 
element type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_LONG = 5,   /**< Represents a long integer 
element type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_UINT = 6,   /**< Represents an unsigned 
integer element type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_ULONG = 7,  /**< Represents an unsigned long 
integer element type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_FLOAT = 8,  /**< Represents a float element 
type. */
+    CELIX_ARRAY_LIST_ELEMENT_TYPE_DOUBLE = 9, /**< Represents a double element 
type. */

Review Comment:
   If we have `double`, do we still need `float`? The same remarks apply to 
`size_t`/`unsigned long`/`unsigned int`, `long`/`int`. Moreover, when use JSON 
as serialization format, how to encode these (redundant) types?



##########
libs/utils/include/celix_array_list.h:
##########
@@ -468,11 +868,48 @@ CELIX_UTILS_EXPORT
 void celix_arrayList_sortEntries(celix_array_list_t *list, 
celix_array_list_compare_entries_fp compare);
 
 /**
- * @warning Never use this function with array of doubles, since on some 
32-bit platform (sizeof(double)==8 && sizeof(void*)==4)
- * @deprecated This function is deprecated, use celix_arrayList_sortEntries 
instead.
+ * @brief Sort the array list using the array list configured compare function.
+ * Note that undefined the array list compare function can be NULL and in that 
case the array list will not be sorted.
  */
-CELIX_UTILS_DEPRECATED_EXPORT
-void celix_arrayList_sort(celix_array_list_t *list, celix_arrayList_sort_fp 
sortFp);
+CELIX_UTILS_EXPORT
+void celix_arrayList_sort(celix_array_list_t *list);
+
+/**
+ * @brief Check if the array list are equal.
+ *
+ * Equal is defined as:
+ * - The array list have the same size
+ * - The array list have the same element type

Review Comment:
   This is not checked in the implementation.



##########
libs/utils/include/celix_array_list.h:
##########
@@ -240,102 +484,207 @@ bool celix_arrayList_getBool(const celix_array_list_t 
*list, int index);
 /**
  * @brief Returns the value for the provided index.
  *
- * @param map The array list.
+ * Can be used for array list with element type 
CELIX_ARRAY_LIST_ELEMENT_TYPE_SIZE or
+ * CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED.
+ *
+ * @param list The array list.
  * @param index The entry index to return.
  * @return Returns the size_t value for the index. Returns 0 if index is out 
of bound.
  */
 CELIX_UTILS_EXPORT
 size_t celix_arrayList_getSize(const celix_array_list_t *list, int index);
 
+/**
+ * @brief Returns the value for the provided index.
+ *
+ * Can be used for array list with element type 
CELIX_ARRAY_LIST_ELEMENT_TYPE_VERSION,
+ * or CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED.

Review Comment:
   Dangerous for `CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED`.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@celix.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to