/** * Removes the specified element from the Array if such element exists and * optionally sets the out parameter to the value of the removed element. * * @param[in] ar array from which the element is being removed * @param[in] element element being removed * @param[out] out pointer to where the removed value is stored, or NULL * if it is to be ignored * * @return CC_OK if the element was successfully removed, or * CC_ERR_VALUE_NOT_FOUND if the element was not found. */ enum cc_stat array_remove(Array *ar, void *element, void **out) { size_t index; enum cc_stat status = array_index_of(ar, element, &index); if (status == CC_ERR_OUT_OF_RANGE) return CC_ERR_VALUE_NOT_FOUND; if (index != ar->size - 1) { size_t block_size = (ar->size - index) * sizeof(void*); memmove(&(ar->buffer[index]), &(ar->buffer[index + 1]), block_size); } ar->size--; if (out) *out = element; return CC_OK; }
bool array_contains(ArrayConstPtr array, Value val) { return array_index_of(array, val) >= 0; }