pnoltes commented on code in PR #721:
URL: https://github.com/apache/celix/pull/721#discussion_r1538075149
##########
libs/utils/include/celix_properties.h:
##########
@@ -385,14 +512,264 @@ celix_properties_getVersion(const celix_properties_t*
properties, const char* ke
* @param[in] properties The property set to search.
* @param[in] key The key of the property to get.
* @param[in] defaultValue The value to return if the property is not set or
if the value is not a Celix version.
- * @return A copy of the property value if it is a Celix version, or a new
Celix version created from the property
- * value string if it can be converted, or a copy of the default value
if the property is not set or the value
- * is not a valid Celix version.
- * @retval NULL if version cannot be found/converted and the defaultValue is
NULL.
+ * @param[out] version A copy of the found version, a new parsed version, or a
copy of the default value if the
+ * property is not set, its value is not an version or its
value cannot be converted to an version.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to create the
+ * version. Note if the key is not found, the return status is still
CELIX_SUCCESS.
+ */
+CELIX_UTILS_EXPORT celix_status_t celix_properties_getAsVersion(const
celix_properties_t* properties,
+ const char*
key,
+ const
celix_version_t* defaultValue,
+
celix_version_t** version);
+
+/**
+ * @brief Set a pointer, long, double, bool, string or version array list
array for a property value.
+ *
+ * The set property type cannot be CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED or
CELIX_ARRAY_LIST_ELEMENT_TYPE_POINTER
+ *
+ * This function will make a copy of the provided celix_array_list_t object,
using the celix_arrayList_copy function.
+ *
+ * If an error occurs, the error status is returned and a message is logged to
+ * celix_err.
+ *
+ * @param[in] properties The property set to modify.
+ * @param[in] key The key of the property to set.
+ * @param[in] values An array list of types values to set for the property.
Cannot be NULL.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to set the entry,
+ * and CELIX_ILLEGAL_ARGUMENT if the provided key or values is NULL or
if the array list type is
+ * valid.
*/
-CELIX_UTILS_EXPORT celix_version_t* celix_properties_getAsVersion(const
celix_properties_t* properties,
+CELIX_UTILS_EXPORT celix_status_t
celix_properties_setArrayList(celix_properties_t* properties,
+ const char*
key,
+ const
celix_array_list_t* values);
+
+/**
+ * @brief Assign a pointer, long, double, bool, string or version array list
array for a property value.
+ *
+ * The set property type cannot be CELIX_ARRAY_LIST_ELEMENT_TYPE_UNDEFINED or
CELIX_ARRAY_LIST_ELEMENT_TYPE_POINTER
+ *
+ * This function stores a reference to the provided celix_array_list_t object
in the property set and takes
+ * ownership of the array.
+ * If an error occurs, the error status is returned, the provided array is
destroyed and a
+ * message is logged to celix_err.
+ *
+ * @param[in] properties The property set to modify.
+ * @param[in] key The key of the property to set.
+ * @param[in] values An array list of long values to assign to the property.
Ownership of the array is transferred
+ * to the properties set. Cannot be NULL.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to set the entry,
+ * and CELIX_ILLEGAL_ARGUMENT if the provided key is NULL, values is
NULL or the array list type is
+ * valid. On error, the provided array list is destroyed.
+ */
+CELIX_UTILS_EXPORT celix_status_t
celix_properties_assignArrayList(celix_properties_t* properties,
+ const char*
key,
+
celix_array_list_t* values);
+
+/**
+ * @brief Get a property value as an array of longs.
+ *
+ * This function retrieves the value of a property, interpreting it as an
array of longs. If the underlying type of the
+ * property value is a long array, a copy of the array is returned. If the
underlying type is a string, the string is
+ * converted to an array of longs if possible.
+ * If the property is not set, its value is not an array of longs or its value
cannot be converted to a long array,
+ * the default value is returned as a copy.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The default value to return if the property is not
set or its value is not an array of longs.
+ * @param[out] list A copy of the found list, a new array list with long
values or a copy of the default value if the
+ * property is not set, its value is not an array of longs or
its value cannot be converted to an array
+ * of longs.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to create the
+ * array list. Note if the key is not found, the return status is still
CELIX_SUCCESS.
+ */
+CELIX_UTILS_EXPORT celix_status_t celix_properties_getAsLongArrayList(const
celix_properties_t* properties,
const char*
key,
- const
celix_version_t* defaultValue);
+ const
celix_array_list_t* defaultValue,
+
celix_array_list_t** list);
+
+/**
+ * @brief Get the property value as an array of longs without copying.
+ *
+ * This function provides a non-owning, read-only access to a property value
interpreted as an array of longs.
+ * It returns a const pointer to the array. If the property is not set or its
value is not an array of longs,
+ * the default value is returned.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The value to return if the property is not set or
its value is not an array of longs.
+ * @return A const pointer to the property value interpreted as an array of
longs, or the default value if the property
+ * is not set or its value is not an array of longs. The returned
pointer should not be modified or freed.
+ */
+CELIX_UTILS_EXPORT const celix_array_list_t*
celix_properties_getLongArrayList(const celix_properties_t* properties,
+
const char* key,
+
const celix_array_list_t* defaultValue);
+
+/**
+ * @brief Get a property value as an array of doubles, making a copy of the
array.
+ *
+ * This function retrieves the value of a property, interpreting it as an
array of doubles. If the underlying type of
+ * the property value is a double array, a copy of the array is returned. If
the underlying type is a string, the string
+ * is converted to an array of doubles if possible. If the property is not
set, its value is not an array of doubles or
+ * its value cannot be converted to a double array, the default value is
returned as a copy.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The default value to return if the property is not
set or its value is not an array of
+ * doubles.
+ * @param[out] list A copy of the found list, a new array list with double
values or a copy of the default value if the
+ * property is not set, its value is not an array doubles
longs or its value cannot be converted to an
+ * array of doubles.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to create the
+ * array list. Note if the key is not found, the return status is still
CELIX_SUCCESS.
+ */
+CELIX_UTILS_EXPORT celix_status_t celix_properties_getAsDoubleArrayList(const
celix_properties_t* properties,
+ const
char* key,
+ const
celix_array_list_t* defaultValue,
+
celix_array_list_t** list);
+
+/**
+ * @brief Get the property value as an array of doubles without copying.
+ *
+ * This function provides a non-owning, read-only access to a property value
interpreted as an array of doubles.
+ * It returns a const pointer to the array. If the property is not set or its
value is not an array of doubles,
+ * the default value is returned.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The value to return if the property is not set or
its value is not an array of doubles.
+ * @return A const pointer to the property value interpreted as an array of
doubles, or the default value if the
+ * property is not set or its value is not an array of doubles. The returned
pointer should not be modified or freed.
+ */
+CELIX_UTILS_EXPORT const celix_array_list_t*
celix_properties_getDoubleArrayList(
+ const celix_properties_t* properties, const char* key, const
celix_array_list_t* defaultValue);
+
+/**
+ * @brief Get a property value as an array of booleans, making a copy of the
array.
+ *
+ * This function retrieves the value of a property, interpreting it as an
array of booleans. If the underlying type of
+ * the property value is a boolean array, a copy of the array is returned. If
the underlying type is a string, the
+ * string is converted to an array of booleans if possible. If the property is
not set, its value is not an array of
+ * booleans or its value cannot be converted to a boolean array, the default
value is returned as a copy.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The default value to return if the property is not
set or its value is not an array of
+ * booleans.
+ * @param[out] list A copy of the found list, a new array list with boolean
values or a copy of the default value if the
+ * property is not set, its value is not an array of booleans
or its value cannot be converted to an
+ * array of booleans.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to create the
+ * array list. Note if the key is not found, the return status is still
CELIX_SUCCESS.
+ */
+CELIX_UTILS_EXPORT celix_status_t celix_properties_getAsBoolArrayList(const
celix_properties_t* properties,
+ const
char* key,
+ const
celix_array_list_t* defaultValue,
+
celix_array_list_t** list);
+
+/**
+ * @brief Get the property value as an array of booleans without copying.
+ *
+ * This function provides a non-owning, read-only access to a property value
interpreted as an array of booleans.
+ * It returns a const pointer to the array. If the property is not set or its
value is not an array of booleans,
+ * the default value is returned.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The value to return if the property is not set or
its value is not an array of booleans.
+ * @return A const pointer to the property value interpreted as an array of
booleans, or the default value if the
+ * property is not set or its value is not an array of booleans. The returned
pointer should not be modified or freed.
+ */
+CELIX_UTILS_EXPORT const celix_array_list_t* celix_properties_getBoolArrayList(
+ const celix_properties_t* properties, const char* key, const
celix_array_list_t* defaultValue);
+
+/**
+ * @brief Get a property value as an array of strings, making a copy of the
array.
+ *
+ * This function retrieves the value of a property, interpreting it as an
array of strings. If the underlying type of
+ * the property value is a string array, a copy of the array is returned. If
the underlying type is a string, the string
+ * is converted to an array of strings if possible. If the property is not
set, its value is not an array of strings or
+ * its value cannot be converted to a string array, the default value is
returned as a copy.
+ *
+ * The returned array list is configured with a remove callback so that the
destruction of the array list will also
+ * free the strings in the array list.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The default value to return if the property is not
set or its value is not an array of
+ * strings.
+ * @param[out] list A copy of the found list, a new array list with string
values or a copy of the default value if the
+ * property is not set, its value is not an array of strings
or its value cannot be converted to an
+ * array of strings.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to create the
+ * array list. Note if the key is not found, the return status is still
CELIX_SUCCESS.
+ */
+CELIX_UTILS_EXPORT celix_status_t celix_properties_getAsStringArrayList(const
celix_properties_t* properties,
+ const
char* key,
+ const
celix_array_list_t* defaultValue,
+
celix_array_list_t** list);
+
+/**
+ * @brief Get the property value as an array of strings without copying.
+ *
+ * This function provides a non-owning, read-only access to a property value
interpreted as an array of strings.
+ * It returns a const pointer to the array. If the property is not set or its
value is not an array of strings,
+ * the default value is returned.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The value to return if the property is not set or
its value is not an array of strings.
+ * @return A const pointer to the property value interpreted as an array of
strings, or the default value if the
+ * property is not set or its value is not an array of strings. The returned
pointer should not be modified or freed.
+ */
+CELIX_UTILS_EXPORT const celix_array_list_t*
celix_properties_getStringArrayList(
+ const celix_properties_t* properties, const char* key, const
celix_array_list_t* defaultValue);
+
+/**
+ * @brief Get a property value as an array of celix_version_t entries, making
a copy of the array.
+ *
+ *
+ * This function retrieves the value of a property, interpreting it as an
array of celix_version_t* entries. If the
+ * underlying type of the property value is a celix_version_t* array, a copy
of the array is returned. If the underlying
+ * type is a string, the string is converted to an array of celix_version_t*
if possible. If the property is not set,
+ * its value is not an array of celix_version_t* entries or its value cannot
be converted to a celix_version_t* array,
+ * the default value is returned as a copy.
+ *
+ * The returned array list is configured with a remove callback so that the
destruction of the array list will also
+ * free the celix_version_t entries in the array list.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The default value to return if the property is not
set or its value is not an array of
+ * celix_version_t entries.
+ * @param[out] list A copy of the found list, a new array list with
celix_version_t values or a copy of the default
+ * value if the property is not set, its value is not an array of
celix_version_t entries or its value cannot be
+ * converted to an array of celix_version_t entries.
+ * @return CELIX_SUCCESS if the operation was successful, CELIX_ENOMEM if
there was not enough memory to create the
+ * array list. Note if the key is not found, the return status is still
CELIX_SUCCESS.
+ */
+CELIX_UTILS_EXPORT celix_status_t celix_properties_getAsVersionArrayList(const
celix_properties_t* properties,
+ const
char* key,
+ const
celix_array_list_t* defaultValue,
+
celix_array_list_t** list);
+
+/**
+ * @brief Get the property value as an array of celix_version_t entries
without copying.
+ *
+ * This function provides a non-owning, read-only access to a property value
interpreted as an array of celix_version_t
+ * entries. It returns a const pointer to the array. If the property is not
set or its value is not an array of
+ * celix_version_t entries, the default value is returned.
+ *
+ * @param[in] properties The property set to search.
+ * @param[in] key The key of the property to get.
+ * @param[in] defaultValue The value to return if the property is not set or
its value is not an array of
+ * celix_version_t entries.
+ * @return A const pointer to the property value interpreted as an array of
celix_version_t entries, or the default
+ * value if the property is not set or its value is not an array of
celix_version_t entries. The returned pointer should
+ * not be modified or freed.
+ */
+CELIX_UTILS_EXPORT const celix_array_list_t*
celix_properties_getVersionArrayList(
Review Comment:
I think that would be more error prone. Because this way the user known the
returned array list is a array list with entry type version.
With exception of generic printing / serialization I do not see a use case
to retrieve all array list types. And for that use case we already have
`celix_properties_getEntry`
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]