This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/celix_err in repository https://gitbox.apache.org/repos/asf/celix.git
commit 715bf58ea2856542ea033ede70d0eb903db0f8fa Author: Pepijn Noltes <pepijnnol...@gmail.com> AuthorDate: Mon May 1 19:16:40 2023 +0200 Add return status to modify functions for array list --- libs/utils/include/celix_array_list.h | 27 +++++++---- libs/utils/include_deprecated/array_list.h | 2 +- libs/utils/src/array_list.c | 72 +++++++++++++++++------------- 3 files changed, 59 insertions(+), 42 deletions(-) diff --git a/libs/utils/include/celix_array_list.h b/libs/utils/include/celix_array_list.h index b0a37cbe..6686e7e3 100644 --- a/libs/utils/include/celix_array_list.h +++ b/libs/utils/include/celix_array_list.h @@ -244,81 +244,90 @@ size_t celix_arrayList_getSize(const celix_array_list_t *list, int index); * * @param map The array list. * @param value The pointer value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_add(celix_array_list_t *list, void* value); +celix_status_t celix_arrayList_add(celix_array_list_t *list, void* value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The int value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addInt(celix_array_list_t *list, int value); +celix_status_t celix_arrayList_addInt(celix_array_list_t *list, int value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The long value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addLong(celix_array_list_t *list, long value); +celix_status_t celix_arrayList_addLong(celix_array_list_t *list, long value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The unsigned int value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addUInt(celix_array_list_t *list, unsigned int value); +celix_status_t celix_arrayList_addUInt(celix_array_list_t *list, unsigned int value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The unsigned long value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addULong(celix_array_list_t *list, unsigned long value); +celix_status_t celix_arrayList_addULong(celix_array_list_t *list, unsigned long value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The float value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addFloat(celix_array_list_t *list, float value); +celix_status_t celix_arrayList_addFloat(celix_array_list_t *list, float value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The double value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addDouble(celix_array_list_t *list, double value); +celix_status_t celix_arrayList_addDouble(celix_array_list_t *list, double value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The bool value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addBool(celix_array_list_t *list, bool value); +celix_status_t celix_arrayList_addBool(celix_array_list_t *list, bool value); /** * @brief add pointer entry to the back of the array list. * * @param map The array list. * @param value The size_t value to add to the array list. + * @return CELIX_SUCCESS if the value is added, CELIX_ENOMEM if the array list is out of memory. */ CELIX_UTILS_EXPORT -void celix_arrayList_addSize(celix_array_list_t *list, size_t value); +celix_status_t celix_arrayList_addSize(celix_array_list_t *list, size_t value); /** * @brief Returns the index of the provided entry, if found. diff --git a/libs/utils/include_deprecated/array_list.h b/libs/utils/include_deprecated/array_list.h index 1abaf16e..b42a4836 100644 --- a/libs/utils/include_deprecated/array_list.h +++ b/libs/utils/include_deprecated/array_list.h @@ -47,7 +47,7 @@ CELIX_UTILS_DEPRECATED_EXPORT void arrayList_destroy(celix_array_list_t *list); CELIX_UTILS_DEPRECATED_EXPORT void arrayList_trimToSize(celix_array_list_t *list); -CELIX_UTILS_DEPRECATED_EXPORT void arrayList_ensureCapacity(celix_array_list_t *list, int capacity); +CELIX_UTILS_DEPRECATED_EXPORT celix_status_t arrayList_ensureCapacity(celix_array_list_t *list, int capacity); CELIX_UTILS_DEPRECATED_EXPORT unsigned int arrayList_size(celix_array_list_t *list); diff --git a/libs/utils/src/array_list.c b/libs/utils/src/array_list.c index 27c32010..84d429f8 100644 --- a/libs/utils/src/array_list.c +++ b/libs/utils/src/array_list.c @@ -16,13 +16,6 @@ * specific language governing permissions and limitations * under the License. */ -/** - * array_list.c - * - * \date Aug 4, 2010 - * \author <a href="mailto:d...@celix.apache.org">Apache Celix Project Team</a> - * \copyright Apache License, Version 2.0 - */ #include <stdlib.h> #include <stdio.h> @@ -90,7 +83,8 @@ void arrayList_trimToSize(array_list_pt list) { } } -void arrayList_ensureCapacity(array_list_pt list, int capacity) { +celix_status_t arrayList_ensureCapacity(array_list_pt list, int capacity) { + celix_status_t status = CELIX_SUCCESS; celix_array_list_entry_t *newList; list->modCount++; size_t oldCapacity = list->capacity; @@ -100,9 +94,13 @@ void arrayList_ensureCapacity(array_list_pt list, int capacity) { newCapacity = capacity; } newList = realloc(list->elementData, sizeof(celix_array_list_entry_t) * newCapacity); - list->capacity = newCapacity; - list->elementData = newList; + if (newList != NULL) { + list->capacity = newCapacity; + list->elementData = newList; + } + status = newList == NULL ? CELIX_ENOMEM : CELIX_SUCCESS; } + return status; } unsigned int arrayList_size(array_list_pt list) { @@ -280,7 +278,7 @@ array_list_pt arrayList_clone(array_list_pt list) { // arrayList_ensureCapacity(new, list->size); // memcpy(new->elementData, list->elementData, list->size); // new->size = list->size; - + for (i = 0; i < arrayList_size(list); i++) { arrayList_add(new, arrayList_get(list, i)); } @@ -420,65 +418,75 @@ double celix_arrayList_getDouble(const celix_array_list_t *list, int index) { re bool celix_arrayList_getBool(const celix_array_list_t *list, int index) { return arrayList_getEntry(list, index).boolVal; } size_t celix_arrayList_getSize(const celix_array_list_t *list, int index) { return arrayList_getEntry(list, index).sizeVal; } -static void arrayList_addEntry(celix_array_list_t *list, celix_array_list_entry_t entry) { - arrayList_ensureCapacity(list, (int)list->size + 1); - list->elementData[list->size++] = entry; +static celix_status_t celix_arrayList_addEntry(celix_array_list_t *list, celix_array_list_entry_t entry) { + celix_status_t status = arrayList_ensureCapacity(list, (int)list->size + 1); + if (status == CELIX_SUCCESS) { + list->elementData[list->size++] = entry; + } + return status; } -void celix_arrayList_add(celix_array_list_t *list, void * element) { +celix_status_t celix_arrayList_add(celix_array_list_t *list, void * element) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.voidPtrVal = element; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addInt(celix_array_list_t *list, int val) { +celix_status_t celix_arrayList_addInt(celix_array_list_t *list, int val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.intVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addLong(celix_array_list_t *list, long val) { + +celix_status_t celix_arrayList_addLong(celix_array_list_t *list, long val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.longVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addUInt(celix_array_list_t *list, unsigned int val) { + +celix_status_t celix_arrayList_addUInt(celix_array_list_t *list, unsigned int val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.uintVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addULong(celix_array_list_t *list, unsigned long val) { + +celix_status_t celix_arrayList_addULong(celix_array_list_t *list, unsigned long val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.ulongVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addDouble(celix_array_list_t *list, double val) { + +celix_status_t celix_arrayList_addDouble(celix_array_list_t *list, double val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.doubleVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addFloat(celix_array_list_t *list, float val) { + +celix_status_t celix_arrayList_addFloat(celix_array_list_t *list, float val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.floatVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addBool(celix_array_list_t *list, bool val) { + +celix_status_t celix_arrayList_addBool(celix_array_list_t *list, bool val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.boolVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } -void celix_arrayList_addSize(celix_array_list_t *list, size_t val) { + +celix_status_t celix_arrayList_addSize(celix_array_list_t *list, size_t val) { celix_array_list_entry_t entry; memset(&entry, 0, sizeof(entry)); entry.sizeVal = val; - arrayList_addEntry(list, entry); + return celix_arrayList_addEntry(list, entry); } int celix_arrayList_indexOf(celix_array_list_t *list, celix_array_list_entry_t entry) {