You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2005/11/08 11:14:51 UTC

svn commit: r331770 - in /webservices/axis2/trunk/c/modules/util: src/ test/

Author: samisa
Date: Tue Nov  8 02:14:32 2005
New Revision: 331770

URL: http://svn.apache.org/viewcvs?rev=331770&view=rev
Log:
Added the array list initial compiling version

Added:
    webservices/axis2/trunk/c/modules/util/src/array_list.c
    webservices/axis2/trunk/c/modules/util/src/axis2_array_list.h
    webservices/axis2/trunk/c/modules/util/test/util_array_list_test.c
    webservices/axis2/trunk/c/modules/util/test/util_array_list_test.h
Modified:
    webservices/axis2/trunk/c/modules/util/src/Makefile.am
    webservices/axis2/trunk/c/modules/util/src/Makefile.in
    webservices/axis2/trunk/c/modules/util/src/axis2_string.h
    webservices/axis2/trunk/c/modules/util/src/qname.c
    webservices/axis2/trunk/c/modules/util/src/string.c
    webservices/axis2/trunk/c/modules/util/test/Makefile.am
    webservices/axis2/trunk/c/modules/util/test/Makefile.in
    webservices/axis2/trunk/c/modules/util/test/util_test.c
    webservices/axis2/trunk/c/modules/util/test/util_test.h

Modified: webservices/axis2/trunk/c/modules/util/src/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/Makefile.am?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/util/src/Makefile.am Tue Nov  8 02:14:32 2005
@@ -8,7 +8,8 @@
                         log.c \
                         string.c \
                         file_diff.c \
-                        qname.c
+                        qname.c \
+                        array_list.c
 
 libaxis2_util_la_LIBADD = $(LDFLAGS)
 INCLUDES = -I$(top_builddir)/include -I${CUTEST_HOME}/include \

Modified: webservices/axis2/trunk/c/modules/util/src/Makefile.in
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/Makefile.in?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/Makefile.in (original)
+++ webservices/axis2/trunk/c/modules/util/src/Makefile.in Tue Nov  8 02:14:32 2005
@@ -64,7 +64,7 @@
 am__DEPENDENCIES_1 =
 libaxis2_util_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am_libaxis2_util_la_OBJECTS = hash.lo allocator.lo env.lo error.lo \
-	stream.lo log.lo string.lo file_diff.lo qname.lo
+	stream.lo log.lo string.lo file_diff.lo qname.lo array_list.lo
 libaxis2_util_la_OBJECTS = $(am_libaxis2_util_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/conftools/depcomp
@@ -200,7 +200,8 @@
                         log.c \
                         string.c \
                         file_diff.c \
-                        qname.c
+                        qname.c \
+                        array_list.c
 
 libaxis2_util_la_LIBADD = $(LDFLAGS)
 INCLUDES = -I$(top_builddir)/include -I${CUTEST_HOME}/include \
@@ -276,6 +277,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/allocator.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array_list.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_diff.Plo@am__quote@

Added: webservices/axis2/trunk/c/modules/util/src/array_list.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/array_list.c?rev=331770&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/array_list.c (added)
+++ webservices/axis2/trunk/c/modules/util/src/array_list.c Tue Nov  8 02:14:32 2005
@@ -0,0 +1,348 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+#include <axis2_array_list.h>
+#include <axis2.h>
+
+typedef struct axis2_array_list_impl
+{
+    /** handler description */
+	axis2_array_list_t array_list;
+    /**The number of elements in this list. */
+    int size;
+    /**Current capacity of this list. */
+    int capacity;
+    /** Where the data is stored. */
+    void** data;
+} axis2_array_list_impl_t;
+  
+/** Interface to implementation conversion macro */
+#define AXIS2_INTF_TO_IMPL(array_list) ((axis2_array_list_impl_t *)array_list)
+
+axis2_status_t AXIS2_CALL axis2_array_list_ensure_capacity(struct axis2_array_list *array_list, 
+                                                axis2_env_t **env, 
+                                                int min_capacity);
+int AXIS2_CALL axis2_array_list_size(struct axis2_array_list *array_list, 
+                          axis2_env_t **env);
+axis2_bool_t AXIS2_CALL axis2_array_list_is_empty(struct axis2_array_list *array_list, 
+                                       axis2_env_t **env);
+axis2_bool_t AXIS2_CALL axis2_array_list_contains(struct axis2_array_list *array_list, 
+                                       axis2_env_t **env, 
+                                       void *e);
+int AXIS2_CALL axis2_array_list_index_of(struct axis2_array_list *array_list, 
+                              axis2_env_t **env, 
+                              void *e);
+int AXIS2_CALL axis2_array_list_last_index_of(struct axis2_array_list *array_list, 
+                                   axis2_env_t **env, 
+                                   void *e);
+void** AXIS2_CALL axis2_array_list_to_array(struct axis2_array_list *array_list, 
+                                  axis2_env_t **env);
+void* AXIS2_CALL axis2_array_list_get(struct axis2_array_list *array_list, 
+                           axis2_env_t **env, 
+                           int index);
+void* AXIS2_CALL axis2_array_list_set(struct axis2_array_list *array_list, 
+                           axis2_env_t **env, 
+                           int index, 
+                           void* e);
+axis2_status_t AXIS2_CALL axis2_array_list_add(struct axis2_array_list *array_list, 
+                                    axis2_env_t **env, 
+                                    void* e);
+axis2_status_t AXIS2_CALL axis2_array_list_add_at(struct axis2_array_list *array_list, 
+                                       axis2_env_t **env, 
+                                       int index, 
+                                       void* e);    
+void* AXIS2_CALL axis2_array_list_remove(struct axis2_array_list *array_list, 
+                              axis2_env_t **env, 
+                              int index);
+axis2_bool_t AXIS2_CALL axis2_array_list_check_bound_inclusive(struct axis2_array_list *array_list, 
+                                                    axis2_env_t **env, 
+                                                    int index);
+axis2_bool_t AXIS2_CALL axis2_array_list_check_bound_exclusive(struct axis2_array_list *array_list, 
+                                                    axis2_env_t **env, 
+                                                    int index);
+axis2_status_t AXIS2_CALL axis2_array_list_free(struct axis2_array_list *array_list, 
+                                     axis2_env_t **env);
+
+struct axis2_array_list* AXIS2_CALL axis2_array_list_create(axis2_env_t **env, int capacity)
+{
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    array_list_impl = AXIS2_MALLOC( (*env)->allocator, sizeof(axis2_array_list_impl_t) );
+    if (!array_list_impl)
+    { 
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;        
+    }
+
+    array_list_impl->size = 0;
+    array_list_impl->capacity = 0;
+    array_list_impl->data = NULL;
+	
+    /* Check capacity, and set the default if error */
+    if (capacity <= 0)
+        capacity = AXIS2_ARRAY_LIST_DEFAULT_CAPACITY;
+    array_list_impl->data = AXIS2_MALLOC((*env)->allocator, sizeof(void*) * capacity );
+    if (!array_list_impl->data)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        axis2_array_list_free(&(array_list_impl->array_list), env);
+    }
+    array_list_impl->capacity = capacity;    
+    
+    /* initialize operations */
+    array_list_impl->array_list.ops = NULL;
+    array_list_impl->array_list.ops  = AXIS2_MALLOC( (*env)->allocator, sizeof(axis2_array_list_ops_t) );
+    if (!array_list_impl->array_list.ops)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        axis2_array_list_free(&(array_list_impl->array_list), env);
+        return NULL;        
+    }
+
+    array_list_impl->array_list.ops->ensure_capacity = axis2_array_list_ensure_capacity;
+    array_list_impl->array_list.ops->size = axis2_array_list_size;
+    array_list_impl->array_list.ops->is_empty = axis2_array_list_is_empty;
+    array_list_impl->array_list.ops->contains = axis2_array_list_contains;
+    array_list_impl->array_list.ops->index_of = axis2_array_list_index_of;
+    array_list_impl->array_list.ops->last_index_of = axis2_array_list_last_index_of;
+    array_list_impl->array_list.ops->to_array = axis2_array_list_to_array;
+    array_list_impl->array_list.ops->get = axis2_array_list_get;
+    array_list_impl->array_list.ops->set = axis2_array_list_set;
+    array_list_impl->array_list.ops->add = axis2_array_list_add;
+    array_list_impl->array_list.ops->add_at = axis2_array_list_add_at;
+    array_list_impl->array_list.ops->remove = axis2_array_list_remove;
+    array_list_impl->array_list.ops->check_bound_inclusive = axis2_array_list_check_bound_inclusive;
+    array_list_impl->array_list.ops->check_bound_exclusive = axis2_array_list_check_bound_exclusive;            
+    array_list_impl->array_list.ops->free = axis2_array_list_free;
+}
+
+
+axis2_status_t AXIS2_CALL axis2_array_list_ensure_capacity(struct axis2_array_list *array_list, axis2_env_t **env, int min_capacity)
+{
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);
+    
+    if (min_capacity > array_list_impl->capacity)
+    {
+        int new_capacity = (array_list_impl->capacity * 2 > min_capacity) ? 
+                                (array_list_impl->capacity * 2) : min_capacity;
+        array_list_impl->data = AXIS2_REALLOC((*env)->allocator, array_list_impl->data, sizeof(void*) * new_capacity);
+        if (!array_list_impl->data)
+        {
+            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+            return AXIS2_FAILURE;
+        }
+    }
+    return AXIS2_SUCCESS;
+}
+
+int AXIS2_CALL axis2_array_list_size(struct axis2_array_list *array_list, axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    return AXIS2_INTF_TO_IMPL(array_list)->size;
+}
+
+axis2_bool_t AXIS2_CALL axis2_array_list_is_empty(struct axis2_array_list *array_list, axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    return AXIS2_INTF_TO_IMPL(array_list)->size == 0;
+}
+
+axis2_bool_t AXIS2_CALL axis2_array_list_contains(struct axis2_array_list *array_list, axis2_env_t **env, void *e)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    return axis2_array_list_index_of(array_list, env, e) != -1;
+}
+
+int AXIS2_CALL axis2_array_list_index_of(struct axis2_array_list *array_list, axis2_env_t **env, void *e)
+{
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    int i = 0;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);    
+    
+    for (i = 0; i < array_list_impl->size; i++)
+        if (e == array_list_impl->data[i])
+            return i;
+    return -1;
+}
+
+int AXIS2_CALL axis2_array_list_last_index_of(struct axis2_array_list *array_list, axis2_env_t **env, void *e)
+{
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    int i = 0;
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);    
+
+    for (i = array_list_impl->size - 1; i >= 0; i--)
+        if (e == array_list_impl->data[i])
+            return i;
+    return -1;
+}
+
+void** AXIS2_CALL axis2_array_list_to_array(struct axis2_array_list *array_list, axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, NULL);
+    return AXIS2_INTF_TO_IMPL(array_list)->data;
+}
+
+void* AXIS2_CALL axis2_array_list_get(struct axis2_array_list *array_list, axis2_env_t **env, int index)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, NULL);
+    if (axis2_array_list_check_bound_exclusive(array_list, env, index) )
+        return AXIS2_INTF_TO_IMPL(array_list)->data[index];
+    else
+        return NULL;
+}
+
+void* AXIS2_CALL axis2_array_list_set(struct axis2_array_list *array_list, axis2_env_t **env, int index, void* e)
+{
+    void* result = NULL;
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, NULL);
+    
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);    
+    
+    if (axis2_array_list_check_bound_exclusive(array_list, env, index))
+    {
+        result = array_list_impl->data[index];
+        array_list_impl->data[index] = e;
+    }
+    
+    return result;
+}
+
+axis2_status_t AXIS2_CALL axis2_array_list_add(struct axis2_array_list *array_list, axis2_env_t **env, void* e)
+{
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);    
+    
+    if (array_list_impl->size == array_list_impl->capacity)
+      if (axis2_array_list_ensure_capacity(array_list, env, array_list_impl->size + 1) != AXIS2_SUCCESS )
+          return AXIS2_FAILURE;
+    array_list_impl->data[array_list_impl->size++] = e;
+    return AXIS2_SUCCESS;
+}
+
+axis2_status_t AXIS2_CALL axis2_array_list_add_at(struct axis2_array_list *array_list, axis2_env_t **env, int index, void* e)
+{
+    int i = 0;
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);    
+    
+    if (!axis2_array_list_check_bound_inclusive(array_list, env, index))
+        return AXIS2_FAILURE;
+    
+    if (array_list_impl->size == array_list_impl->capacity)
+    {
+        if (axis2_array_list_ensure_capacity(array_list, env, array_list_impl->size + 1) != AXIS2_SUCCESS )
+            return AXIS2_FAILURE;
+    }
+      
+    if (index != array_list_impl->size)
+    {
+        for (i = array_list_impl->size; i > index; i--)
+            array_list_impl->data[i] = array_list_impl->data[i - 1];
+    }
+    
+    array_list_impl->data[index] = e;
+    array_list_impl->size++;
+    return AXIS2_SUCCESS;
+}
+
+void* AXIS2_CALL axis2_array_list_remove(struct axis2_array_list *array_list, axis2_env_t **env, int index)
+{
+    void* result = NULL;
+    int i = 0;
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, NULL);
+    
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);    
+    
+    
+    if (axis2_array_list_check_bound_exclusive(array_list, env, index))
+    {
+        result = array_list_impl->data[index];
+        for (i = index; i < array_list_impl->size - 1; i++)
+            array_list_impl->data[i] = array_list_impl->data[i + 1];
+    }
+    
+    return result;
+}
+
+axis2_bool_t AXIS2_CALL axis2_array_list_check_bound_inclusive(struct axis2_array_list *array_list, axis2_env_t **env, int index)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    
+    if (index < 0 || index > AXIS2_INTF_TO_IMPL(array_list)->size)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, AXIS2_FAILURE);
+        return AXIS2_FALSE;
+    }
+    return AXIS2_TRUE;
+}
+
+axis2_bool_t AXIS2_CALL axis2_array_list_check_bound_exclusive(struct axis2_array_list *array_list, axis2_env_t **env, int index)
+{
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    
+    if (index < 0 || index >= AXIS2_INTF_TO_IMPL(array_list)->size)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_INDEX_OUT_OF_BOUNDS, AXIS2_FAILURE);
+        return AXIS2_FALSE;
+    }
+    return AXIS2_TRUE;
+}
+
+axis2_status_t AXIS2_CALL axis2_array_list_free(struct axis2_array_list *array_list, axis2_env_t **env)
+{
+    axis2_array_list_impl_t *array_list_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(array_list, env, AXIS2_FAILURE);
+    
+    array_list_impl = AXIS2_INTF_TO_IMPL(array_list);
+    
+    if (array_list_impl->array_list.ops)
+    {
+        AXIS2_FREE((*env)->allocator, array_list_impl->array_list.ops);
+        array_list_impl->array_list.ops = NULL;
+    }
+    
+    if (array_list_impl->data)
+    {
+        AXIS2_FREE((*env)->allocator, array_list_impl->data);
+        array_list_impl->data = NULL;
+    }
+    
+    AXIS2_FREE((*env)->allocator, array_list_impl);
+    array_list_impl = NULL;
+    
+    return AXIS2_SUCCESS;
+}

Added: webservices/axis2/trunk/c/modules/util/src/axis2_array_list.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/axis2_array_list.h?rev=331770&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/axis2_array_list.h (added)
+++ webservices/axis2/trunk/c/modules/util/src/axis2_array_list.h Tue Nov  8 02:14:32 2005
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 AXIS2_ARRAY_LIST_H
+#define AXIS2_ARRAY_LIST_H
+
+/**
+ * @file axis2_array_list.h
+ * @brief Axis2 array_list interface
+ */
+
+#include <axis2_defines.h>
+#include <axis2_env.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+struct axis2_array_list;
+struct axis2_array_list_ops;
+    
+static const int AXIS2_ARRAY_LIST_DEFAULT_CAPACITY = 16;
+    
+/**
+ * @defgroup axis2_array_list Array List
+ * @ingroup axis2_util
+ * @{
+ */
+
+   /**
+    *   \brief Array List operations struct
+    */
+    AXIS2_DECLARE_DATA typedef struct axis2_array_list_ops
+    {
+       /**
+        * 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 min_capacity the minimum guaranteed capacity
+        */
+        axis2_status_t (AXIS2_CALL *ensure_capacity)(struct axis2_array_list *array_list, axis2_env_t **env, int min_capacity);
+        
+       /**
+        * Returns the number of elements in this list.
+        *
+        * @return the list size
+        */
+        int (AXIS2_CALL *size)(struct axis2_array_list *array_list, axis2_env_t **env);
+        
+       /**
+        * Checks if the list is empty.
+        *
+        * @return true if there are no elements, else false
+        */
+        axis2_bool_t (AXIS2_CALL *is_empty)(struct axis2_array_list *array_list, axis2_env_t **env);
+        
+       /**
+        * Returns true iff element is in this array_list.
+        *
+        * @param e the element whose inclusion in the List is being tested
+        * @return true if the list contains e
+        */
+        axis2_bool_t (AXIS2_CALL *contains)(struct axis2_array_list *array_list, axis2_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 e the element whose inclusion in the List is being tested
+        * @return the index where e was found
+        */
+        int (AXIS2_CALL *index_of)(struct axis2_array_list *array_list, axis2_env_t **env, void *e);
+        
+       /**
+        * Returns the highest 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 e the element whose inclusion in the List is being tested
+        * @return the index where e was found
+        */
+        int (AXIS2_CALL *last_index_of)(struct axis2_array_list *array_list, axis2_env_t **env, void *e);
+        
+       /**
+        * Returns a void* array containing all of the elements in this array_list.
+        * The array is not independent of this list.
+        *
+        * @return array of elements in this list
+        */
+        void** (AXIS2_CALL *to_array)(struct axis2_array_list *array_list, axis2_env_t **env);
+        
+       /**
+        * Retrieves the element at the user-supplied index.
+        *
+        * @param index the index of the element we are fetching
+        * @return element at the given index
+        */
+        void* (AXIS2_CALL *get)(struct axis2_array_list *array_list, axis2_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 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
+        */
+        void* (AXIS2_CALL *set)(struct axis2_array_list *array_list, axis2_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 e the element to be appended to this list
+        * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+        */
+        axis2_status_t (AXIS2_CALL *add)(struct axis2_array_list *array_list, axis2_env_t **env, 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 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_status_t (AXIS2_CALL *add_at)(struct axis2_array_list *array_list, axis2_env_t **env, int index, void* e);
+        
+       /**
+        * Removes the element at the user-supplied index.
+        *
+        * @param index the index of the element to be removed
+        * @return the removed void* pointer
+        */
+        void* (AXIS2_CALL *remove)(struct axis2_array_list *array_list, axis2_env_t **env, int index);
+        
+       /**
+        * Checks that the index is in the range of possible elements (inclusive).
+        *
+        * @param index the index to check
+        * @return AXIS2_FALSE if index &gt; size or index &lt; 0, else AXIS2_TRUE
+        */
+        axis2_bool_t (AXIS2_CALL *check_bound_inclusive)(struct axis2_array_list *array_list, axis2_env_t **env, int index);
+        
+       /**
+        * Checks that the index is in the range of existing elements (exclusive).
+        *
+        * @param index the index to check
+        * @return AXIS2_FALSE if index &gt;= size or index &lt; 0, else AXIS2_TRUE
+        */
+        axis2_bool_t (AXIS2_CALL *check_bound_exclusive)(struct axis2_array_list *array_list, axis2_env_t **env, int index);
+            
+        axis2_status_t (AXIS2_CALL *free)(struct axis2_array_list *array_list, axis2_env_t **env);
+
+    } axis2_array_list_ops_t;
+
+   /** 
+    * \brief Array List struct
+    */
+     
+    typedef struct axis2_array_list
+    {
+        /** Handler Description related operations */
+        axis2_array_list_ops_t *ops;
+    } axis2_array_list_t;
+
+   /**
+    * Constructs a new array list with the supplied initial capacity.
+    * If capacity is invalid (<= 0) then default capacity is used
+    * @param capacity initial capacity of this array_list
+    * @throws IllegalArgumentException if capacity is negative
+    */
+    AXIS2_DECLARE(axis2_array_list_t*) axis2_array_list_create(axis2_env_t **env, int capacity);
+
+
+#define AXIS2_ARRAY_LIST_FREE(array_list, env) ((array_list)->ops->free(array_list, env))
+#define AXIS2_ARRAY_LIST_SIZE(array_list, env) ((array_list)->ops->size(array_list, env))
+#define AXIS2_ARRAY_LIST_IS_EMPTY(array_list, env) ((array_list)->ops->is_empty(array_list, env))
+#define AXIS2_ARRAY_LIST_CONTAINS(array_list, env, e) ((array_list)->ops->contains(array_list, env, e))
+#define AXIS2_ARRAY_LIST_INDEX_OF(array_list, env, e) ((array_list)->ops->index_of(array_list, env, e))
+#define AXIS2_ARRAY_LIST_LAST_INDEX_OF(array_list, env, e) ((array_list)->ops->last_index_of(array_list, env, e))    
+#define AXIS2_ARRAY_LIST_TO_ARRAY(array_list, env) ((array_list)->ops->index_of(array_list, env))
+#define AXIS2_ARRAY_LIST_GET(array_list, env, index) ((array_list)->ops->get(array_list, env, index))
+#define AXIS2_ARRAY_LIST_SET(array_list, env, index, e) ((array_list)->ops->set(array_list, env, index, e))
+#define AXIS2_ARRAY_LIST_ADD(array_list, env, e) ((array_list)->ops->add(array_list, env, e))
+#define AXIS2_ARRAY_LIST_ADD_AT(array_list, env, index, e) ((array_list)->ops->add_at(array_list, env, index, e))
+#define AXIS2_ARRAY_LIST_REMOVE(array_list, env, index) ((array_list)->ops->remove(array_list, env, index))
+
+/** @} */
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif    /* AXIS2_ARRAY_LIST_H */

Modified: webservices/axis2/trunk/c/modules/util/src/axis2_string.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/axis2_string.h?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/axis2_string.h (original)
+++ webservices/axis2/trunk/c/modules/util/src/axis2_string.h Tue Nov  8 02:14:32 2005
@@ -32,10 +32,10 @@
  * @{
  */
 
-void* AXIS2_CALL
+void* 
 axis2_strdup (const void *ptr);
 
-int AXIS2_CALL
+int 
 axis2_strcmp (const axis2_char_t * s1, const axis2_char_t * s2);
 
 /** @} */

Modified: webservices/axis2/trunk/c/modules/util/src/qname.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/qname.c?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/qname.c (original)
+++ webservices/axis2/trunk/c/modules/util/src/qname.c Tue Nov  8 02:14:32 2005
@@ -351,4 +351,4 @@
     }
     AXIS2_INTF_TO_IMPL(qname)->localpart = (axis2_char_t*)axis2_strdup(localpart);
     return AXIS2_SUCCESS;
-}                          
\ No newline at end of file
+}

Modified: webservices/axis2/trunk/c/modules/util/src/string.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/string.c?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/string.c (original)
+++ webservices/axis2/trunk/c/modules/util/src/string.c Tue Nov  8 02:14:32 2005
@@ -18,7 +18,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-void* AXIS2_CALL
+void* 
 axis2_strdup (const void *ptr)
 {
     if (ptr)
@@ -31,7 +31,7 @@
     }
 }
 
-int AXIS2_CALL
+int 
 axis2_strcmp (const axis2_char_t * s1, const axis2_char_t * s2)
 {
     if (s1 && s2)

Modified: webservices/axis2/trunk/c/modules/util/test/Makefile.am
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/test/Makefile.am?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/test/Makefile.am (original)
+++ webservices/axis2/trunk/c/modules/util/test/Makefile.am Tue Nov  8 02:14:32 2005
@@ -1,8 +1,8 @@
 prgbindir=$(prefix)/bin/unit_test
 prglibdir=$(prefix)/lib/unit_test
 prglib_LTLIBRARIES = libtest_util.la
-AM_CPPFLAGS = $(CPPFLAGS)
-libtest_util_la_SOURCES = util_hash_test.c util_stream_test.c util_log_test.c util_error_test.c util_test.c
+AM_CPPFLAGS = $(CPPFLAGS) -g
+libtest_util_la_SOURCES = util_hash_test.c util_stream_test.c util_log_test.c util_error_test.c util_test.c util_array_list_test.c
 include_HEADERS=$(top_builddir)/modules/util/test/*.h
 
 libtest_util_la_LIBADD = $(LDFLAGS) $(top_builddir)/modules/util/src/libaxis2_util.la

Modified: webservices/axis2/trunk/c/modules/util/test/Makefile.in
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/test/Makefile.in?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/test/Makefile.in (original)
+++ webservices/axis2/trunk/c/modules/util/test/Makefile.in Tue Nov  8 02:14:32 2005
@@ -70,7 +70,8 @@
 libtest_util_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(top_builddir)/modules/util/src/libaxis2_util.la
 am_libtest_util_la_OBJECTS = util_hash_test.lo util_stream_test.lo \
-	util_log_test.lo util_error_test.lo util_test.lo
+	util_log_test.lo util_error_test.lo util_test.lo \
+	util_array_list_test.lo
 libtest_util_la_OBJECTS = $(am_libtest_util_la_OBJECTS)
 prgbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(prgbin_PROGRAMS)
@@ -207,8 +208,8 @@
 prgbindir = $(prefix)/bin/unit_test
 prglibdir = $(prefix)/lib/unit_test
 prglib_LTLIBRARIES = libtest_util.la
-AM_CPPFLAGS = $(CPPFLAGS)
-libtest_util_la_SOURCES = util_hash_test.c util_stream_test.c util_log_test.c util_error_test.c util_test.c
+AM_CPPFLAGS = $(CPPFLAGS) -g
+libtest_util_la_SOURCES = util_hash_test.c util_stream_test.c util_log_test.c util_error_test.c util_test.c util_array_list_test.c
 include_HEADERS = $(top_builddir)/modules/util/test/*.h
 libtest_util_la_LIBADD = $(LDFLAGS) $(top_builddir)/modules/util/src/libaxis2_util.la
 INCLUDES = -I$(top_builddir)/include \
@@ -318,6 +319,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_array_list_test.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_error_test.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_hash_test.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_log_test.Plo@am__quote@

Added: webservices/axis2/trunk/c/modules/util/test/util_array_list_test.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/test/util_array_list_test.c?rev=331770&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/util/test/util_array_list_test.c (added)
+++ webservices/axis2/trunk/c/modules/util/test/util_array_list_test.c Tue Nov  8 02:14:32 2005
@@ -0,0 +1,36 @@
+#include "util_array_list_test.h"
+#include "axis2_string.h"
+typedef struct a
+{
+    char *value;
+} a;
+
+void Testaxis2_array_list_get(CuTest *tc)
+{
+    axis2_allocator_t *allocator = axis2_allocator_init (NULL);
+    axis2_env_t *env = axis2_env_create(allocator);
+
+    axis2_array_list_t *al;
+    a *actual, *expected;
+    a *actual2;
+
+    actual = (a *) AXIS2_MALLOC(env->allocator, sizeof (a));
+    actual2 = (a *) AXIS2_MALLOC(env->allocator, sizeof (a));
+
+
+    actual->value = axis2_strdup("value1");
+    actual2->value = axis2_strdup("value2");
+
+
+    al = axis2_array_list_create (&env, 10);
+
+    AXIS2_ARRAY_LIST_ADD (al, &env, (void*)actual);
+    AXIS2_ARRAY_LIST_ADD (al, &env, (void*)actual);
+    AXIS2_ARRAY_LIST_ADD (al, &env, (void*)actual);
+    AXIS2_ARRAY_LIST_ADD (al, &env, (void*)actual);
+    AXIS2_ARRAY_LIST_SET (al, &env, 3, (void*)actual2);
+    AXIS2_ARRAY_LIST_REMOVE (al, &env, 2);
+
+    expected = (a *) AXIS2_ARRAY_LIST_GET (al, &env, 2);
+    CuAssertStrEquals(tc, expected->value, actual2->value);
+}

Added: webservices/axis2/trunk/c/modules/util/test/util_array_list_test.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/test/util_array_list_test.h?rev=331770&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/util/test/util_array_list_test.h (added)
+++ webservices/axis2/trunk/c/modules/util/test/util_array_list_test.h Tue Nov  8 02:14:32 2005
@@ -0,0 +1,14 @@
+#ifndef UTIL_ARRAY_LIST_TEST_H
+#define UTIL_ARRAY_LIST_TEST_H
+
+#include <string.h>
+#include <stdio.h>
+#include <CuTest.h>
+#include <axis2_allocator.h>
+#include <axis2_env.h>
+#include <axis2_array_list.h>
+#include <axis2_string.h>
+
+void Testaxis2_array_list_get(CuTest *tc);
+
+#endif /* UTIL_ARRAY_LIST_TEST_H*/

Modified: webservices/axis2/trunk/c/modules/util/test/util_test.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/test/util_test.c?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/test/util_test.c (original)
+++ webservices/axis2/trunk/c/modules/util/test/util_test.c Tue Nov  8 02:14:32 2005
@@ -10,6 +10,7 @@
     SUITE_ADD_TEST(suite, Testaxis2_stream_write);
     SUITE_ADD_TEST(suite, Testaxis2_log_write);
     SUITE_ADD_TEST(suite, Testaxis2_hash_get);
+    SUITE_ADD_TEST(suite, Testaxis2_array_list_get);
     return suite;
 }
 

Modified: webservices/axis2/trunk/c/modules/util/test/util_test.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/test/util_test.h?rev=331770&r1=331769&r2=331770&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/test/util_test.h (original)
+++ webservices/axis2/trunk/c/modules/util/test/util_test.h Tue Nov  8 02:14:32 2005
@@ -5,6 +5,7 @@
 #include "util_stream_test.h"
 #include "util_log_test.h"
 #include "util_hash_test.h"
+#include "util_array_list_test.h"
 #include "util_error_test.h"
 
 CuSuite* axis2_utilGetSuite();