/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef AXUTIL_ARRAY_LIST_H #define AXUTIL_ARRAY_LIST_H /** * @defgroup axutil_array_list array list * @ingroup axis2_util * Description. * @{ */ /** * @file axutil_array_list.h * @brief Axis2 array_list interface */ #include #include #ifdef __cplusplus extern "C" { #endif #define AXIS2_ARRAY_LIST_DEFAULT_CAPACITY 16 /** * Array List struct */ typedef struct axutil_array_list axutil_array_list_t; /** * Constructs a new array list with the supplied initial capacity. * If capacity is invalid (<= 0) then default capacity is used * @param env pointer to environment struct * @param capacity initial capacity of this array_list */ AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL axutil_array_list_create( const axutil_env_t * env, int capacity); /** * Free array passed as void pointer. * @param array_list pointer to array list * @param env pointer to environment struct */ AXIS2_EXTERN void AXIS2_CALL axutil_array_list_free_void_arg( void *array_list, const axutil_env_t * env); /** * Guarantees that this list will have at least enough capacity to * hold min_capacity elements. This implementation will grow the list to * max(current * 2, min_capacity) * @param array_list pointer to array_list * @param env pointer to environment struct * @param min_capacity the minimum guaranteed capacity * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE */ AXIS2_EXTERN axis2_status_t AXIS2_CALL axutil_array_list_ensure_capacity( struct axutil_array_list *array_list, const axutil_env_t * env, int min_capacity); /** * Returns the number of elements in this list. * @param array_list pointer to array list * @param env pointer to environment struct * @return the list size */ AXIS2_EXTERN int AXIS2_CALL axutil_array_list_size( struct axutil_array_list *array_list, const axutil_env_t * env); /** * Checks if the list is empty. * @param array_list pointer to array list * @param env pointer to environment struct * @return true if there are no elements, else false */ AXIS2_EXTERN axis2_bool_t AXIS2_CALL axutil_array_list_is_empty( struct axutil_array_list *array_list, const axutil_env_t * env); /** * Returns true iff element is in this array_list. * @param array_list pointer to array list * @param env pointer to environment struct * @param e the element whose inclusion in the List is being tested * @return true if the list contains e */ AXIS2_EXTERN axis2_bool_t AXIS2_CALL axutil_array_list_contains( struct axutil_array_list *array_list, const axutil_env_t * env, void *e); /** * Returns the lowest index at which element appears in this List, or * -1 if it does not appear. This looks for the pointer value equality only, * does not look into pointer content * @param array_list pointer to array list * @param env pointer to environment struct * @param e the element whose inclusion in the List is being tested * @return the index where e was found */ AXIS2_EXTERN int AXIS2_CALL axutil_array_list_index_of( struct axutil_array_list *array_list, const axutil_env_t * env, void *e); /** * Retrieves the element at the user-supplied index. * @param array_list pointer to array list * @param env pointer to environment struct * @param index the index of the element we are fetching * @return element at the given index */ AXIS2_EXTERN void *AXIS2_CALL axutil_array_list_get( struct axutil_array_list *array_list, const axutil_env_t * env, int index); /** * Sets the element at the specified index. The new element, e, * can be an object of any type or null. * @param array_list pointer to array list * @param env pointer to environment struct * @param index the index at which the element is being set * @param e the element to be set * @return the element previously at the specified index */ AXIS2_EXTERN void *AXIS2_CALL axutil_array_list_set( struct axutil_array_list *array_list, const axutil_env_t * env, int index, void *e); /** * Appends the supplied element to the end of this list. * The element, e, can be a pointer of any type or NULL. * @param array_list pointer to array list * @param env pointer to environment struct * @param e the element to be appended to this list * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE */ AXIS2_EXTERN axis2_status_t AXIS2_CALL axutil_array_list_add( struct axutil_array_list *array_list, const axutil_env_t * env, const void *e); /** * Adds the supplied element at the specified index, shifting all * elements currently at that index or higher one to the right. * The element, e, can be a pointer of any type or NULL. * @param array_list pointer to array list * @param env pointer to environment struct * @param index the index at which the element is being added * @param e the item being added * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE */ AXIS2_EXTERN axis2_status_t AXIS2_CALL axutil_array_list_add_at( struct axutil_array_list *array_list, const axutil_env_t * env, const int index, const void *e); /** * Removes the element at the user-supplied index. * @param array_list pointer to array list * @param env pointer to environment struct * @param index the index of the element to be removed * @return the removed void* pointer */ AXIS2_EXTERN void *AXIS2_CALL axutil_array_list_remove( struct axutil_array_list *array_list, const axutil_env_t * env, int index); /** * Checks that the index is in the range of possible elements (inclusive). * @param array_list pointer to array list * @param env pointer to environment struct * @param index the index to check * @return AXIS2_FALSE if index > size or index < 0, else AXIS2_TRUE */ AXIS2_EXTERN axis2_bool_t AXIS2_CALL axutil_array_list_check_bound_inclusive( struct axutil_array_list *array_list, const axutil_env_t * env, int index); /** * Checks that the index is in the range of existing elements (exclusive). * @param array_list pointer to array list * @param env pointer to environment struct * @param index the index to check * @return AXIS2_FALSE if index >= size or index < 0, else AXIS2_TRUE */ AXIS2_EXTERN axis2_bool_t AXIS2_CALL axutil_array_list_check_bound_exclusive( struct axutil_array_list *array_list, const axutil_env_t * env, int index); /** * @param array_list pointer to array list * @param env pointer to environment struct * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE */ AXIS2_EXTERN void AXIS2_CALL axutil_array_list_free( struct axutil_array_list *array_list, const axutil_env_t * env); #ifdef __cplusplus } #endif #endif /* AXIS2_ARRAY_LIST_H */