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 > size or index < 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 >= size or index < 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();